Python Telegram Bot не отвечает, как задумано.Как мне заставить это работать с библиотекой sqllite? - PullRequest
0 голосов
/ 01 февраля 2019

Я пытаюсь создать бота-телеграмму, который будет хранить цитируемые сообщения, используя триггерное слово типа "/ bot store this" или что-то в этом роде.Мой бот настроен на 4 файла.

  1. Файл бота, содержащий ключ API бота, метод get_updates и метод send_message
  2. Файл сервера, который идентифицирует все мои переменныевызвав метод get_updates из файла 1
  3. Файл действий (в этом моя проблема), который вызывает метод send_message с использованием переменных из файла 2.
  4. Файл базы данных, в котором запущен sqllite, который устанавливает, добавление элементов, удаление элементов и получение элементов из этой базы данных.

Я получил вдохновение для основной части кода из этого репозитория А для базы данных я получил вдохновение от это сообщение в блоге

Способ, которым я создаю команды, находится в третьем файле.Сначала я попробовал это двумя способами с помощью оператора if:

> if msg == '/bot add':
>         try:
>             db.add_item(db_entry)
>             items = db.get_items()
>             msg = "\n".join(items)
>             bot.send_message(botresponse, chat_id)
>             bot.send_message(msg, groupid)
>         except KeyError:
>             pass
>         return items
> if msg == '/bot read':
>         try:
>             items = db.get_items()
>             bot.send_message(items, chat_id)
>         except KeyError:
>             pass

Цель состоит в том, чтобы взять команду '/ bot add' и заставить бота добавить цитируемое сообщение в базу данных.Это здорово, и я действительно могу заставить эту часть работать!К сожалению, оператор if на самом деле не работает должным образом, потому что если команда говорит «/ bot read», то бот ничего не возвращает обратно в групповой чат.Есть какая-то проблема, когда он делает это с вызовом «bot.send_message» в первом операторе if, но он никогда не обращается ко второму оператору if независимо от того, что это за команда.

Поэтому я попытался сновано на этот раз с помощью функции переключения:

def botadd(update_id, botresponse, chat_id, db_entry):
    db.add_item(db_entry)
    items = db.get_items()
    msg = "\n".join(items)
    bot.send_message(botresponse, chat_id)
    bot.send_message(msg, chat_id)
    bot.get_updates(offset=update_id)

def botread(chat_id):
    items = db.get_items()
    msg = "\n".join(items)
    bot.send_message(msg, chat_id)

def botswitch(update_id, msg, quoted_message, user, date, botresponse, chat_id, from_):
    db_entry = user + " on " + date + ": " + '"{}"'.format(quoted_message)
    switcher = {
        "/bot add": botadd(update_id, botresponse, chat_id, db_entry),
        "/bot read": botread(chat_id)
    }

    func = switcher.get(msg, lambda:"invalid command: {}".format(msg))
    print(func())

Похоже, что это аналогичное поведение.Бот добавит сообщение в кавычках в базу данных, но теперь он застревает в цикле, где затем цитирует исходное сообщение в кавычках и добавляет его в базу данных.Он будет бесконечно продолжать цитировать цитату и добавлять ее в базу данных.Наконец, если команда «/ bot read», она никогда не возвращает значения в базе данных.

Я действительно в растерянности, так как я не уверен, где я ошибся.Мог бы действительно использовать некоторые советы.

Спасибо

...