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

    @twistfire92
    Python backend developer
    Как можно в телеграмм боте при нажатии кнопки подключить оператора? Нужно чтобы всем операторам пришло уведомление

    Можете хранить ID всех операторов в БД и при нажатии на кнопку делать рассылку по всем операторам, глаяное, чтобы каждый оператор хотя бы раз контачил с этим ботом, иначе сообщения он не получит.

    за тем закрепляется чат с пользователем

    Далее уже либо личная беседа оператора и пользователя, либо как-то организовать общение через самого бота. Бот дублирует сообщение, которое ему отправил оператор и отправляет пользователю. И наоборот. Но это уже слишком заморочно и не совсем правильно что-ли. Хотя так сходу не скажу как еще это организовать средствами телеги, да так, чтобы бот мог все это организовать.

    Если пользователь в течение 15 минут ничего не ответил, отключить оператора от чата.

    Тут уже использовать библиотеку scheduler или подобное.
    Ответ написан
    Комментировать
  • Как сохранять сообщения c пометкой изменено в telegram боте?

    @twistfire92
    Python backend developer
    Используйте @bot.edited_message_handler чтобы отловить момент с измененным сообщением.
    Главная проблема будет состоять в том, что вам надо будет понять что за сообщение поменялось. Первой версии сообщения вы уже не получите. Вы можете хранить ID сообщения где пользователь ввел имя, ID где фамилию, телефон и т.д. И уже по этим ID понимать что было изменено.

    И это легко реализовать уже после записи данных в БД. А вот вклиниться посреди работы схемы из множества register_next_step_handler уже будет сложнее. Или нет, не пробовал. Но вы поэкспериментируйте!
    Ответ написан
    Комментировать
  • Как расположить inline кнопки в pytelegrambotapi?

    @twistfire92
    Python backend developer
    Row_width не обязательно указывать вообще. По умолчанию значение равно 3.
    Т.е. если просто в объект InlineKeyboardMarkup добавлять кнопки поочередно, они будут выстраиваться линиями по 3 кнопки в ряд.

    Вам надо использовать метод row(), передавая туда список объектов InlineKeyboardButton

    Т.е. если ориентироваться на ваш скрин, то располагать кнопки следует следующим образом:
    start_markup = telebot.types.InlineKeyboardMarkup()
    
    # первый ряд (две кнопки)
    btn1= telebot.types.InlineKeyboardButton('действие 1', callback_data='1')
    btn2= telebot.types.InlineKeyboardButton('действие 2', callback_data='2')
    start_markup.row(btn1, btn2)
    
    # второй ряд (одна кнопка)
    btn3= telebot.types.InlineKeyboardButton('действие 3', callback_data='3')
    start_markup.row(btn3)
    
    # третий ряд (две кнопки)
    btn4= telebot.types.InlineKeyboardButton('действие 4', callback_data='4')
    btn5= telebot.types.InlineKeyboardButton('действие 5', callback_data='5')
    start_markup.row(btn4, btn5)
    
    # четвертый ряд (две кнопки)
    btn6= telebot.types.InlineKeyboardButton('действие 6', callback_data='6')
    btn7= telebot.types.InlineKeyboardButton('действие 7', callback_data='7')
    start_markup.row(btn6, btn7)
    
    # пятый ряд (одна кнопка)
    btn8= telebot.types.InlineKeyboardButton('действие 8', callback_data='8')
    start_markup.row(btn8)
    Ответ написан
    Комментировать
  • Как через бота телеграм отправлять ссылку с приглашением в группу?

    @twistfire92
    Python backend developer
    Ссылка приглашение генерируется методом exportChatInviteLink. Если вы пользуетесь библиотекой telebot, то пользуйтесь методом export_chat_invite_link.
    Этот метод генерирует новую ссылку приглашение. Старая в этом случае теряет свою работоспособность.
    Получить текущую ссылку можно через команду GetChat. Этот метод возвращает объект Chat в котором есть поле invite_link.

    Единственный момент - бот может отправлять сообщения только тем, кто с этим ботом начал диалог. Если пользователь с ботом никак не контачил, то вы его никак не пригласите в группу.

    А вообще вся вышеуказанная информация написана в документации к Telegram Bot API. Ищите сначала там.
    Ответ написан
    Комментировать
  • Как заменить фото бота в телеграм?

    @twistfire92
    Python backend developer
    Вот поиграйтесь с этим кодом.
    найдите картинки соответствующие и просмотрите как все это работает в примере ниже

    import telebot
    from telebot import types
    
    token = '' 
    
    bot = telebot.TeleBot(token)
    
    @bot.message_handler(commands=['start'])
    def send_welcome(message):
    	photo = open('racoon.jpg', 'rb')
    	markup = create_markup()
    	bot.send_photo(message.chat.id, photo, caption='Енот', reply_markup=markup)
    
    @bot.callback_query_handler(func=lambda c: True)
    def change_photo(call):
    	markup = create_markup()
    	chat_id=call.message.chat.id
    	message_id=call.message.message_id
    	if call.data == 'racoon':
    		photo = open('racoon.jpg', 'rb')
    		media = types.InputMediaPhoto(photo, caption='Енот')
    		bot.edit_message_media(media=media, chat_id=chat_id, message_id=message_id, reply_markup=markup)
    		
    	elif call.data == 'fox':
    		photo = open('fox.jpg', 'rb')
    		media = types.InputMediaPhoto(photo, caption='Лиса')
    		bot.edit_message_media(media=media, chat_id=chat_id, message_id=message_id, reply_markup=markup)
    		
    	elif call.data == 'rabbit':
    		photo = open('rabbit.jpg', 'rb')
    		media = types.InputMediaPhoto(photo, caption='Заяц')
    		bot.edit_message_media(media=media, chat_id=chat_id, message_id=message_id, reply_markup=markup)
    		
    
    def create_markup():
    	markup = types.InlineKeyboardMarkup()
    	button1 = types.InlineKeyboardButton(text='Енот', callback_data='racoon')
    	button2 = types.InlineKeyboardButton(text='Лиса', callback_data='fox')
    	button3 = types.InlineKeyboardButton(text='Заяц', callback_data='rabbit')
    	markup.row(button1, button2, button3)
    	return markup
    
    bot.polling()


    Результат этого кода (Все это - одно сообщение, в котором перерисовывалась картинка):

    5f72cdac977d9702675906.png
    5f72cdc24d779354601542.png
    5f72cddaf2294374777349.png

    Единственный момент - это если будете менять зайца на зайца например, то код упадет в ошибку.
    Но это уже другая проблема))
    Ответ написан
    Комментировать
  • Как реализовать tet-a-tet чат между пользователями в телеграмм боте?

    @twistfire92
    Python backend developer
    Бот не может создавать групповые чаты. Его туда можно только добавить.
    Ответ написан
    Комментировать
  • Как сделать отмену с помощью Inline клавиатуры?

    @twistfire92
    Python backend developer
    в раздел Игры добавляете кнопку "Отмена" и точно так же как и в остальных случаях через edit_message_text создаете главное меню. Весь код у вас уже готов, просто копируйте из функции send_welcome, только там вместо send_message вызываете edit_message_text
    Ответ написан
    Комментировать
  • Как поменять фото телеграм бота на новое?

    @twistfire92
    Python backend developer
    Вы отправляете отдельно картинку, отдельно текст. С помощью метода send_photo можно передавать не только фото, но и подпись к нему и вроде даже блок кнопок. А потом уже менять фотографию методом edit_message_media.
    Ответ написан
  • Telebot - Как реализовать приём сообщений с callback_data?

    @twistfire92
    Python backend developer
    Изучите работу с register_next_step_handler

    Пример

    По сути это реализация ожидания ввода от пользователя.
    Через callback_query_handler отлавливаете нажатие на кнопку, и потом делаете обработку этого нажатия с register_next_step_handler
    Ответ написан
  • Почему python не отправляет сообщения в telegram?

    @twistfire92
    Python backend developer
    А что за метод newpost?

    Может надо использовать sendMessage?
    Ответ написан
  • Ошибка в коде как исправить?

    @twistfire92
    Python backend developer
    переменная rl используется раньше, чем объявлена.
    уберите if else при объявлении rl rl2 rl3.

    по сути они вообще не нужны, передавайте сразу "Камень" "Ножницы" "Бумага".
    Ответ написан
  • ReplyKeyboardRemove, как работать?

    @twistfire92
    Python backend developer
    Передавай свою keyboard в отправке следующего сообщения как параметр reply_markup=keyboard
    Ответ написан
    Комментировать
  • Как заставить бота ждать ответ в определенный момент?

    @twistfire92
    Python backend developer
    гугли register_next_step_handler
    Ответ написан
    Комментировать
  • Как заставить телеграм бота пересылать имя пользователя?

    @twistfire92
    Python backend developer
    У некоторых пользователей нет ни юзернейма нормального, по которому можно найти через @, ни имени фамилии и пр.

    А вообще вся информация об отправителе лежит в message.from_user
    message.from_user.id - id пользователя, собственно то, что возвращает пример из гитхаба
    message.from_user.first_name - Имя
    message.from_user.last_name - Фамилия
    message.from_user.username - юзернейм

    Возможно этих полей и не будет в ответах от тех пользователей, у кого они не заполнены.
    Но это все очень доступно описано в документации.
    Ответ написан
    1 комментарий
  • Как переменную передавать с одной функции в другую telebot?

    @twistfire92
    Python backend developer
    в register_next_step_handler первые 2 параметра - это сообщение и функция, которая вызывается. Далее передаются параметры, если у вызываемой функции есть какие-либо свои параметры, помимо message.

    bot.register_next_step_handler(message, first_name, <Параметр1>, <Параметр2>)

    ...

    def first_name(message, <Параметр1>, <Параметр2>):
    Ответ написан
    Комментировать
  • Телеграм бот с while?

    @twistfire92
    Python backend developer
    У тебя в цикле while нет команды ожидать. Ты просто тупо в цикле обходишь числа от 1 до 5 и отправляешь сообщения. Нету еще одного register_next_step_handler
    Вообще почему while, а не for? В твоем случае же известно количество рабочих.

    Еще можно предлагать пользователю вводить имена рабочих пока не закончатся, не спрашивая заранее их количество. Триггером завершения записи может быть какое-либо слово, типа "стоп" или "done".
    Ответ написан
  • Метод для заполнения InlineKeyboardMarkup в цикле?

    @twistfire92
    Python backend developer
    markup = InlineKeyboardMarkup(resize_keyboard=True)
    for answer in answers:
    button = InlineKeyboardButton(text=answer, callback_data=answer)
    markap.row(button)
    update.message.reply_text("Ваш вопрос:\n" + text_question[0], reply_markup=markup)
    Ответ написан
    Комментировать
  • Как реализовать добавление вариантов к опросу с помощью python-telegram-bot?

    @twistfire92
    Python backend developer
    #Список с ответами
    answers = ['вариант 1', 'вариант 2', 'вариант 3', 'вариант 4']
    
    markup = types.InlineKeyboardMarkup()
    for answer in answers:
        button = types.InlineKeyboardButton(text=answer, callback_data=answer)
        markup.row(button)
    
    question = 'какой вариант выберете?'
    
    bot.send_message(message.chat.id, question, reply_markup=marckup)


    Если все правильно написал, то в итоге будет сообщение с текстом вопроса ('какой вариант выберете?') и 4-мя инлайн кнопками, каждая в своей строке (благодаря функции row())
    Ответ написан
    2 комментария
  • Как отравить сообщение через proxy TELEBOT?

    @twistfire92
    Python backend developer
    https://www.youtube.com/watch?v=CDFFfWOqVKs

    посмотрите тут как все должно быть настроено.
    Найдите рабочий прокси, возможно придется перебрать несколько штук.
    И библиотека requests должна быть не самая свежая, а версии вроде 2.10.0, в видосе сказано точнее.
    Ответ написан
    Комментировать