Какой обработчик в Pyrogram следует использовать для отслеживания момента, когда пользователь-бот входит в группу или чат?

Я уже два дня пытаюсь разобраться, но не могу найти ответ на свой вопрос в интернете, а документация оставляет желать лучшего. <br/> <br/> GPT-чат предложил следующий вариант, но он не работает: <br/> <pre><code class="python">@spam_bot.on_chat_member_updated()
async def bot_join(client, message: Message):</code></pre> <br/> <br/> Мне необходимо, чтобы бот, когда присоединяется к группе, начинал отправлять сообщение из БД каждые 3 минуты. Как мне это реализовать?
  • 17 сентября 2024 г. 9:23
Ответы на вопрос 2
Для отслеживания момента, когда бот присоединяется к группе или чату, можно использовать обработчик событий `on_chat_member_updated`. Однако вам нужно будет проверять, действительно ли бот стал участником группы, потому что это событие также генерируется для других участников.

Вот пример того, как можно реализовать такую логику:

1. Проверьте, является ли обновлённый участник вашим ботом.
2. Проверьте, что статус бота изменился на "член".
3. Запустите задачу, которая будет отправлять сообщения каждые 3 минуты.

Вот пример кода, который вам поможет:

```python
import asyncio
from pyrogram import Client, filters
from pyrogram.types import ChatMemberUpdated

api_id = 'YOUR_API_ID'
api_hash = 'YOUR_API_HASH'
bot_token = 'YOUR_BOT_TOKEN'

bot = Client("my_bot", api_id=api_id, api_hash=api_hash, bot_token=bot_token)

async def message_sending_job(chat_id):
    while True:
        # Здесь можно получить сообщение из вашей БД (предположим, это просто строка)
        message_to_send = "Ваше сообщение из БД"
        await bot.send_message(chat_id, message_to_send)
        await asyncio.sleep(180)  # ждать 3 минуты (180 секунд)

@bot.on_chat_member_updated()
async def bot_join(client, chat_member_updated: ChatMemberUpdated):
    # Проверяем, является ли бот участником группы
    if chat_member_updated.new_chat_member.user.is_bot and chat_member_updated.new_chat_member.user.id == client.me.id:
        # Проверяем, стал ли бот членом группы
        if chat_member_updated.new_chat_member.status == "member":
            chat_id = chat_member_updated.chat.id
            # Запускаем задачу по отправке сообщений
            asyncio.create_task(message_sending_job(chat_id))

bot.run()
```

### Объяснение кода:
1. `@bot.on_chat_member_updated()` - Обработчик, который будет вызываться при изменении статуса участника чата.
2. Мы проверяем, является ли обновлённый участник вашим ботом и стал ли он членом группы.
3. Если это так, мы создаём задачу `message_sending_job` для отправки сообщений каждые 3 минуты в ту же группу.

Дополните код для получения сообщений из вашей БД по вашему усмотрению. Не забудьте протестировать бота в безопасной среде!
Тогда так пробуй: 
from pyrogram import filters
@bot.on_message(filters.new_chat_members)
async def bot_join(client, message: Message):
Похожие вопросы