Рассылка юзерботом в телеграмм с помощью pyrogram

Рейтинг: 1Ответов: 2Опубликовано: 14.05.2023

Помогите сократить кол-во строк в коде. Может, возможно сделать список id, чтобы рассылка была по нему? У меня не получается. Так же, не понимаю, как прописать, чтобы выводилось id чата, если сообщение было туда отправлено.


from pyrogram import Client, types, filters
from pyrogram.enums import ChatType
import time
from configparser import ConfigParser

api_id = 
api_hash = " "

interval = float(input('время задержки в секундах:____'))
text = 'текст'

client = Client(name='me_client', api_id=api_id, api_hash=api_hash)


async def main():
    async with client:
        async for dialog in client.get_dialogs():
            if dialog.chat.type in [ChatType.GROUP, ChatType.SUPERGROUP]:
                 await client.send_message(chat_id=-1001164, text=text)  
                 await client.send_message(chat_id=-1001670, text=text)  
                 await client.send_message(chat_id=-1001820, text=text)  
                 await client.send_message(chat_id=-1001693, text=text)  
               

                print('сообщение отправлено')
                time.sleep(interval)


client.run(main())

Ответы

▲ 1Принят

По первому вопросу.

Это можно сделать с помощью массивов и цикла:

from pyrogram import Client, types, filters
from pyrogram.enums import ChatType
import time
from configparser import ConfigParser

api_id = "<ВАШ ID ЗДЕСЬ>"
api_hash = " "

interval = float(input('время задержки в секундах:____'))
text = 'текст'

chat_ids = [-1001164, -1001670, -1001820, -1001693] # Здесь будет храниться все chat id для рассылки

client = Client(name='me_client', api_id=api_id, api_hash=api_hash)


async def main():
    async with client:
        async for dialog in client.get_dialogs():
            if dialog.chat.type in [ChatType.GROUP, ChatType.SUPERGROUP]:
                for chat_id in chat_ids: # перебираем id чатов...
                    # и отправляем туда сообщения:
                    await client.send_message(chat_id=chat_id, text=text)
               

                print('сообщение отправлено')
                time.sleep(interval)


client.run(main())

В этом коде, сначала создаётся массив со всеми id чатов, туда можно добавить не только группы, но любые валидные id чатов, хоть ЛС.

Потом, в цикле for, перебираются все id чатов, и отправляются сообщения.


Если что-то непонятно, спрашивайте.

▲ 1

Вопрос с тем, чтобы выводилось id чата, в которое бот отправил сообщение, тоже решен.

async def main():
    async with app:
        async for dialog in app.get_dialogs():
            if dialog.chat.type in [ChatType.GROUP, ChatType.SUPERGROUP]:
                for chat_id in chat_ids:
                    try:
                        await app.send_message(chat_id=chat_id, text=text)
                        print(f'сообщение отправлено в {chat_id}')
                    except Flood as e:
                        print(f'не удалось отправить сообщение в {chat_id}')

нужно импортировать ошибку. from pyrogram.errors import Flood Вдруг кому-нибудь пригодится :)