• Как подключить оплату к телеграм боту?

    @puzaka
    самое простое - это подключить киви https://qiwi.com/api
    Ответ написан
    Комментировать
  • Как получить сообщение, которое отправил сам бот?

    @puzaka
    Не совсем понятно, что именно нужно. У тебя есть бот, в него кто-то, что-то пишет, и при получении сообщения, что нужно переслать, текст сообщения или имя того, кто это сообщение прислал?
    Ответ написан
    Комментировать
  • Как сделать проверку ID в aiogram?

    @puzaka
    узнай id бота:
    @dp.message_handler()
    async def test(message: types.Message):
        if message.reply_to_message:
            print(message.reply_to_message.from_user.id)


    И потом делай проверку, если message.from_user.id == (id бота), тогда return (или что-нибудь другое)
    Ответ написан
    Комментировать
  • Как изменить состояние кнопки онлайн, aiogram?

    @puzaka
    Очень непонятно написано. Что именно нужно?
    Админ заходит в бота, исполняет какую-то команду, и другие пользователи видят, что админ онлайн или что?
    Ответ написан
    Комментировать
  • Telebot отправляет на запрос несколько сообщений, как исправить?

    @puzaka
    А зачем собственно нужно две функции? В чём проблема написать так:
    @bot.message_handler(func=lambda m: True)
    def next(message):
        if message.text == 'Привет':
            bot.send_message(message.chat.id, 'Да, привет, как дела?')
    Ответ написан
    Комментировать
  • Как сделать Telegram бота реагирование только на ответы на его сообщения (telebot)?

    @puzaka
    Если используешь aiogram (что я конечно же советую), тогда так:
    @dp.message_handler()
        async def test(message: types.Message):
            if message.reply_to_message:
                await message.answer('ответил на сообщение')
            else:
                await message.answer('пришлите текст ответом на моё сообщение')
    Ответ написан
    Комментировать
  • Почему UserBot не может прочитать id пользователя?

    @puzaka
    По-моему, это связано с тем, что бот не может отправлять сообщение тому, кто ранее не писал боту
    Ответ написан
    Комментировать
  • Как вывести на экран даты всей следующей недели?

    @puzaka
    Встроенная библиотека datetime:
    import datetime
    days = 7
    date = ''
    for day in range(days):
        date += f'{(datetime.datetime.now().date() + datetime.timedelta(days=day)).strftime("%d.%m.%Y")}\n'
    print(date)


    Подробнее:
    import datetime
    days = 7
    dates = ''
    for day in range(days):  # обычный перебор от 0 до 6, включая 6
        date = datetime.datetime.now().date()  # получить сегодняшнюю дату
        date = date + datetime.timedelta(days=day)  # прибавить к сегодняшней дате day дней
        date = date.strftime('%d.%m.%Y')  # превести дату к указанному виду: дд.мм.гггг
        dates += f'{date}\n'  # добавить дату в строку
    print(dates)
    Ответ написан
    Комментировать
  • Как сделать пересылку сообщения после оплаты в телеграм боте?

    @puzaka
    Ну во-первых, делать проверку платежа не через проверку истории, у API киви есть специальные функции для этого (документацию посмотри).
    Во-вторых, когда ты сделаешь то, что я написал выше, сделай так:
    пользователь нажимает на Inline кнопку 'Проверить оплату' (название на свой вкус), и проверяешь, если оплата прошла, тогда:
    await bot.send_message('ID своего чата', f'пользователь {message.from_user_id} оплатил')
    Ответ написан
    Комментировать
  • Aiogram - как отправить фото из sqlite пользователю не сохраняя на диск?

    @puzaka
    При отправке фото/файла боту, это фото/файл сохраняется на сервера телеграмма, и каждого такого файла есть свой file_id. Пример эхо бота, который присылает этот file_id, если прислать ему фото/файл:
    @dp.message_handler(content_types=[ContentType.PHOTO, ContentType.DOCUMENT])
    async def echo(message: Message):
        try:  # если отправил фото
            await message.answer(message.photo[-1].file_id)  # прислать ID фото
        except:  # если отправил файл
            await message.answer(message.document.file_id)  # прислать ID файла


    Для начала нужно записать этот file_id в базу данных, это можно сделать вот так:
    import sqlite3
    
    connect = sqlite3.connect("name_of_your_db.db")
    cursor = connect.cursor()
    
    def AddTaskToDB(file_id):
        try:
            cursor.execute("INSERT OR IGNORE INTO `name_of_your_table` (`name_of_column`) VALUES(?)", (file_id))
            connect.commit()
        except sqlite3.Error as error:  # ошибка
            print(f'Error: {error}')


    Затем получить file_id из базы данных:
    import sqlite3
    
    connect = sqlite3.connect("name_of_your_db.db")
    cursor = connect.cursor()
    
    def GetFileID():
        try:
            file_id = cursor.execute("SELECT `name_of_column` FROM `name_of_your_table`", ).fetchall()[0][0]
            return file_id
        except sqlite3.Error as error:  # ошибка
            print(f'Error: {error}')
            return "error"


    Ну и чтобы отправить этот файл:
    @dp.message_handler()
    async def sendPhoto(message: types.Message):
        try:  # если file_id - это фото
            await message.answer_photo(GetFileID, 'описание фотографии')
        except:  # если file_id - это документ
            await message.answer_document(GetFileID, 'описание документа')
    Ответ написан
    1 комментарий
  • Как забрать всю строку после команды?

    @puzaka
    Если text = '+ударить ха тьфу тебе в лицо'
    и нам нужно получить 'ха тьфу тебе в лицо' , то можно использовать регулярку:
    import re
    text = '+ударить ха тьфу тебе в лицо'
    text = re.findall(r'\s(?:.+)', message.text)[0]
    print(text)  # ' ха тьфу тебе в лицо'   убрать первый пробел, я думаю, не будет проблемой

    Можно через .replace()
    text = '+ударить ха тьфу тебе в лицо'
    print(text.replace('+ударить ', ''))  # 'ха тьфу тебе в лицо'

    Можно через .join()
    text = '+ударить ха тьфу тебе в лицо'
    print(' '.join(text.split()[1:]))  # 'ха тьфу тебе в лицо'
    Ответ написан
    3 комментария
  • Как удалить фото из отправленного сообщения?

    @puzaka
    Никак.
    Такой функции нет даже для обычных пользователей (людей), а для ботов тем более. Будем надеяться, что они добавят такую возможность
    Ответ написан
    Комментировать