Задать вопрос
  • Как сделать проверку ссылки в телеграм боте?

    @pozner88
    Vindicar, важное уточнение, как по мне. Вы можете предложить свой вариант ответа и он будет безусловно правильнее
  • Как сделать запись в бд после обращения к ней?

    @pozner88 Автор вопроса
    con.commit после стоит строка, закрыл же
  • Как по ходу программы менять значение по умолчанию в БД SQL?

    @pozner88 Автор вопроса
    Akina, возможно у меня в принципе не верная структура, я не говорю что эксперт в этом. У меня автоматически рассчитываются данные о том какое значение должно быть, а пользователь вносит что он имеет. Для удобства сравнения и анализа созданы две колонки с фактическим и заданным значениями. Хотел сделать что бы рассчитав заданное значение записывалось автоматически во все строки, после того как пользователь добавил то что он имеет по факту. Можно сделать через постоянное обращение к уже имеющемуся заданному значению и добавлять его.
    По сути мне нужно просто дублировать одно и тоже значение в строках, по этому хотел сделать этот столбец со значением по умолчанию равным заданному. Так же это заданное значение может изменяться. Автоинкремент мне в данном случае никак не подойдет.
  • Как принять альбом фотографий телеграм ботом?

    @pozner88 Автор вопроса
    InternetMaster, изначально примерно об этом и думал, но надеялся что есть и другой способ. Не хотел просить пользователя еще данные. Но пойду все таки этим путем.
    Большое спасибо за такую помощь и подсказки. Указанный вами ответ по сути является верным, просто для моей цели его нужно несколько дополнить.
    P.S. Как итог сделал увеличение списка содержащего file_id методом append, вроде все нормально работает.
  • Как принять альбом фотографий телеграм ботом?

    @pozner88 Автор вопроса
    InternetMaster, на счет file_id понял, но как можно сделать только 1 ответ на присланное? Или тоже это тема несколько другого порядка?
  • Как принять альбом фотографий телеграм ботом?

    @pozner88 Автор вопроса
    InternetMaster, по большому счету код мало чем отличается кроме указания асинхронности функции и ожидания отправки сообщений ботом
    @dp.message_handler(content_types=['photo'])
                    async def handle_docs_photo(message):
                        try:
                            chat_id = message.chat.id
                            file_info_1 = message.photo[-1].file_id
                            await bot.get_file(message.photo[-1].file_id)
                            await bot.send_message(message.chat.id, file_info_1)
                            downloaded_file = file_info_1.file_path
                            await bot.download_file(file_info_1.file_path)
    
                            src =dir +'\\' + file_info_1.file_path.split('/')[-1]
                            await bot.send_message(message.chat.id, src)
                            with open(src, 'wb') as new_file:
                                new_file.write(downloaded_file)
    
                        except Exception as e:
                            print(e)

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

    @pozner88 Автор вопроса
    InternetMaster, несколько изменил ваш код под aiogram. Попробую ещё раз изменить иначе, но уже тестил и иначе, и всегда выдавались несколько сообщений, по количеству принятых фото
  • Как принять альбом фотографий телеграм ботом?

    @pozner88 Автор вопроса
    Благодарю за ответ. Но все равно реализуется несколько иначе чем мне бы хотелось. Все файлы принимаются, и происходит ответ на каждый файл, а мне бы хотелось получить 1 ответ, поскольку с ответом приходит клавиатура и получить сразу несколько клавиатур не очень удобно.
    Еще в идеале не скачивать эти файлы, а получать их file_id в одном списке.
  • Как сделать, чтобы бот при ответе упоминал пользователя? (Airogram)?

    @pozner88
    Gospodin_Kiroshi, методом проб и ошибок, зная что можно форматировать текст по правилам HTML, у меня вышло следующее
    await bot.send_message(message.from_user.id, 
                                           'Привет '+hlink(f'{message.from_user.first_name}',
                                            f'https://t.me/{message.from_user.username}'),
                               disable_web_page_preview =True,
                               parse_mode=types.ParseMode.HTML)

    но тут важно учитывать через какую библиотеку ты делаешь. У меня сделан бот на aiogram и загружен модуль с самой hlink
    from aiogram.utils.markdown import hlink
    Но можно сделать и без этой подгрузки, используя html'овский способ
    <a href=f'https://t.me/{message.from_user.username}> f'{message.from_user.first_name}' </a>
    но незабыть указать parse_mode=HTML.
    Результат можно получить и иначе, используя другие методы и соответственно указав parse_mode, тут уже дело вкуса и предпочтений.
    P.S. disable_web_page_preview =True тоже можно поменять, точнее убрать вовсе, но мне как то не понравилась это превью
    P.P.S. решил протестить что выбудет если у пользователя нет username. Итог ожидаемый, выдает линк, но не находит пользователя. Так что бот не упадет, но полного функционала не выполнит, но это ситуация не решаемая никем кроме самого пользователя
  • Как создать клавиатуру из списка пользователей?

    @pozner88 Автор вопроса
    да, скорей всего потребуется многостраничное меню, пока вроде проблем с этим не возникало.
    Благодарю за предупреждение
  • Как создать клавиатуру из списка пользователей?

    @pozner88 Автор вопроса
    Понимал что через цикл необходимо делать, но все до конца не мог разобраться как лучше. Благодарю за подсказку, все таки решил проблему повторив как формируются кнопки.
    Благодарю
  • Зацикливается работа декоратора callback_query_handler, какое решение?

    @pozner88
    для этого можно использовать либо CallbackData, так называемая фабрика колбеков, либо использовать ветвление (здесь на такое ругаются и предлагают использовать либо фабрику либо связку ключ-значение). У меня реализовано через ветвление
    @dp.callback_query_handler(lambda call: True)
            async def ok(call):
                if call.data == 'yes':

    и так далее, обрабатывая каждый колбек через elif, возможно не совсем грамотно, но работает