Ответы пользователя по тегу TeleBot
  • Как сделать что бы бот отправлял пронумерованную картинку из папки гугл диска?

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

    код
    # Импорты
    import telebot
    from telebot import types
    import os
    
    
    # Определение бота
    bot = telebot.TeleBot("TOKEN", parse_mode="MARKDOWN")
    bot.set_webhook()
    
    
    # Убирание кнопок
    none = telebot.types.ReplyKeyboardRemove()
    
    
    # # # # # # # # # # # # # # # # # # # # # # # # # # #
    
    
    
    # команда /start
    @bot.message_handler(commands=['start'])
    def start(message):
        buttons = types.InlineKeyboardMarkup()
        books = [book.replace('_', ' ') for book in os.listdir('books')]
        for book in books:
            buttons.add(types.InlineKeyboardButton(f"{book}", callback_data=f"-book-{book}"))
        bot.send_message(message.chat.id, f"Выбери учебник", reply_markup=buttons)
    
    
    
    # Обработчик callback
    @bot.callback_query_handler(func=lambda c: True)
    def callback(c):
        if '-book-' in c.data:
            book = c.data.split('-book-', maxsplit=1)[1]
            exercises = os.listdir(f"books\{book.replace(' ', '_')}")
            buttons = types.InlineKeyboardMarkup()
            btns = []
            for exercise in exercises:
                btns.append(
                    types.InlineKeyboardButton(
                        f"{exercise.replace('.png','')}", 
                        callback_data=fr"-send-{book.replace(' ', '_')}\{exercise}"
                    )
                )
            for i in range(0, len(btns), 3):
                try: buttons.add(btns[i], btns[i+1], btns[i+2])
                except:
                    try: buttons.add(btns[i], btns[i+1])
                    except:
                        try: buttons.add(btns[i])
                        except: pass
            bot.send_message(c.message.chat.id, f"Выбери номер", reply_markup=buttons)
    
        if '-send-' in c.data:
            path = f"books\{c.data.split('-send-', maxsplit=1)[1]}"
            bot.send_photo(c.message.chat.id, photo=open(path,'rb'))
    
    bot.polling(none_stop=True)

    объяснять как работает это - специально не буду, смотри, сам разбирайся.

    spoiler

    есть ограничение на кол-во инлайн кнопок - 100.
    telebot.apihelper.ApiTelegramException: A request to the Telegram API was unsuccessful. Error code: 400. Description: Bad Request: file must be non-empty
    - файл пустой
    длинна колбэка ограничена в 64 символа (telegram.error.BadRequest: Button_data_invalid)
    Ответ написан
    Комментировать
  • Как реализовать рассылку в телеграмм боте?

    RimMirK
    @RimMirK
    Вроде человек. Вроде учусь. Вроде пайтону
    план:
    проверяем вид сообщения (текст, фото, аудио, ГС, файл...). В зависимости от типа, выполняем разные действия. Если это текст, просто отправляем его. Если это фотки - проверяем их кол-во. Если 1 - отправляем. Если больше 1 - гуглим как отправить несколько фоток. Отправляем несколько фоток. Не забываем про подпись.
    С другими типами то-же самое. Удачи!
    Ответ написан
    Комментировать
  • Callback-кнопка в модуле telebot (язык python) не обновляет свое содержание. Что делать?

    RimMirK
    @RimMirK
    Вроде человек. Вроде учусь. Вроде пайтону
    можно просто в колбек кнопки записывать слово
    @bot.message_handler(func=lambda message: True)
    def sayanswer(message):
        kb = types.InlineKeyboardMarkup(row_width=1)
        btn1 = types.InlineKeyboardButton(text="морфологический разбор", callback_data=f"morphological | {message.text}")
        kb.add(btn1)
        bot.send_message(message.chat.id, "какой разбор сделать?", reply_markup=kb)

    а в обработчике уже парсить сайт
    @bot.callback_query_handler(func=lambda callback: callback.data)
    def check(callback):
        if "morphological" in callback.data:
            url = "https://wikislovo.ru/morphology/" + callback.data.split(' | ')[1:]
            html = requests.get(url).text
            soup = BeautifulSoup(html, 'html.parser')
            find_text = soup.find('div', class_="morphology-analysis").get_text()
            bot.send_message(callback.message.chat.id, find_text)
    Ответ написан
  • Как создать бота в телеграм и с помощью каких программ?

    RimMirK
    @RimMirK
    Вроде человек. Вроде учусь. Вроде пайтону
    Смотри. Всякие телеграмм боты обычно делают на Python. Изучи с начала базу языка, потом уже пробуй делать.
    На счет бота, смотри туториалы Читай статьи. Смотри с начала статью как посчитать сколько человек зашло в канал, потом как тригерить ключевое слово ...
    Ответ написан
    Комментировать
  • Как правильно назвать эту строку?

    RimMirK
    @RimMirK Автор вопроса
    Вроде человек. Вроде учусь. Вроде пайтону
    bot = telebot.TeleBot("TOKEN", parse_mode="FORMATING")

    Эта строка присваевает переменной bot новый экземпляр класса TeleBot
    То есть это скорее создание бота, потому что инициализация происходит в бекграунде в методе telebot.TeleBot.__init__ который вызвается при создании нового экземпляра.
    Ответ написан
    Комментировать
  • Как сделать волны на голосовом сообщении?

    RimMirK
    @RimMirK Автор вопроса
    Вроде человек. Вроде учусь. Вроде пайтону
    https://github.com/tdlib/telegram-bot-api/issues/354

    Проблема была в том, что я загружал большие файлы. На файлах больше 1 МБ волны не отображаются
    Ответ написан
    Комментировать
  • Как удалить весь чат с Telegram Bot, а не одно сообщение?

    RimMirK
    @RimMirK
    Вроде человек. Вроде учусь. Вроде пайтону
    никак. Даже есть каким-то образом достать id каждого сообщения, то удалить все равно не выйдет, ограничение. Нельзя удалять сильно старые сообщения.
    Ответ написан
  • Как отправить боту сообщение в телеграм?

    RimMirK
    @RimMirK
    Вроде человек. Вроде учусь. Вроде пайтону
    https://core.telegram.org/bots/faq#why-doesn-39t-m...
    Why doesn't my bot see messages from other bots?
    Bots talking to each other could potentially get stuck in unwelcome loops. To avoid this, we decided that bots will not be able to see messages from other bots regardless of mode.


    Боты, разговаривающие друг с другом, потенциально могут застрять в нежелательных петлях. Чтобы этого избежать, мы решили, что боты не смогут видеть сообщения от других ботов вне зависимости от режима.
    Ответ написан
  • В чем проблема, делал по видео?

    RimMirK
    @RimMirK
    Вроде человек. Вроде учусь. Вроде пайтону
    Эх.. Научились бы вы читать... Ошибка гласит: Только один бот может быть запущен [одновременно]
    Ответ написан
    Комментировать