Ответы пользователя по тегу Боты
  • Как создать комнату в боте?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Нельзя. Боты не могут создавать группы.

    Новую группу может создать только полноценный пользователь Telegram, так что это возможно реализовать только с помощью клиентского (MTProto) API.
    Ответ написан
    Комментировать
  • Через что сделать телеграм бота?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Если надо, чтобы заказы на сайте приходили владельцу сайта в телеграм, то это довольно просто сделать. Надо просто создать бота, самому написать там /start (чтобы бот мог слать этому пользователю), получить свой id любым образом (например, через сторонних ботов) и сделать по факту заказа вызов запроса:

    https://api.telegram.org/botТУТМОЙТОКЕН/sendMessage?chat_id=мой_id&text=Текст+сообщения
    Ответ написан
    Комментировать
  • Как получить имя 2 юзера через ответ на сообщение?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Поле reply_to_message у класса Message содержит информацию о сообщении, на которое отвечают. Ну или None, если это обычное сообщение.
    Ответ написан
    2 комментария
  • На что жалуется телеграм бот aiogram?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    BOT_TOKEN="твой_токен"

    Всё остальное лишнее.
    Ответ написан
    Комментировать
  • Как сменить язык внутри команды на русский?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    По поводу времени тут с завидной регулярностью спрашивают, нужно выставить локаль русскую. Например Как изменить язык created_at.strftime?
    По поводу локали системных уведомлений - в настройки конкретного сервера. Бот на это не влияет.
    Ответ написан
    Комментировать
  • Как сделать добавление товара в корзину с плавающим товаром?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    После этого:

    next_item = int(call.data.split('_')[-1])

    значение next_item будет равен номеру товара. Ещё можно такое сделать:

    operation = call.data.split('_')[0]

    Тогда смотрим, что operation == 'add' и добавляем товар с номером next_item (хотя, конечно, слово "next" в названии переменной сбивает с толку, я бы переименовал).
    Ответ написан
    Комментировать
  • Какие различия у библиотек для telegram бота?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Главное отличие: первая синхронная, вторая асинхронная. О преимуществах асинхронного подхода говорить не буду, но он сложнее, особенно для неопытных программистов.

    В целом все библиотеки похожи, у них одинаково называются методы, аналогично устроены структуры данных. Неудивительно, ведь все они реализуют один и тот же API. Зная одну, можно легко освоить другие. С другой стороны, в подавляющем большинстве случаев нет никакого смысла перескакивать на другую библиотеку вместо уже знакомой.

    Из библиотек отмечу pyrogram, асинхронную библиотеку, которая умеет одновременно поддерживать и Bot API, и MTProto API, причём одинаковыми методами. Это может быть интересно для некоторых задач.
    Ответ написан
    Комментировать
  • Как сделать чтобы в коллбеке инлайн кнопки сообщение заменяло прошлое?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Вот и надо редактировать предыдущее сообщение. Например:

    bot.edit_message_text(chat_id=call.message.chat.id, message_id=call.message.id, text='Новый текст')
    bot.edit_message_media(chat_id=call.message.chat.id, message_id=call.message.id, media=types.InputMediaPhoto(open('file.jpg','r').read(), caption='Новая картинка'))
    Ответ написан
    Комментировать
  • Как узнать данные сообщений в Telebot?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Никак, бот должен при необходимости сам запоминать все данные, которые отправлял/принимал, в API для этого никаких методов не предусмотрено.
    Ответ написан
    Комментировать
  • Как оформить кнопку "Следующий товар"/"Предыдущий товар"?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Нужно либо помнить позицию текущего пользователя в карусели товаров, чтобы правильно выбирать, какой будет предыдущим/следующим/текущим для добавления (как уже написано выше), либо в качестве callback_data кнопок использовать данные конкретных товаров.

    Например, как-то так (items - словарь товаров с артикулами в качестве ключей):

    #
        numbers = items.keys()
        index_current = numbers.index(number_current)
        if index_current > 0:
            number_prev = numbers[index_current-1]
        else:
            number_prev = numbers[-1]
        if index_current < len(numbers)-1:
            number_next = numbers[index_current+1]
        else:
            number_next = numbers[0]
    
        next =InlineKeyboardButton(text= 'Следующий',callback_data= f'item:{number_next}')
        previous =InlineKeyboardButton(text= 'Предыдущий',callback_data= f'item:{number_prev}')
        add = InlineKeyboardButton(text= 'Добавить в корзину',callback_data= f'add:{number_current}')
    
    ...
    
        if call.data.startswith('item:'):
           number_current = call.data[5:]
           show_this_item_to_user
        if call.data.startswith('add:'):
           number_current = call.data[4:]
           add_this_item_to_basket
    Ответ написан
    6 комментариев
  • Как менять сообщение в телеграмм боте?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    При отправке сообщения возвращается объект Message, в котором есть требуемый id.

    Например, в telebot:

    msg = bot.send_message(my_chat_id, message_text)
    msg_id = msg.message_id
    bot.edit_message_text(chat_id=my_chat_id, message_id=msg_id, text="(edited) "+message_text)
    Ответ написан
    Комментировать
  • Как объединить 'Привет' и message.text?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    bot.send_message(message.chat.id, 'привет '+message.text)

    или
    bot.send_message(message.chat.id, f'привет {message.text}')
    Ответ написан
    3 комментария
  • Как лучше и правильно использовать gettext?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    gettext в простейшем варианте предполагает выбор одного языка, который в дальнейшем используется весь жизненный цикл приложения.

    Надо либо переключать язык на язык конкретного пользователя во всех нужных местах (что приведёт к частым переключениям и до кучи несовместимо с асинхронным кодом), либо использовать gettext в режиме class-based API.

    Похожий вопрос Как сделать мультиязычным приложение python?
    Ответ написан
    Комментировать
  • Как в python telebot добавить кнопку?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Это inline-клавиатура (привязанная к конкретному сообщению), чтобы получить обычную (не привязанную к конкретному сообщению), надо использовать ReplyKeyboardMarkup вместо InlineKeyboardMarkup.
    Ответ написан
    Комментировать
  • Бот Телеграмм на php. Проблема с удалением сообщений. Как правильно?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Нужно боту в настройках группы явно выдать права на удаление сообщений.
    Ответ написан
    Комментировать
  • Не надсылает обратной формы,что делать?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Кто тебе сказал, что код верный? По-моему, код ни фига не верный, не говоря уже о том, что неясно, что он вообще должен делать.

    Кто и как эти две функции вызывает. Надо думать, process_deliveryEnd_step вызывается как обработчик каких-то сообщений? А где регистрируется этот обработчик? Обычно это делают с помощью декоратора message_handler, но тут я ничего подобного не вижу. То есть либо ты привёл далеко не весь код, либо этот код и правда не будет ничего делать.

    update: в итоге выяснилось, что случается Exception из-за отсутствия импорта Template. И ладно бы при этом скрипт показывал ошибку, но нет, он писал пользователю, что всё хорошо.
    Ответ написан
  • Как записать всех пользователей в БД при присоединении бота?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    По умолчанию бот не может получить список пользователей. Смотреть в сторону Gateway Privileged Intents
    https://discordpy.readthedocs.io/en/latest/intents.html
    Ответ написан
    Комментировать
  • Как сравнить айди человека который нажал на инлайн кнопку?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Если всё это делается в чате с другими людьми (что несколько странно, я считаю), то можно, например, передавать id юзера в callback_data (например, в виде ok-12345 и no-12345 соответственно), а потом сравнивать id из call.data с значением call.from_user.id.
    Ответ написан
    Комментировать
  • Как вывести рандомное изображение из файла?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    В python (как и во многих других языках программирования) символ \ в строковых значениях используется для экранирования и для спецсимволов. Например, \t - табуляция, \n - перевод строки. Поэтому использовать \ в строках так просто нельзя. Нужно или указать r перед строкой для отключения подобного поведения (r'c:\telegram'), или экранировать слеши: ('c:\\telegram').
    Ответ написан
    3 комментария
  • Как работать с api / бот discord?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Discord API использует HTTP-запросы. Поэтому потребуется любая библиотека для таких запросов (например, libcurl). А дальше курить официальную документацию по API.

    ... Но как уже тут выше упоминали, большого смысла в этом нет. Учиться на задаче, к которой язык плохо приспособлен - идея довольно странная.
    Ответ написан
    Комментировать