Ответы пользователя по тегу Telegram
  • Как сделать периодическую рассылку сообщений из функции на aiogram?

    @corydoras_aeneus
    Наиболее близко к вашему коду будет следующее решение:

    async def working(dp):
        while True:
            for userid in userids:
                await bot.send_message(userid, 'privetqtqeteqwqeteqwtgewq')
            await asyncio.sleep(15)
    
    
    if __name__ == "__main__":
        executor.start_polling(dp, on_startup=working)


    Если у вас много пользователей, нужно будет делать паузы, так как есть лимиты на рассылку сообщений.
    Вместо бесконечного цикла можно использовать apscheduler.
    Ответ написан
    3 комментария
  • Как вызывать команды внутри машины состояний aiogram?

    @corydoras_aeneus
    Была подобная проблема, пока пользуюсь таким кодом
    async def filter_commands(message: Message, state: FSMContext):
        text = message.text
        if text.startswith('/'):
            cmd = text.lstrip('/')
            if cmd in COMMANDS:
                handlers = dp.message_handlers.handlers
                for h in handlers:
                    filters = [f.filter for f in h.filters if type(f.filter) == Command and cmd in f.filter.COMMANDS]
                    if len(filters) > 0:
                        await state.reset_state()
                        await h.handler(message)
                        return True
        return False

    Использование - в начало обработчика вставляю, например
    async def get_age(self, message: types.Message, state: FSMContext):
        if await filter_commands(message, state):
            return
    Ответ написан
    Комментировать