Aiogram 3.7.0 Фильтр по entities (url)
Я пишу функцию для бота, которая банит всех, кто отправляет ссылку на Hamster Combat https://t.me/hamster_kombat_bot/start?startapp=kentIdXXXXXXXXXX
. Не понимаю как написать фильтр, который будет отлавливать ссылки. Что я имею сейчас:
@dp.message(F.entities) # не понимаю, что делать дальше, но реагирует только когда есть какой-либо entities
async def hamster_detected(message: Message):
logging.info('ХОМЯК')
Ответы (1 шт):
насколько я понял, вам нужно использовать бота в чате с пользователями, вот простая версия моего кода которая может быть вам полезна:
import asyncio
from aiogram import Bot, Dispatcher, F
from aiogram.types import CallbackQuery, Message
dp = Dispatcher()
bot = Bot(token='')
# @dp.message(lambda msg: 'http' in msg.text.lower())
@dp.message(lambda msg: 'http' in msg.text)
async def text_message(message: Message):
if 'hamster_kombat_bot/start?startapp=kentId' in message.text.lower():
# Моментально удалит последнее сообщение, а именно, реферальную ссылку.
await message.delete()
# Заблокирует на 365 дней, удалит все сообщения от него.
await bot.ban_chat_member(message.chat.id, message.from_user.id, 365, True)
m = "[" + str(message.from_user.first_name) + "](tg://user?id=" + str(message.from_user.id) + ")"
await message.answer(f'Пользователь {m} *заблокирован* за нарушение правил чата.', parse_mode='Markdown')
async def main():
await dp.start_polling(bot)
if __name__ == "__main__":
asyncio.run(main())
Я попытался использовать в декораторе метод lower(), но обнаружил, что при его использовании появляется ошибка AttributeError: 'NoneType' object has no attribute 'lower', когда бот реагирует на системные сообщения по типу Пользователь добавил в чат пользователя и др. Вы можете оставить в декораторе все как есть, можете заменить декоратор на закоментированный выше, но в таком случае у вас в output будут постоянные сообщения об ошибках, к счастью, это не повлияет на его работоспособность.