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

Как сделать бота поддержки с при помощи библиотеки telebot?

Совсем недавно начала изучать создание ботов. Нужно сделать так, что бы то что человек пишет в бота присылалось в группу и наоборот, то что отвечаю в группе присылаалось обратно пользователю
Попыталась сделать что то по типу такого (код ниже), но как не странно не получилось. Долго пыталась найти в интернете как сделать такого бота - ничего не нашла

import telebot
from telebot import types
bot = telebot.TeleBot('токен')
@bot.message_handler(commands=['support'])
def support(message):
    bot.send_message(message.chat.id, 'Поддержка приветствует тебя! Зачем ты здесь?')
    while True:
        @bot.message_handler()
        def question(message):
            bot.send_message(айди группы, f'Новое обращение в поддержку от @{message.from_user.username} / {message.from_user.id}\n\n{message.text}')
            @bot.message_handler()
            def ans(message):
                bot.send_message(message.message.chat.id, message.text)


p.s код перестаёт работать после отправки "Поддержка приветствует тебя! Зачем ты здесь?", при этом ошибок никаких не выдаёт
вероятно всего код выглядит очень странно и нелепо, но я проавда не знаю как такое сделать
  • Вопрос задан
  • 106 просмотров
Подписаться 1 Простой 4 комментария
Пригласить эксперта
Ответы на вопрос 2
@Proxor1
Начинающий программист
import telebot
from telebot import types

bot = telebot.TeleBot('токен')


@bot.message_handler(commands=['support'])
def support(message):
    msg = bot.send_message(message.chat.id,
                           'Поддержка приветствует тебя! Зачем ты здесь?')  # тут мы задаём вопрос человеку
    bot.register_next_step_handler(msg,
                                   send_moderators)  # тут мы ожидаем ответа и как получим запускаем функцию send_moderators


def send_moderators(message):
    msg = bot.send_message(chat_id="айди группы модератора",
                           text=f'Новое обращение в поддержку от @{message.from_user.username} / {message.from_user.id}\n\n{message.text}')  # тут бот оправляет в чат модератора
    bot.register_next_step_handler(msg, ans)  # тут мы ожидаем ответа модератора и как получим запускаем функцию ans


def ans(message):
    bot.send_message(chat_id="айди группы куда должен прийти ответ от модератора", text=message.text)
Ответ написан
Vindicar
@Vindicar
RTFM!
Не пытайся объявлять обработчики событий динамически, внутри других обработчиков. Это не будет работать так, как ты это ожидаешь!
А для начала определись с ответом на вопрос: если есть несколько одновременных обращений, то как бот поймёт, кому отвечает оператор?

Один из вариантов

Оператор должен явно отвечать (через соотв. пункт меню) на сообщение бота.
Тогда бот должен хранить список вида "id сообщения в группе, id пользователя. Можешь хранить в БД или ином хранилище (БД в конечном итоге будет проще всего).

В этом случае логика бота по обработке сообщения будет такая:
1. Если сообщение в личке: отправить копию сообщения в группу, сохранить в БД id пользователя и id отправленного ботом сообщения.
2. Если сообщение в группе, и это ответ: поискать в БД id сообщения, на которое ответ. Если id найдено - извлечь соответствующее id пользователя, отправить ему копию сообщения.
3. Если id не найдено: что должен сделать бот?
4. Если сообщение в группе, но это не ответ: что должен сделать бот?

Можно также прикреплять к записи в БД дату, чтобы время от времени можно было выкидывать из БД старые сообщения. Это уже упражнение для читателя.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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