Ответы пользователя по тегу Боты
  • @callback_query_handler, в чем я ошибаюсь?

    @lob4Noff
    Python считывает Ваш код сверху вниз, и он передаёт call в первый callback_handler (собственно, он должен быть единственным).

    Ознакомьтесь более подробно с callback.data, чтобы использовать инлайн-клавиатуры и передавать функции в них.

    Возможное решение Вашей проблемы:

    ...
    @bot.message_handler(commands=['start'])
    def selects_an_employee(message):
        """Функция, которая отвечает за вывод кнопок с сотрудниками"""
        mes = 'Сотрудник'
        buttons_employee = get_buttons(list_of_employees)
    
        bot.send_message(message.chat.id, mes, reply_markup=buttons_employee) 
    
    @bot.callback_query_handler(func=lambda call: True)
    def callback_worker(call):
        if call.data == 'stanok': # если callback кнопки равен этому значению
            mes_machine = 'Станок'
            buttons_machine = get_buttons(list_of_machines)
    
            bot.send_message(call.message.chat.id, mes_machine, reply_markup=buttons_machine)  # вывод меню пользователю
    
        if call.data == 'detal': # условие, аналогичное условию выше
            mes_part = 'Деталь'
            buttons_parts = get_buttons(list_of_parts)
    
            # bot.send_message(message.chat.id, mes, reply_markup=buttons_machines)
            bot.edit_message_text(chat_id=call.message.chat.id, message_id=call.message.message_id, text=mes_part,
                              reply_markup=buttons_parts)
    ...

    Также было бы интересно посмотреть на функцию get_buttons().
    Ответ написан
  • Почему Функция split не работает?

    @lob4Noff
    Вы получаете ошибку, потому что в описанном случае aiogram использует собственный тип данных. Метод split() работает в том случае, если объект является строкой.
    Вы можете получить словарь, содержащий информацию о пользователе и его сообщении, и затем передать в список значение сообщения по ключу (разбитие сообщения на отдельные слова будет при вхождении символа запятой):

    import config
    import logging
    
    from aiogram import Bot, Dispatcher, executor, types
    
    logging.basicConfig(level=logging.INFO)
    
    bot = Bot(token='')
    dp = Dispatcher(bot)
    
    @dp.message_handler()
    
    async def addrifm1(message: types.Message):
      mes = message
      list = mes['text'].split(",")
      await message.reply(" async def rifm1(message: types.Message):")
      await message.reply("if", list[1], " in message.text:")
      await message.reply("await message.reply(", list[2], ")")
    
    
    if __name__ == "__main__":
      executor.start_polling(dp, skip_updates=True)


    Если Вы только начинаете изучать программирование, советую Вам модуль telebot: его синтаксис намного легче, а в Сети Вы сможете получить больше документации.
    Ответ написан
  • Как сделать так, чтобы была одна команда, но разные ответы, зависящие от предыдущего ответа в «Телеграм» боте?

    @lob4Noff
    Алгоритм для реализации задачи достаточно прост:
    1. Создайте базу данных, которая будет содержать айди пользователя и количество раз, сколько этот пользователь вводил команду.
    2. При выполнении запроса считывайте полученный файл: если пользователя нет в базе данных, то запишите его айди и единицу (первый раз), затем отправьте ему 123. Если пользователь уже есть в базе, считайте текущее значение, и опираясь на него, отправьте пользователю нужный контент (если в базе 1, отправить 456; если 2, отправить 789 и т.д.)

    Предложенный вариант не сложен в реализации, но по моему мнению будет одним из самых надёжных.
    Ответ написан
    5 комментариев
  • Как сделать боту команду start?

    @lob4Noff
    Один из способов для Python, с помощью модуля telebot (установка - pip install pyTelegramBotAPI)

    1) Если у Вас нет бота, создайте его с помощью "Отца Ботов" (https://t.me/BotFather)
    2) Имея токен, создайте *.py-файл, и вставьте туда следующий шаблон для самого простого ответчика:
    import telebot
    
    token = '' #Вставьте Ваш токен, полученный от BotFather
    bot = telebot.TeleBot(token)
    
    
    @bot.message_handler(commands=['start']) #Для команды /start, можете изменить на любую другую
    def start_join(message):
        bot.send_message(message.chat.id, text="Приветствую!")
    
    bot.polling(none_stop=True) #Чтобы бот работал бесперебойно, пока запущена программа
    Ответ написан
    Комментировать