• XSS.stack #1 – первый литературный журнал от юзеров форума

aiogram триггер бот

Mp3xlxs

CD-диск
Пользователь
Регистрация
30.08.2024
Сообщения
13
Реакции
4
Решил создать бота в телеграм, который будет в режиме реального времени с групп пересылать ключевые слова. По итогу, ничего не придумал, как задействование юзер бота. Тобиж добавляем на акк нужные группы. Все сообщения с групп пересылаем в одну группу и уже с этой группы наш тг бот считывает триггер слова. Является ли это решение отпимальным? Дело в том, что есть сомнения по поводу 1 группы, что не выдержит )
 
А почему нельзя сразу считывать ключевые слова юзер ботом?
 
Вам нужно что-то типа такого. Если не получится запустить, пишите в ПМ.

Версия Python: 3.12

Перед запуском установить:
Bash:
pip install telethon
pip install redis
pip install aiogram

Python:
import re
import hashlib
import redis
from telethon import TelegramClient, events
from telethon.errors import SessionPasswordNeededError
from aiogram import Bot, Dispatcher, types
from aiogram.client.bot import DefaultBotProperties
from aiogram.enums import ParseMode
import asyncio
import logging

# Настройка логирования
logging.basicConfig(level=logging.INFO)

# Настройка Redis
conn = redis.Redis(host='localhost', port=6379, db=2, charset="utf-8", decode_responses=True)
TRIGGER = ['тригер один', 'нужен кодер', 'сделать программу', 'сделать софт', 'нужен кодер', 'нужен программист', 'нужен прогер', 'написать бот', 'кто делает бот', 'кто сделает бот', 'пишет бот', 'создаст бота']
hash_object = []
id = 7591555555  # Ваш ID, куда будут отправляться сообщения

# Инициализация бота Aiogram
bot = Bot(token='7543595555:AAGbmM86wghXXjaonP8i9o555555_u35555', default=DefaultBotProperties(parse_mode=ParseMode.HTML))
dp = Dispatcher()

# Инициализация клиента Telethon с двухфакторной авторизацией
client = TelegramClient('comandos_vitya', 20464555, "e2e49e68d93db0ed1b9885be55555554", device_model="AMD B550", system_version="Windows 10")

async def send_message_to_bot(text):
    await bot.send_message(id, text, disable_web_page_preview=True)

# Функция для авторизации с двухфакторной аутентификацией
async def start_telethon():
    # Это асинхронная задача для запуска клиента Telethon
    await client.connect()
    phone = input("Enter phone: ")
    await client.send_code_request(phone, force_sms=False)
    value = input("Enter login code: ")
    try:
        await client.sign_in(phone, code=value)
    # Если на акке выставленно 2Ф, будет запрос на авторизацию
    except SessionPasswordNeededError:
        password = input("Enter password: ")
        await client.sign_in(password=password)

    @client.on(events.NewMessage())  # Событие для новых сообщений в группах
    async def handler_group(event):
        if event.is_group:
            r = re.compile("|".join(TRIGGER), flags=re.I)
            list_count = r.findall(event.raw_text)
            if len(list_count) >= 1:
                if conn.get(event.from_id.user_id) is None:  # Проверка на повторения
                    message_hash = hashlib.md5(f"{event.from_id.user_id}{event.raw_text}".encode()).hexdigest()
                    if message_hash not in hash_object:  # Проверка на уникальность сообщения
                        out = ''.join(list_count)
                        text = f"Триггер сработал на <b>{str(list_count)}</b>\nТекст сообщения: {str(event.raw_text.replace(out, '<b>' + out + '</b>'))}\nСсылка на сообщение: <i>t.me/c/{event.peer_id.channel_id}/{event.message.id}</i>"
                        await send_message_to_bot(text)
                        conn.set(event.from_id.user_id, 1, ex=200)
                        hash_object.append(message_hash)

    @client.on(events.NewMessage())  # Событие для новых сообщений в каналах
    async def handler_channel(event):
        if not event.is_group and not event.is_private:
            r = re.compile("|".join(TRIGGER), flags=re.I)
            list_count = r.findall(event.raw_text)
            if len(list_count) >= 1:
                channel_title = await client.get_entity(event.peer_id.channel_id)
                out = ''.join(list_count)
                text = f"Триггер сработал на <b>{str(list_count)}</b>\nТекст сообщения: {str(event.raw_text.replace(out, '<b>' + out + '</b>'))}\nСсылка на сообщение: <i>t.me/c/{event.peer_id.channel_id}/{event.message.id}</i>"
                await send_message_to_bot(text)

    client.run_until_disconnected()

async def start_aiogram():
    # Запуск Aiogram бота
    await dp.start_polling(bot)


async def main():
    # Асинхронное выполнение обоих ботов
    await asyncio.gather(
        start_telethon(),
        start_aiogram(),
    )

# Запуск бота Aiogram и Telethon одновременно
if __name__ == '__main__':
    asyncio.run(main())
 
Последнее редактирование:
Решил создать бота в телеграм, который будет в режиме реального времени с групп пересылать ключевые слова. По итогу, ничего не придумал, как задействование юзер бота. Тобиж добавляем на акк нужные группы. Все сообщения с групп пересылаем в одну группу и уже с этой группы наш тг бот считывает триггер слова. Является ли это решение отпимальным? Дело в том, что есть сомнения по поводу 1 группы, что не выдержит )
делаешь через telethon и держит около 100групп спокойно, может быть задержки. если интересен парсер то пм пиши
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх