Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
T
telegram_bot_antispammer
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
1
Merge Requests
1
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Иванова Мария Кирилловна
telegram_bot_antispammer
Commits
a870b567
Commit
a870b567
authored
May 30, 2025
by
Иванова Мария Кирилловна
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
With buttons for bunned
parent
e4130f01
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
64 additions
and
16 deletions
+64
-16
bot.py
bot.py
+35
-1
sqlite_tools.py
sqlite_tools.py
+29
-15
No files found.
bot.py
View file @
a870b567
...
...
@@ -4,6 +4,7 @@ from aiogram.types import ChatMemberUpdated, Message, InlineKeyboardButton, Inli
from
aiogram.exceptions
import
AiogramError
from
itertools
import
chain
import
os
import
atexit
from
dotenv
import
load_dotenv
from
aiogram.filters
import
Command
import
logging
...
...
@@ -12,7 +13,7 @@ from aiogram.types import ChatMemberUpdated, Message, BotCommand
from
spam_keywords
import
is_spam
,
SPAM_KEYWORDS
from
symbol_utils
import
has_mixed_layout
,
is_arabic_name
,
normalize_text_to_infinitive
from
sqlite_tools
import
create_db
,
add_user
,
user_exists
,
ban_user
,
is_user_banned
from
sqlite_tools
import
create_db
,
add_user
,
user_exists
,
ban_user
,
is_user_banned
,
close_db
import
sqlite3
...
...
@@ -159,6 +160,22 @@ async def welcome_new_user(event: ChatMemberUpdated):
try
:
await
bot
.
ban_chat_member
(
event
.
chat
.
id
,
new_user
.
id
)
ban_user
(
new_user
.
id
,
new_user
.
first_name
,
new_user
.
last_name
,
new_user
.
username
,
"Spam detected in name"
)
# Создаем кнопку для разбанивания
keyboard
=
InlineKeyboardMarkup
(
inline_keyboard
=
[
[
InlineKeyboardButton
(
text
=
"🔓 Разбанить"
,
callback_data
=
f
"unban_{new_user.id}"
)]
]
)
# Отправляем сообщение с кнопкой в группу логов
await
bot
.
send_message
(
chat_id
=
log_chat_id
,
text
=
f
"❌ User <b>{new_user.id}</b> has been banned due to spam detected in name."
,
reply_markup
=
keyboard
,
parse_mode
=
"HTML"
)
logger
.
info
(
f
"User {new_user.first_name} ({new_user.id}) banned due to spam detected in name."
,
extra
=
{
"chat_id"
:
event
.
chat_id
})
return
...
...
@@ -173,6 +190,22 @@ async def welcome_new_user(event: ChatMemberUpdated):
try
:
await
bot
.
ban_chat_member
(
event
.
chat
.
id
,
new_user
.
id
)
ban_user
(
new_user
.
id
,
new_user
.
first_name
,
new_user
.
last_name
,
new_user
.
username
,
"Arabic name detected"
)
# Создаем кнопку для разбанивания
keyboard
=
InlineKeyboardMarkup
(
inline_keyboard
=
[
[
InlineKeyboardButton
(
text
=
"🔓 Разбанить"
,
callback_data
=
f
"unban_{new_user.id}"
)]
]
)
# Отправляем сообщение с кнопкой в группу логов
await
bot
.
send_message
(
chat_id
=
log_chat_id
,
text
=
f
"❌ User <b>{new_user.id}</b> has been banned due to Arabic name."
,
reply_markup
=
keyboard
,
parse_mode
=
"HTML"
)
logger
.
info
(
f
"User {new_user.first_name} ({new_user.id}) banned due to Arabic name."
,
extra
=
{
"chat_id"
:
event
.
chat_id
})
return
...
...
@@ -437,4 +470,5 @@ async def main():
if
__name__
==
"__main__"
:
create_db
()
# Создание базы данных и таблиц
atexit
.
register
(
close_db
)
asyncio
.
run
(
main
())
sqlite_tools.py
View file @
a870b567
# Функция для создания базы данных и таблиц
import
sqlite3
import
os
from
dotenv
import
load_dotenv
db_path
=
os
.
getenv
(
"DB_PATH"
)
def
create_db
():
# Загрузка переменных из файла .env
load_dotenv
()
db_path
=
os
.
getenv
(
"DB_PATH"
)
# вернуть
# Глобальные переменные
conn
=
None
cursor
=
None
def
create_db
():
# Подключаемся к базе данных (если она не существует, она будет создана)
global
conn
,
cursor
conn
=
sqlite3
.
connect
(
db_path
)
cursor
=
conn
.
cursor
()
...
...
@@ -39,13 +47,19 @@ def create_db():
conn
.
commit
()
conn
.
close
()
#conn.close()
def
close_db
():
"""Закрытие соединения"""
global
conn
if
conn
:
conn
.
close
()
# Функция для добавления пользователя в базу данных
def
add_user
(
user_id
,
first_name
,
last_name
,
username
):
conn
=
sqlite3
.
connect
(
db_path
)
cursor
=
conn
.
cursor
()
#
conn = sqlite3.connect(db_path)
#
cursor = conn.cursor()
cursor
.
execute
(
'''
INSERT INTO users (id, first_name, last_name, username)
...
...
@@ -53,23 +67,23 @@ def add_user(user_id, first_name, last_name, username):
'''
,
(
user_id
,
first_name
,
last_name
,
username
))
conn
.
commit
()
conn
.
close
()
#
conn.close()
# Функция для проверки, есть ли пользователь в базе данных
def
user_exists
(
user_id
):
conn
=
sqlite3
.
connect
(
db_path
)
cursor
=
conn
.
cursor
()
#
conn = sqlite3.connect(db_path)
#
cursor = conn.cursor()
cursor
.
execute
(
'SELECT id FROM users WHERE id = ?'
,
(
user_id
,))
result
=
cursor
.
fetchone
()
conn
.
close
()
#
conn.close()
return
result
is
not
None
# Функция для перемещения пользователя в таблицу забаненных
def
ban_user
(
user_id
,
first_name
,
last_name
,
username
,
ban_reason
):
conn
=
sqlite3
.
connect
(
db_path
)
cursor
=
conn
.
cursor
()
#
conn = sqlite3.connect(db_path)
#
cursor = conn.cursor()
# Добавляем в таблицу забаненных
cursor
.
execute
(
'''
...
...
@@ -81,14 +95,14 @@ def ban_user(user_id, first_name, last_name, username, ban_reason):
cursor
.
execute
(
'DELETE FROM users WHERE id = ?'
,
(
user_id
,))
conn
.
commit
()
conn
.
close
()
#
conn.close()
def
is_user_banned
(
user_id
):
conn
=
sqlite3
.
connect
(
db_path
)
cursor
=
conn
.
cursor
()
#
conn = sqlite3.connect(db_path)
#
cursor = conn.cursor()
cursor
.
execute
(
'SELECT id FROM banned_users WHERE id = ?'
,
(
user_id
,))
result
=
cursor
.
fetchone
()
conn
.
close
()
#
conn.close()
return
result
is
not
None
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment