ban\unban commands

This commit is contained in:
mihalin 2022-01-18 23:28:03 +03:00
parent 59b73c33dc
commit 363391b575
4 changed files with 41 additions and 8 deletions

View File

@ -52,7 +52,7 @@ def main():
"разработки)", action="store_true") "разработки)", action="store_true")
args = parser.parse_args() args = parser.parse_args()
loop = asyncio.get_event_loop() loop = asyncio.new_event_loop()
loop.run_until_complete(initialization()) loop.run_until_complete(initialization())
loop.create_task(dp.start_polling()) loop.create_task(dp.start_polling())

View File

@ -72,3 +72,14 @@ class GroupChat(Model):
class Meta: class Meta:
table = 'group_chat' table = 'group_chat'
class BannedUser(Model):
id = fields.BigIntField(pk=True)
telegram_id = fields.BigIntField(index=True)
username = fields.CharField(max_length=100, default=None, null=True)
bot = fields.ForeignKeyField("models.Bot", related_name="banned_users", on_delete=fields.relational.CASCADE)
class Meta:
table = "bot_banned_user"

8
poetry.lock generated
View File

@ -1,6 +1,6 @@
[[package]] [[package]]
name = "aerich" name = "aerich"
version = "0.5.4" version = "0.5.7"
description = "A database migrations tool for Tortoise ORM." description = "A database migrations tool for Tortoise ORM."
category = "main" category = "main"
optional = false optional = false
@ -393,12 +393,12 @@ multidict = ">=4.0"
[metadata] [metadata]
lock-version = "1.1" lock-version = "1.1"
python-versions = "^3.8" python-versions = "^3.8"
content-hash = "c4533872a5037ef7b3ef7f9ada913fd6c0bf761ad642803103d464c90e5bc578" content-hash = "20aec5e4517c3e0bc03d4410544c1c898f0469c9bcfc4f4fecf4c405b1765ded"
[metadata.files] [metadata.files]
aerich = [ aerich = [
{file = "aerich-0.5.4-py3-none-any.whl", hash = "sha256:ce338f42af750632a240648c1d6a052b3cb1b74b8b0d914c3ed30ee3b3b17349"}, {file = "aerich-0.5.7-py3-none-any.whl", hash = "sha256:0684eb3d631c7c6e14caf2b2c3b9dad1c15ce8ade5771773c015a302f54ff4f6"},
{file = "aerich-0.5.4.tar.gz", hash = "sha256:067cf4a07b6714a8d6964302cb483fd297f94f8055cbf5489d86abeb03f02540"}, {file = "aerich-0.5.7.tar.gz", hash = "sha256:f9ef8796f7a13ba9965eda0aa6840033bbd42b2e4e52c24d8f0dbdb85e4a5187"},
] ]
aiocache = [ aiocache = [
{file = "aiocache-0.11.1-py2.py3-none-any.whl", hash = "sha256:e55c7caaa5753794fd301c3a2e592737fa1d036db9f8d04ae154facdfb48a157"}, {file = "aiocache-0.11.1-py2.py3-none-any.whl", hash = "sha256:e55c7caaa5753794fd301c3a2e592737fa1d036db9f8d04ae154facdfb48a157"},

View File

@ -10,7 +10,7 @@ from aioredis import Redis
import logging import logging
import typing as ty import typing as ty
from olgram.settings import ServerSettings from olgram.settings import ServerSettings
from olgram.models.models import Bot, GroupChat from olgram.models.models import Bot, GroupChat, BannedUser
logging.basicConfig(level=logging.INFO) logging.basicConfig(level=logging.INFO)
@ -34,7 +34,7 @@ async def message_handler(message: types.Message, *args, **kwargs):
_logger.info("message handler") _logger.info("message handler")
bot = db_bot_instance.get() bot = db_bot_instance.get()
if message.text and message.text.startswith("/start"): if message.text and message.text == "/start":
# На команду start нужно ответить, не пересылая сообщение никуда # На команду start нужно ответить, не пересылая сообщение никуда
return SendMessage(chat_id=message.chat.id, return SendMessage(chat_id=message.chat.id,
text=bot.start_text + ServerSettings.append_text()) text=bot.start_text + ServerSettings.append_text())
@ -42,7 +42,15 @@ async def message_handler(message: types.Message, *args, **kwargs):
super_chat_id = await bot.super_chat_id() super_chat_id = await bot.super_chat_id()
if message.chat.id != super_chat_id: if message.chat.id != super_chat_id:
# Это обычный чат: сообщение нужно переслать в супер-чат # Это обычный чат
# Проверить, не забанен ли пользователь
banned = await bot.banned_users.filter(telegram_id=message.chat.id)
if banned:
return SendMessage(chat_id=message.chat.id,
text="Вы заблокированы в этом боте")
# сообщение нужно переслать в супер-чат
new_message = await message.forward(super_chat_id) new_message = await message.forward(super_chat_id)
await _redis.set(_message_unique_id(bot.pk, new_message.message_id), message.chat.id) await _redis.set(_message_unique_id(bot.pk, new_message.message_id), message.chat.id)
@ -62,6 +70,20 @@ async def message_handler(message: types.Message, *args, **kwargs):
text="<i>Невозможно переслать сообщение: автор не найден</i>", text="<i>Невозможно переслать сообщение: автор не найден</i>",
parse_mode="HTML") parse_mode="HTML")
chat_id = int(chat_id) chat_id = int(chat_id)
if message.text == "/ban":
user, _ = await BannedUser.get_or_create(telegram_id=message.from_user.id, bot=bot)
await user.save()
return SendMessage(chat_id=message.chat.id, text="Пользователь заблокирован")
if message.text == "/unban":
banned_user = await bot.banned_users.filter(telegram_id=chat_id).first()
if not banned_user:
return SendMessage(chat_id=message.chat.id, text="Пользователь не был забанен")
else:
await banned_user.delete()
return SendMessage(chat_id=message.chat.id, text="Пользователь разбанен")
try: try:
await message.copy_to(chat_id) await message.copy_to(chat_id)
except (exceptions.MessageError, exceptions.BotBlocked): except (exceptions.MessageError, exceptions.BotBlocked):