class AlbumMiddleware(BaseMiddleware):
"""This middleware is for capturing media groups."""
album_data: dict = {}
def __init__(self, latency = 0.6):
"""
You can provide custom latency to make sure
albums are handled properly in highload.
"""
self.latency = latency
super().__init__()
async def on_process_message(self, message: types.Message, data: dict):
if not message.media_group_id:
if message.photo :
data["one_photo"] = message
elif message.animation or message.video or message.video_note or message.voice or message.audio:
data["album"] = [message]
return
try:
self.album_data[message.media_group_id].append(message)
raise CancelHandler() # Tell aiogram to cancel handler for this group element
except KeyError:
self.album_data[message.media_group_id] = [message]
await asyncio.sleep(self.latency)
message.conf["is_last"] = True
data["album"] = self.album_data[message.media_group_id]
async def on_post_process_message(self, message: types.Message, result: dict, data: dict):
"""Clean up after handling our album."""
if message.media_group_id and message.conf.get("is_last"):
del self.album_data[message.media_group_id]
async def func(
message: types.Message,
album: Optional[List[types.Message]] = None,
one_photo: Optional[types.Message] = None
):
emoji.emoji_count
.import emoji
from telethon.tl.types import MessageEntityBold
message_text = "Hi!"
emojis = emoji.emoji_count(message_text)
text_with_emoji = len(message_text) + emojis
entities = [MessageEntityBold(offset=0, length=text_with_emoji)]
На Windows и Pycharm это работает.надо один раз сесть и разобраться как работают импорты, а всего-то для твоей хотелки /home/ubuntu должно быть в PYTHONPATH
cannot import name 'router' from partially initialized module 'app.handlers' (most likely due to a circular import)
bot
незачем импортировать, он возвращается в каждый хэндлер как аргумент функции, достаточно исправить функцию на: async def cmd_start(message: types.Message, bot: Bot):
bot
также находится почти в каждом объекте апдейта (types.Message, types.CallbackQuery и т.п.). Для этого вам нужно вызвать его следующим образом:await message.bot.send_chat_action(message.chat.id, 'typing')
@router.message(F.text == 'Каталог')
async def catalog(message : Message):
categories_kb = InlineKeyboardBuilder()
categories = db.get_group_name_from_db()
for category in categories:
categories_kb.add(InlineKeyboardButton(text=categories, callback_data=f'category_')) # чему-чему равен text?
return categories_kb.adjust(2).as_markup() # ты же понимаешь, что строка ниже не выпонится?
await message.answer('Выберите категорию товара:', reply_markup=await categories) # что ещё за await? categories - это список.
# или ты имел ввиду categories_kb?
from aiogram.filters.command import CommandObject, Command
@router.message(Command('test'))
async def test(message: types.Message, command: CommandObject):
print(command, command.args)
.replace("]", "").replace("[", "")
Как минимум тут вы его портите, если внутри есть массивы. if message.text == '26.01':
markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
bt1 = types.KeyboardButton('8:00')
bt2 = types.KeyboardButton('9:00')
bt3 = types.KeyboardButton('10:00')
bt4 = types.KeyboardButton('11:00')
bt5 = types.KeyboardButton('12:00')
bt6 = types.KeyboardButton('13:00')
bt7 = types.KeyboardButton('14:00')
bt8 = types.KeyboardButton('15:00')
bt9 = types.KeyboardButton('16:00')
bt10 = types.KeyboardButton('17:00')
bt11 = types.KeyboardButton('18:00')
bt12 = types.KeyboardButton('19:00')
bt13 = types.KeyboardButton('20:00')
bt14 = types.KeyboardButton('21:00')
back11 = types.KeyboardButton('Назад')
markup.add(bt1, bt2, bt3, bt4, bt5, bt6, bt7, bt8, bt9, bt10, bt11, bt12, bt13, bt14, back11)
bot.send_message(message.chat.id, text='Выберите удобную вам дату для записи', reply_markup = markup)
first_hour = 8
last_hour = first_hour + 14
buttons = [f'{current}:00' for current in range(first_hour, last_hour)]
print(buttons)
print(buttons[0])
bt1, bt2, bt3, bt4, bt5, …