Задать вопрос
@xx_RuBiCoN_xx

Как изменить сообщение для всех операторов?

Пользователь пишет обращение в службу поддержки, оно пересылается всем операторам с инлайн кнопкой "Подключиться". После нажатия на кнопку, хочу сделать так, чтобы текст сообщения изменялся(а именно добавлялся ник оператора который принял запрос), а инлайн кнопка исчезала. Выглядит код примерно так:

messages = []

#всякий разный код

def supportWait(bot, message):
   for operator in operators_id:
      keyboard = types.InlineKeyboardMarkup()
      keyboard.add(join_dialog_btn)
      old_message = bot.send_message(operator, f"Поступило новое обращение в службу поддержки.\n\nUser ID: {message.from_user.id}\nUsername: @{message.from_user.username}\n\nВопрос клиента:\n<b>{message.text}</b>", parse_mode="HTML", reply_markup=keyboard)
      messages.append(old_message.message_id)
      print(messages)
   bot.send_message(message.chat.id, text=text50)

#Тут ещё всякий код

      elif operator in operator_mode:
         match operator_mode[operator]:
            case 'not_in_dialog':
               print(messages)
               print(operators_id)
               for operator_id in operators_id:
                  for message_id in messages:
                     new_text = f"@{call.from_user.username} подключился к диалогу\n\nUser ID: {message.from_user.id}\nUsername: @{message.from_user.username}\n\nВопрос клиента:\n<b>{message.text}</b>"
                     bot.edit_message_text(new_text, chat_id=operator_id, message_id=message_id, parse_mode="HTML", reply_markup=None)


По итогу, у того кто нажимает на "Подключиться" - сообщение изменяется, а дальше бот ложится и говорит ошибку, что сообщение не найдено.

Почему? Принтами проверил иды сообщений доходят верно, иды операторов тоже.
  • Вопрос задан
  • 22 просмотра
Подписаться 1 Простой Комментировать
Решения вопроса 1
@xx_RuBiCoN_xx Автор вопроса
Проблема заключалась в том, что бот рандомно подставляет айдишники операторов и айдишники сообщений. Соответственно, случается так, что он путает их местами. Типа оператору1 отправили сообщение1, а оператору2 сообщение2. А бот рандомно подставляет эти значения в функцию и получается, например, что мы изменяем для оператора1 сообщение2, а т.к. этого сообщения нет у этого оператора - краш.

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

С учётом автоматизации, можно сделать через базу данных. Сделать 10 мест для операторов и для каждого отдельно прогонять все функции. А если место свободно то else и всё. Тогда и операторов через бота в БД закидывать можно, и сообщения будут меняться.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы