Для отслеживания момента, когда бот присоединяется к группе или чату, можно использовать обработчик событий `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 минуты в ту же группу.
Дополните код для получения сообщений из вашей БД по вашему усмотрению. Не забудьте протестировать бота в безопасной среде!