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
f321e8f1
Commit
f321e8f1
authored
Sep 13, 2025
by
Иванова Мария Кирилловна
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
With commands
parent
a870b567
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
135 additions
and
0 deletions
+135
-0
bot.py
bot.py
+135
-0
No files found.
bot.py
View file @
f321e8f1
...
@@ -7,6 +7,7 @@ import os
...
@@ -7,6 +7,7 @@ import os
import
atexit
import
atexit
from
dotenv
import
load_dotenv
from
dotenv
import
load_dotenv
from
aiogram.filters
import
Command
from
aiogram.filters
import
Command
from
aiogram.filters
import
CommandObject
import
logging
import
logging
from
aiogram
import
types
from
aiogram
import
types
from
aiogram.types
import
ChatMemberUpdated
,
Message
,
BotCommand
from
aiogram.types
import
ChatMemberUpdated
,
Message
,
BotCommand
...
@@ -459,12 +460,146 @@ async def report_spam(message: types.Message):
...
@@ -459,12 +460,146 @@ async def report_spam(message: types.Message):
# Удаляем сообщение с командой
# Удаляем сообщение с командой
await
message
.
delete
()
await
message
.
delete
()
# Обработчик команды /unban
@dp.message
(
Command
(
"unban"
))
async
def
unban_user_command
(
message
:
types
.
Message
,
command
:
CommandObject
):
if
message
.
chat
.
type
not
in
[
"group"
,
"supergroup"
]:
await
message
.
reply
(
"Эта команда доступна только в группах."
)
return
# Проверяем права пользователя
chat_member
=
await
bot
.
get_chat_member
(
message
.
chat
.
id
,
message
.
from_user
.
id
)
if
chat_member
.
status
not
in
[
"administrator"
,
"creator"
]:
await
message
.
reply
(
"❌ У вас нет прав для разбана пользователей."
)
return
# Проверяем аргументы
if
not
command
.
args
:
await
message
.
reply
(
"Использование: /unban user_id"
)
return
try
:
user_id
=
int
(
command
.
args
.
strip
())
# строго только ID
except
ValueError
:
await
message
.
reply
(
"❌ ID должен быть числом. Использование: /unban user_id"
)
return
try
:
# Разбан в чате
await
bot
.
unban_chat_member
(
message
.
chat
.
id
,
user_id
,
only_if_banned
=
True
)
# Удаляем из таблицы забаненных
conn
=
sqlite3
.
connect
(
db_path
)
cursor
=
conn
.
cursor
()
cursor
.
execute
(
"DELETE FROM banned_users WHERE id = ?"
,
(
user_id
,))
conn
.
commit
()
conn
.
close
()
# Лог в группу логов
await
bot
.
send_message
(
log_chat_id
,
f
"✅ Moderator <b>{message.from_user.full_name}</b> ({message.from_user.id}) "
f
"unbanned user с ID <b>{user_id}</b>."
,
parse_mode
=
"HTML"
)
# Удаляем сообщение с командой
await
message
.
delete
()
except
Exception
as
e
:
await
message
.
reply
(
f
"Unban error: {e}"
)
await
bot
.
send_message
(
log_chat_id
,
f
"❌ Error of unbanning ID <b>{command.args}</b>: {e}"
,
parse_mode
=
"HTML"
)
# Обработчик команды /ban
@dp.message
(
Command
(
"ban"
))
async
def
ban_user_command
(
message
:
types
.
Message
,
command
:
CommandObject
):
# Проверяем, что команду вызывает админ/модератор
chat_member
=
await
bot
.
get_chat_member
(
message
.
chat
.
id
,
message
.
from_user
.
id
)
if
chat_member
.
status
not
in
[
"administrator"
,
"creator"
]:
await
message
.
reply
(
"❌ У вас нет прав для бана пользователей."
)
return
user_id
=
None
ban_reason
=
"Manual ban"
# 1) Бан по ID: /ban user_id
if
command
.
args
:
try
:
user_id
=
int
(
command
.
args
.
strip
())
# Получаем информацию о пользователе
member
=
await
bot
.
get_chat_member
(
message
.
chat
.
id
,
user_id
)
first_name
=
member
.
user
.
first_name
or
""
last_name
=
member
.
user
.
last_name
or
""
username
=
member
.
user
.
username
or
""
except
ValueError
:
await
message
.
reply
(
"❌ ID должен быть числом. Использование: /ban user_id"
)
return
except
Exception
:
first_name
=
last_name
=
username
=
""
# 2) Бан в ответ на сообщение
elif
message
.
reply_to_message
:
target_user
=
message
.
reply_to_message
.
from_user
user_id
=
target_user
.
id
first_name
=
target_user
.
first_name
or
""
last_name
=
target_user
.
last_name
or
""
username
=
target_user
.
username
or
""
ban_reason
=
"Manual ban by reply"
else
:
await
message
.
reply
(
"Использование: /ban user_id или /ban (в ответ на сообщение)"
)
return
try
:
# Баним пользователя в чате
await
bot
.
ban_chat_member
(
message
.
chat
.
id
,
user_id
)
# Переносим в таблицу забаненных
ban_user
(
user_id
,
first_name
,
last_name
,
username
,
ban_reason
)
# Лог в группу логов
await
bot
.
send_message
(
log_chat_id
,
f
"❌ Moderator <b>{message.from_user.full_name}</b> ({message.from_user.id}) "
f
"banned user <b>{first_name} {last_name}</b> "
f
"(ID: <code>{user_id}</code>, @{username if username else 'NULL'})
\n
"
f
"Reason: {ban_reason}"
,
parse_mode
=
"HTML"
)
# Удаляем команду /ban из чата
await
message
.
delete
()
# Удаляем сообщение спамера
if
message
.
reply_to_message
:
try
:
await
message
.
reply_to_message
.
delete
()
except
Exception
as
e
:
await
bot
.
send_message
(
log_chat_id
,
f
"⚠️ Не удалось удалить сообщение спамера (ID {user_id}): {e}"
,
parse_mode
=
"HTML"
)
except
Exception
as
e
:
await
message
.
reply
(
f
"Ban error: {e}"
)
await
bot
.
send_message
(
log_chat_id
,
f
"❌ Error of banning ID <b>{user_id}</b>: {e}"
,
parse_mode
=
"HTML"
)
async
def
main
():
async
def
main
():
"""Запуск бота."""
"""Запуск бота."""
logger
.
info
(
"bot is running"
)
logger
.
info
(
"bot is running"
)
await
bot
.
set_my_commands
([
await
bot
.
set_my_commands
([
BotCommand
(
command
=
"/spam"
,
description
=
"Оповестить о спаме уполномоченных людей"
),
BotCommand
(
command
=
"/spam"
,
description
=
"Оповестить о спаме уполномоченных людей"
),
BotCommand
(
command
=
"/unban"
,
description
=
"Разбанить пользователя (доступно модераторам)"
),
BotCommand
(
command
=
"/ban"
,
description
=
"Разбанить пользователя (доступно модераторам)"
)
])
])
await
dp
.
start_polling
(
bot
)
await
dp
.
start_polling
(
bot
)
...
...
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