msg
или все таки message
photo
- это список фото разных размеров. А send_photo принимает file_id
photo=msg.photo[0].file_id
будет работать корректно from aiogram import Bot, types
from aiogram.dispatcher import Dispatcher
from aiogram.utils import executor
import asyncio
tokens = ['token1', 'token2']
async def start_bot(dp):
event_loop.create_task(dp.start_polling())
def bot_init(event_loop, token):
bot = Bot(token)
dp = Dispatcher(bot=bot)
@dp.message_handler(commands=['start'])
async def process_start_command(message: types.Message):
await message.reply("Привет!\nНапиши мне что-нибудь!")
event_loop.run_until_complete(start_bot(dp))
if __name__ == '__main__':
event_loop = asyncio.get_event_loop()
for token in tokens: # тут можешь реализовать приемник токенов извне
bot_init(event_loop, token)
event_loop.run_forever()
@bot.message_handler(content_types=['text'])
def messages(message):
if message.json.get('entities'):
print(f"tg length: {message.json['entities'][0]['length']}")
print(f"calc length: {len(message.json['text'].encode('utf-16-le')) // 2}")
bot.polling(none_stop = True, timeout=123)
async for dialog in client.iter_dialogs(): # Итерируем все диалоги
result = await client(functions.messages.GetPeerDialogsRequest( # Получаем данные диалога
peers=[dialog]
))
# result.dialogs[0].read_outbox_max_id - Это последнее прочитанное сообщение в диалоге
async for message in client.iter_messages(dialog): # Итерируем сообщения диалога
if result.dialogs[0].read_outbox_max_id < message.id: # Если read_outbox_max_id меньше message.id - Значит сообщение не прочитано
print(f'{message.message} (Не прочитано)')
Как можно сделать так, чтобы бот проверял оплату и после этого выводил текст
или переадресовывал на другой сайт