Я пытаюсь создать бота-телеграмму, который будет хранить цитируемые сообщения, используя триггерное слово типа "/ bot store this" или что-то в этом роде.Мой бот настроен на 4 файла.
- Файл бота, содержащий ключ API бота, метод get_updates и метод send_message
- Файл сервера, который идентифицирует все мои переменныевызвав метод get_updates из файла 1
- Файл действий (в этом моя проблема), который вызывает метод send_message с использованием переменных из файла 2.
- Файл базы данных, в котором запущен 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», она никогда не возвращает значения в базе данных.
Я действительно в растерянности, так как я не уверен, где я ошибся.Мог бы действительно использовать некоторые советы.
Спасибо