Ответы пользователя по тегу Telegram
  • Как принимать фото от пользователя только по конкретному запросу?

    @lob4Noff
    Используйте message.caption как ключ: если пользователь указал к фото специальную подпись, то принимайте это фото и обрабатывайте его как Вам нужно.
    Ответ написан
    Комментировать
  • Python,telebot,API?

    Комментировать
  • Как сделать, чтобы телеграм-бот отвечал на входящие изображения?

    @lob4Noff
    Для библиотеки pyTelegramBotAPI:

    import telebot
    
    @bot.message_handler(content_types=['text', 'photo', 'files'])
    def give_photo(message):
        if message.content_type == 'photo':
            bot.send_message(message.chat.id, text="ОТВЕТ")
    Ответ написан
  • @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) #Чтобы бот работал бесперебойно, пока запущена программа
    Ответ написан
    Комментировать
  • Как узнать о новом человеке в канале через telebot?

    @lob4Noff
    Используйте алгоритм подобного вида для получения данных о новом пользователе канала:
    @bot.message_handler(content_types=["new_chat_members"])
    def handler_new_member(message):
        user_id = message.from_user.id
        user_username = message.from_user.username

    Полученные данные можете вывести в терминал или записать в файл.
    Ответ написан
  • Как ботом задать условие: запрет писать сообщение в группе, пока не добавит N друзей?

    @lob4Noff
    Идея абстрактная, но вполне реальная, в особенности для ЯП Python, модуля telebot.

    Создайте простую базу данных (например, с помощью модуля csv), и запишите туда айди пользователей и значение переменной, которая подсчитывает количество добавленных пользователей (по условию равна 0).

    Если пользователь добавил другого пользователя, файл будет перезаписываться: если строка с айди в базе равна тому айди, что пригласил, увеличьте значение переменной на 1, и перезапишите файл (для этого ознакомьтесь с функциями csv.reader() или csv.DictReader(), csv.writer() или csv.DictWriter()).

    При попытке отправить сообщение напишите следующий алгоритм: при считывании файла если пользователь пригласил 10 или более человек, то с сообщением ничего происходить не будет. Иначе удалить сообщение, и можно предупредить, что до возможности отправки сообщений осталось добавить n друзей.

    Как-то так :)
    Буду рад обсудить детали в комментариях.
    Ответ написан
    Комментировать
  • Как сделать удаление файла с ПК после отправки его в телеграм?

    @lob4Noff
    Для удаления файла с ПК или сервера достаточно воспользоваться системным модулем os.
    Затем, импортировав модуль в код программы, в блоке, где происходит отправка файлов, воспользуйтесь функцией os.remove(), и в качестве аргумента укажите путь к файлу, включая сам файл и его расширение. Ниже пример выполнения функции:
    import os
    ...
    
    os.remove('/home/User/Documents/file.txt')
    Ответ написан
    3 комментария