Задать вопрос
  • Как обойти ошибку сервера Telegram при использовании метода answer_photo?

    kavermoki
    @kavermoki Автор вопроса
    Сергей П, да, я понял вас, что нельзя редактировать текстовое сообщение с помощью edit_media... Но есть же способы, методы как это обойти. Т.е. у меня при старте программы у меня текст, потом идет кнопка которая покажет медиа, где будут другие кнопки с текстом.

    Я изучил способы редактирования медиа на медиа, но не могу найти практическое применение менять один тип медиа, на текст или наоборот...

    Это либо мне нужно при старте создать медиа, и редактировать медиа в последующих коллбэк, либо не создать медиа вовсе и редактировать только тексты.
    Написано
  • Как обойти ошибку сервера Telegram при использовании метода answer_photo?

    kavermoki
    @kavermoki Автор вопроса
    Сергей П, Хорошо, я был не прав.. Сократил весь код до минимума и вот что получилось:

    from aiogram import Bot, Dispatcher, F
    from aiogram.filters import CommandStart
    from aiogram.types import (CallbackQuery, Message)
    import config
    import keyboards
    from aiogram.types import FSInputFile
    from aiogram.types import InputMediaPhoto
    
    bot = Bot(token=config.TOKEN)
    dp = Dispatcher()
    
    @dp.message(CommandStart())
    async def process_start_command1(message: Message):
        await message.answer(text='Добрый день!', reply_markup=keyboards.keyboard, parse_mode='html')
    
    @dp.callback_query(F.data == 'bt1')
    async def process_button_1_press(callback: CallbackQuery):
        photo = FSInputFile('monitoring.jpg')
        await callback.message.edit_media(InputMediaPhoto(media=photo, caption='Текст'), reply_markup=keyboards.keyboard1)
        await callback.message.delete()
    
    @dp.callback_query(F.data == 'bt3')
    async def process_button_2_press(callback: CallbackQuery):
        await callback.message.edit_text(text='Вы выбрали пункт 1.1', reply_markup=keyboards.keyboard2)
    
    @dp.callback_query(F.data == 'bt4')
    async def process_button_15_press(callback: CallbackQuery):
        await callback.message.edit_text(text='Вы выбрали пункт 1.2', parse_mode='html')
    
    @dp.callback_query(F.data == 'bt5')
    async def process_button_15_press(callback: CallbackQuery):
        await callback.message.edit_text(text='Вы вернулись в главное меню', reply_markup=keyboards.keyboard)
    
    if __name__ == '__main__':
        dp.run_polling(bot)


    файл keyboards:

    from aiogram.types import (InlineKeyboardButton, InlineKeyboardMarkup)
    
    bt1 = InlineKeyboardButton(text='Пункт 1', callback_data='bt1')
    bt2 = InlineKeyboardButton(text='Пункт 2', callback_data='bt2')
    keyboard = InlineKeyboardMarkup(inline_keyboard=[[bt1, bt2]])
    
    bt3 = InlineKeyboardButton(text='Пункт 1.1', callback_data='bt3')
    bt4 = InlineKeyboardButton(text='Пункт 1.2', callback_data='bt4')
    bt5 = InlineKeyboardButton(text='Назад', callback_data='bt5')
    keyboard1 = InlineKeyboardMarkup(inline_keyboard=[[bt3, bt4], [bt5]])
    
    bt6 = InlineKeyboardButton(text='Кнопка 1', callback_data='bt6')
    bt7 = InlineKeyboardButton(text='Кнопка 2', callback_data='bt7')
    bt8 = InlineKeyboardButton(text='Кнопка 3', callback_data='bt8')
    bt9 = InlineKeyboardButton(text='Кнопка 4', callback_data='bt9')
    bt10 = InlineKeyboardButton(text='Кнопка 5', callback_data='bt10')
    bt11 = InlineKeyboardButton(text='Кнопка 6', callback_data='bt11')
    bt12 = InlineKeyboardButton(text='Кнопка 7', callback_data='bt12')
    keyboard2 = InlineKeyboardMarkup(inline_keyboard=[[bt6, bt7, bt8], [bt9, bt10, bt11], [bt12]])


    т.е. при нажатии на кнопку Пункт 1 он выводит что в сообщении нет медиафайлов для редактирования.
    Если использовать message.answer_photo() вместо message.edit_media то изображение с кнопками выводится, но кнопки (Пункт 1.1 и Пункт 1.2) становятся не рабочими и говорят что в сообщении нет текста для редактирования.
    Написано
  • Как обойти ошибку сервера Telegram при использовании метода answer_photo?

    kavermoki
    @kavermoki Автор вопроса
    Сергей П, спасибо за очень не понятный ответ. Пошёл читать докуменцию...

    Это не огрызки когда, и что в них не понятно. Там все логически прописано, зачем мне писать что я импортировал несколько Библиотек, методов и тп, ещё 98 инлайн кнопок, если я это все выложу сюда меня пошлют куда подальше. Я выложил именно проблему и попросил метод решения, за edit_media спасибо, но я подозреваю что это аналог, и можно все равно работать с edit_text
    Написано
  • Как обойти ошибку сервера Telegram при использовании метода answer_photo?

    kavermoki
    @kavermoki Автор вопроса
    сделал все по документации :

    @dp.callback_query(F.data == 'bt21')
    async def process_button_15_press(callback: CallbackQuery):
        photo = FSInputFile('monitoring.jpg')
        await callback.message.edit_media(InputMediaPhoto(media=photo, caption='Текст'), reply_markup=keyboards.keyboard8)


    но получаю:
    Telegram server says - Bad Request: there is no media in the message to edit

    каким образом надо еще ему передать сообщение для редактирования, не могу сориентироваться что то...
    Написано
  • Как обойти ошибку сервера Telegram при использовании метода answer_photo?

    kavermoki
    @kavermoki Автор вопроса
    Сергей П, к слову, он в результате выводит и изображение и подпись, но inline кнопки в клавиатуре reply_markup=keyboards.keyboard8 не работают и выводят ошибку Telegram server says - Bad Request: there is no text in the message to edit.

    Я это и пытался донести, что при использовании метода answer_photo с атрибутом reply_markup перестают работать inline, в противном случае (без фото) все работает с той же самой клавиатурой reply_markup=keyboards.keyboard8
    Написано
  • Как обойти ошибку сервера Telegram при использовании метода answer_photo?

    kavermoki
    @kavermoki Автор вопроса
    Сергей П, Добавил spoiler к вопросу. Обстоятельства таковы, что при методе answer_photo есть ошибка. Т.е. я хочу передать фото, подпись к фото с помощью caption и естественно добавить reply_markup. Выходит ошибка указанная выше. Но если использовать метод edit_text без фото, просто текст, с той же самой клавиатурой reply_markup=keyboards.keyboard8 то ошибок нет.
    Написано
  • Как вызвать случайную asyn функцию в asyn функции?

    kavermoki
    @kavermoki Автор вопроса
    Да, хотел как то быстро решить вопрос - виноват. Спасибо за ответ, вопрос решил без asyn.
    Написано
  • Как заблокировать сайты в локальной сети по белому списку?

    kavermoki
    @kavermoki
    d-stream, не так понял вопрос автора сначала, Думал запретить к нескольким сайтам.... А так да, реализация белого списка абсолютна невозможна на hosts, извиняюсь.
    Написано
  • Как заблокировать сайты в локальной сети по белому списку?

    kavermoki
    @kavermoki
    d-stream, ну как правило же разрешить все, кроме... все что в списке под 127.0.0.1 - будет запрещено, все остальное белый список.
    Написано
  • Как отправить сообщение в указанное время с помощью isoweekday из библиотеки datetime?

    kavermoki
    @kavermoki Автор вопроса
    Vindicar, спасибо тебе огромнейшнее, теперь дошло!
    Написано
  • Как отправить сообщение в указанное время с помощью isoweekday из библиотеки datetime?

    kavermoki
    @kavermoki Автор вопроса
    Vindicar, извиняюсь за наглость, просто начал изучать и появились некоторые вопросы...

    вот хочу для теста вывести в терминал какой то текст с периодом 4 секунды при активации хендлера
    @dp.message_handler(text='Запуск уведомлений')
    def mes(self):
        print("Ололоолооо")
    
    def x():
    #    mes()
        schedule.every(4).seconds.do(mes)
        while True:
            schedule.run_pending()
    
    if __name__ == '__main__':
        mes()


    возникает след. ошибка без аргументов
    TypeError: mes() takes 0 positional arguments but 1 was given

    возникает след. ошибка при аргументе self
    TypeError: mes() missing 1 required positional argument: 'self'

    в интернете что то не могу найти внятного ответа...
    Написано
  • Как отправить сообщение в указанное время с помощью isoweekday из библиотеки datetime?

    kavermoki
    @kavermoki Автор вопроса
    понял, спасибо большое, пошел изучать
    Написано
  • Как отправить сообщение в указанное время с помощью isoweekday из библиотеки datetime?

    kavermoki
    @kavermoki Автор вопроса
    Если их несколько (напоминашек) то и datetime будет работать, разве нет?
    В чем практическая разница?
    Написано
  • Aiogram и apscheduler, как сделать сообщение по заданному времени?

    kavermoki
    @kavermoki Автор вопроса
    Yokaze,
    это файл apsched.py

    from aiogram import Bot

    async def send_message_time(bot: Bot):
    await bot.send_message(chat_id=message.from_user.id,
    text='это сообщение через несколько сек после запуска бота')

    async def send_message_cron(bot: Bot):
    await bot.send_message(chat_id=message.from_user.id,
    text='Это сообщение будет отправляться каждый день')

    async def send_message_interval(bot: Bot):
    await bot.send_message(chat_id=message.from_user.id,
    text='Это сообщение будет оптравляться с интервалом в 1 минуту')

    main.py - файл

    @dp.message_handler(commands=['start'])
    async def command_start(message: types.Message):
    await bot.send_message(chat_id=message.from_user.id,
    text='Добро пожаловать!',
    reply_markup=kb)
    await message.delete()

    scheduler = AsyncIOScheduler(timezone='Europe/Moscow')
    scheduler.add_job(apsched.send_message_time, trigger='date', run_date=datetime.now() + timedelta(seconds=10),
    kwargs={'bot': bot})
    scheduler.add_job(apsched.send_message_cron, trigger='cron', hour=datetime.now().hour,
    minute=datetime.now().minute + 1, start_date=datetime.now(),
    kwargs={'bot': bot})
    scheduler.add_job(apsched.send_message_interval, trigger='interval', seconds=60, kwargs={'bot': bot})
    scheduler.start()
  • Python bot - как спарсить файловый мусор?

    kavermoki
    @kavermoki Автор вопроса
    shurshur, благодарю!
    буду пробовать.
  • Python bot - как спарсить файловый мусор?

    kavermoki
    @kavermoki Автор вопроса
    shurshur, критерий никаких нет, если они и будут - это я организую.
    А зачем хранить файлы в канале - мне показалось изначально как один из быстрых способов вытащить какой ни будь файл, который попросит пользователь. + не нужно делать бд в боте "Аля оптимизация рабочего процесса".

    Например:
    пользователю по хендлеру доступны 2 кнопки (инструкции, бланки), перейдя в инструкции он перейдет к тематике и выберет нужную иструкцию - бот предоставит ему её, ну и с бланками такая же процедура.
  • Python bot - как спарсить файловый мусор?

    kavermoki
    @kavermoki Автор вопроса
    shurshur, приветствую.
    1. есть бот
    2. есть канал в телеграме.
    3. хочу что бы в других группах телеграма, по запросу пользователей бот предоставлял документы (файлы) с моего канала. (вытягивал оттуда фалы по запросу пользователей.

    как еще проще обьяснить я не знаю.
  • Python bot - как спарсить файловый мусор?

    kavermoki
    @kavermoki Автор вопроса
    Алан Гибизов, код чего? обычного ЭХО бота? зачем?
    у меня есть задача, которую не знаю как реализовать, каким методом и библиотекой.
    Самое близкое что я нашел в доках, это библиотека Telethon, это близко но не то, он просто парсит и "ворует" новые посты с канала, который парсит.

    Но мне нужно, что бы вытаскивал определенный файл по запросу пользователя с другого (моего) канала.