Задать вопрос
  • Как сделать перезапуск бота по нажатию кнопки?

    InternetMaster
    @InternetMaster
    Интернет
    По сути это кнопка самоуничтожения всего от пользователя. То есть, нужно удалить абсолютно все данные, которые бот знает о пользователи (в основном в базе данных), и создать все заново.
    Ответ написан
    Комментировать
  • Как сделать топ баллов?

    InternetMaster
    @InternetMaster
    Интернет
    Нужно взять топ-10 пользователей с самыми высокими баллами, для этого SQLite запрос:
    SELECT username FROM users ORDER BY balli DESC LIMIT 10
    . Этим запросом получишь первые 10 пользователей по баллам.

    Как взять на каком месте юзер по баллам? Чтобы каждый раз не растрачивать ресурсы вычислительной техники, лучше всего вести отдельную таблицу с такими данными, обновляя её всякий раз, когда порядок лидерства будет изменяться.
    Если этого не хочется (или проект уже запущен, и нельзя изменить) нужно каждый раз брать всю таблицу пользователей с сортировкой по максимальному ID (тот же запрос из первой части ответа, только лимит порежь) , и прогонять по циклу for, пока не найдешь нужного пользователя.
    Представить только, что если там не 10, не 100 а 100000 пользователей, вычислительная техника сойдет с ума, еще если представить 20-30 таких запросов одновременно.
    Ответ написан
    2 комментария
  • Aogram Почему бот не отвечает на сообщение?

    InternetMaster
    @InternetMaster
    Интернет
    Все хорошо, но почему используется асинхронный aiogram, и неасинхронный sqlite3?
    Ответ написан
    Комментировать
  • Как деплоить Телеграм-бота с базой данный?

    InternetMaster
    @InternetMaster
    Интернет
    Ты как раз выбрал самую простую для деплоя базу (SQLite). Там нужно просто перенести файл baza.db (baza.sqlite) на сервер и все! sqlite3 идет по умолчанию в python, ничего устанавливать не надо!

    Например, MYSQL нужно установить, настроить root вход, потом создать пользователя, раздать права, создать базу данных, сделать дамп, загрузить его.
    Ответ написан
    Комментировать
  • Ошибка записи данных из бота в файл?

    InternetMaster
    @InternetMaster
    Интернет
    with open('C:\\Vash\\Put\\K\\Papke\\nuzhnoe_nazvanie.txt', 'a+') as file:
        file.write('Необходимый для записи текст')
        file.close()
    print('All done!')
    Ответ написан
    Комментировать
  • Как отправить все фотографии из папки в проекте, Telebot?

    InternetMaster
    @InternetMaster
    Интернет
    Если надо каждую отдельном то просто циклом for отправляешь все фото методом sendPhoto. Вот и все

    Или можно папку заархивировать и отправить ее и все
    Ответ написан
  • Как поменять содержимое Inline кнопки aiogram?

    InternetMaster
    @InternetMaster
    Интернет
    Александр отстает от информации. Гораздо лучше использовать метод editMessageReplyMarkup
    Ответ написан
    3 комментария
  • Как отправить первым сообщение пользователю в ТГ по его нику?

    InternetMaster
    @InternetMaster
    Интернет
    Если боту - то никак. Даже если пользователь первый напишет, то по нику - никак, только по ID. Правда, с 7 декабря 2021 (с версии 5.5) бот может первым написать:

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


    Если вообще нужно первому написать (не боту) то это уже MTProto API.
    Ответ написан
    Комментировать
  • Как добавить ссылку на номер телефона InlineKeyboardButton?

    InternetMaster
    @InternetMaster
    Интернет
    Вообще tel:77777777777 или tel://77777777777, но телеграм блокирует такие ссылки. Если попытаться отправить в другом приложении (например СМС, то все ок).

    При максимальной необходимости можно с использованием сайта дать пользователю ссылку на сайт, и уже на нем будет кнопка "Позвонить". По идеи не должно быть так, чтобы из браузера не позвонилось.
    Ответ написан
  • Aiogram: Как сохранить введенные данные пользователя?

    InternetMaster
    @InternetMaster
    Интернет
    Ну, а шаги то по State? Если да, то это await state.update_data(name='Вячеслав'). На втором шаге записываешь уже фамилию, или что там тебе угодно.

    В конце извлекаешь содержимое:
    n = await state.get_data()
    name = n['name']
    Ответ написан
    Комментировать
  • Бот не выводит встроенную клавиатуру, в чём может быть проблема?

    InternetMaster
    @InternetMaster
    Интернет
    Так ты же не привязал клавиатуру к сообщению. И кстати, ты уже назначил глобал переменную markup, хорошечно было бы её не перебивать локалом, а юзать иное название.

    Привязываю исправную версию кода
    import telebot
    import random
    import config
    from telebot import types
    from random import choice
    
    bot = telebot.TeleBot(config.TOKEN)
    markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
    item1 = types.KeyboardButton('Расписание')
    markup.add(item1)
    
    
    
    
    @bot.message_handler(commands='start')
    def welcome(message):
      pic = open(r'aitvaro.jfif', 'rb')
      bot.send_photo(message.chat.id, pic)
    
      bot.send_message(message.chat.id, 'Привет, {0.first_name}! Я -<b>{1.first_name}</b>, Бот-помощник для учеников "Айтваро Гимназии"\nМогу подсказать расписание, даты каникул, фильм на вечер и многое другое'.format(message.from_user,bot.get_me()),
          parse_mode='html', reply_markup=markup)
      
    
    
    @bot.message_handler(content_types=['text'])
    def raspisanie(message):
      if message.chat.type == 'private':
        if message.text == 'Расписание':
          markup2 = types.InlineKeyboardMarkup(row_width=2)
          item21 = types.InlineKeyboardButton('1a', callback_data='1a')
          item22 = types.InlineKeyboardButton('1b', callback_data='1b')
          item23 = types.InlineKeyboardButton('1c', callback_data='1c')
          item24 = types.InlineKeyboardButton('1d', callback_data='1d')
          item25 = types.InlineKeyboardButton('2a', callback_data='2a')
          item26 = types.InlineKeyboardButton('2b', callback_data='2b')
          item27 = types.InlineKeyboardButton('2c', callback_data='2c')
          item28 = types.InlineKeyboardButton('2d', callback_data='2d')
          markup2.add(item21, item22, item23, item24, item25, item26, item27, item28)
          bot.send_message(message.chat.id, 'Выбери свой класс', reply_markup=markup2)
        else:
          bot.send_message(message.chat.id, 'Я не понял этого сообщения')
    
    
    
    @bot.callback_query_handler(func=lambda call: True)
    def callback_inline(call):
      pic1a = open('1a.png', 'rb')
      pic1b = open('1b.png', 'rb')
      pic1c = open('1c.png', 'rb')
      pic1d = open('1d.png', 'rb')
      pic2a = open('2a.png', 'rb')
      pic2b = open('2b.png', 'rb')
      pic2c = open('2c.png', 'rb')
      pic2d = open('2d.png', 'rb')
    
      try:
        if call.message:
          if call.data =='1a':
            bot.send_message(call.message.chat.id, pic1a, 'Расписание "1а" класса')
          elif call.data =='1b':
            bot.send_message(call.message.chat.id, pic1b, 'Расписание "1б" класса')
          elif call.data == '1c':
            bot.send_message(call.message.chat.id, pic1c, 'Расписание "1с" класса')
          elif call.data =='1d':
            bot.send_message(call.message.chat.id, pic1d, 'Расписание "1д" класса')
          elif call.data =='2a':
            bot.send_message(call.message.chat.id, pic2a, 'Расписание "2а" класса')
          elif call.data == '2b':
            bot.send_message(call.message.chat.id, pic2b, 'Расписание "2б" класса')
          elif call.data =='2c':
            bot.send_message(call.message.chat.id, pic2c, 'Расписание "2с" класса')
          elif call.data =='2d':
            bot.send_message(call.message.chat.id, pic2d, 'Расписание "2д" класса')
    
          else:
            ('Такого класса нет в списке')
      except Exception as e:
        print(repr(e))
    Ответ написан
    Комментировать
  • Есть ли в aiogram аналог "bot.register_next_step_handler" от telebot?

    InternetMaster
    @InternetMaster
    Интернет
    Нет, такого нет. Хотя есть State, можно с ней разобраться.

    Ссылку прилагаю: https://docs.aiogram.dev/en/latest/examples/finite...
    Ответ написан
    Комментировать
  • Как подключить калькулятор криптовалют к боту?

    InternetMaster
    @InternetMaster
    Интернет
    Нужно использовать API сервисов которые предоставляют курс нужной криптовалюты.
    Ответ написан
    Комментировать
  • Реализация выдачи персональной ссылки на чат через телеграм бота?

    InternetMaster
    @InternetMaster
    Интернет
    Добро пожаловать в раздел документации, уважаемый новичок.

    Тебя интересует метод createchatinvitelink.
    Ответ написан
    Комментировать
  • Как сделать пригласить в чат через URL кнопку?

    InternetMaster
    @InternetMaster
    Интернет
    Это посредством ссылки t.me/share.

    Использование: t.me/share/url?url=&text=hello

    В text= можно подставить любой текст, которым вы хотите поделиться.
    Можно и url= поставить ссылку на любой сайт каким хотите поделиться, например: t.me/share/url?url=telegram.org&text=hello

    Но ссылки без url (как в начале) не работают например, в Telegram Desktop, а только в мобильных приложениях.
    Ссылки с url, работают везде (кроме Web, где это не работает вообще)
    Ответ написан
    3 комментария
  • Выдает ошибку: Bad Request: can't parse inline keyboard button: Text buttons are unallowed in the inline keyboard?

    InternetMaster
    @InternetMaster
    Интернет
    В Inline клавиатуре нужно callback_data сделать не 0, а "0"; не 1, а "1".
    Ответ написан
    2 комментария
  • Как сделать меню InlineKeyboard которое будет переключаться как страницы (Telebot)?

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

    Если постоянный (не изменяется если, например запрос был сделан сейчас и через 3 секунды), то можно просто указать, что стрелочка "вперед" перекинет на следующую страничку результатов.

    Для этого в callback нужно передать уникальный идентификатор запроса (например, результаты по поиску "как приготовить роллы" это уникальный идентификатор "1", запрос "как приготовить блины" уникальный идентификатор "2", и т.д.).
    Callback data может выглядеть как-то так: "result1_2" (где 1 - уникальный идентификатор запроса, а 2 - номер странички, куда перебросить при нажатии).
    Когда пользователь нажмет на эту кнопку, выдайте callback "result1_3", а в кнопку назад - "result1_1".

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

    InternetMaster
    @InternetMaster
    Интернет
    Потому что у тебя обработчик команды /go находится ниже обработчика текста. Команда /go относится к тексту, если обработчик не ловит эту команду раньше текста. Просто поднимите обработчик команды.

    @bot.message_handler(commands=['start'])  
    def welcome(message):
        sti = open('imagine/sticker.webp', 'rb')
        bot.send_sticker(message.chat.id, sti)
    
        #КЛАВИАТУРА 1
        markup = types.ReplyKeyboardMarkup(resize_keyboard=True, one_time_keyboard =True)
        item = types.KeyboardButton("\N{world map}")
    
        markup.add(item)
    
        bot.send_message(message.chat.id, "Привет! /help".format(message.from_user,bot.get_me()),
                         parse_mode='html', reply_markup=markup)
    
    @bot.message_handler(commands=['help'])
    def hi1(message):
        bot.send_message (message.chat.id, "Наберите команду /go или /we")
            
    @bot.message_handler(commands=['go'])
    def go(message):
        
        #КЛАВИАТУРА 2
        markup = types.ReplyKeyboardMarkup(resize_keyboard=True, one_time_keyboard =True)
        item1 = types.KeyboardButton("\N{baby}")
        item2 = types.KeyboardButton("\N{girl}")
        item3 = types.KeyboardButton("\N{man}")
    
        markup.add(item1, item2, item3)
        
        bot.send_message(message.chat.id, "Возраст?", reply_markup=markup)
        bot.register_next_step_handler(go1)
    
    @bot.message_handler(content_types=['text'])
    def hi(message):
        if message.chat.type == 'private':
            if message.text == '\N{world map}':
                 mesg = bot.send_message(message.chat.id, 'наберите команду /go')
                 if message.text == '/go':
                     bot.register_next_step_handler(mesg, go)
            else:
                bot.send_message(message.chat.id, 'Не знаю, что и ответить \N{anguished face} \nНабери команду /help, чтобы ознакомиться со списком команд')
    
    
    def go1(message):
        if message.chat.type == 'private':
            if message.text == '\N{baby}':
    
                 #КЛАВИАТУРА 3
                markup = types.ReplyKeyboardMarkup(resize_keyboard=True, one_time_keyboard =True)
                item1 = types.KeyboardButton("игры")
                item2 = types.KeyboardButton("деньги")
                item3 = types.KeyboardButton("телки")
    
                markup.add(item1, item2, item3)
            
                bot.send_message(message.chat.id, 'Окей, кого вы любите больше?')
    Ответ написан
    Комментировать
  • Aiogram. Не работает рассылка. как исправить?

    InternetMaster
    @InternetMaster
    Интернет
    Напоминаю, что нужно строго соответствовать пункту 3.8 правил.

    А ответ на вопрос - пишет, что чат не найден. Возможно у вас в базе нет пользователей вообще, или в качестве user_id вернулось что то другое, хотелось бы видеть ответ от базы, чтобы понять. Возможно вернулось [(None), (None), (None)] или тому подобное.

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

    InternetMaster
    @InternetMaster
    Интернет
    Ну начнем с того, что вы не указали библиотеку, но можно понять что у вас PyTelegramBotAPI по bot.register_next_step_handler и общей сложности вопроса.

    Думаю, может вы всерьез про оператор сравнения не слышали.

    def lala(message):
        if kolvoLet == 0: # На самом деле, можно и не делать, если возраст не привязан к ответам, просто в вопросе было 0 лет
            if chtoTamUTebya == 'любишь играть':
                pass # Здесь соответственно на «любишь играть»
            elif chtoTamUTebya == 'любишь петь':
                pass # Здесь соответственно на «любишь петь»
            # И попер так дальше по всем вариантам.
    Ответ написан
    3 комментария