Проблема python на библиотеке telebot
Здравствуйте, я делал бота для telegram на telebot и возникла такая ошибка
вот код:
@bot.message_handler(commands=['add_rule_1'])
def add_rule_1(message):
chat_id = message.chat.id
# Проверяем, что после команды есть значения
if len(message.text.split()) > 1:
# Получаем значения после команды
values = message.text.split()[1:]
try:
# Разделяем значения на число, слово и ответ
count, word, response = values
# Преобразуем число в целое число
count = int(count)
# Сохраняем правило в словаре
rules[chat_id] = {'count': count, 'word': word, 'response': response}
bot.reply_to(message, 'Правило успешно добавлено.')
except ValueError:
bot.reply_to(message, 'Ошибка: неверный формат входных данных.')
else:
bot.reply_to(message, 'Ошибка: необходимо указать значения после команды.')
# Обработчик всех входящих сообщений
@bot.message_handler(func=lambda message: True)
def handle_message(message):
chat_id = message.chat.id
# Проверяем, есть ли для текущего чата правило
if chat_id in rules:
rule = rules[chat_id]
# Проверяем, совпадает ли слово в сообщении с указанным пользователем словом
if rule['word'] in message.text:
# Отправляем ответ указанное число раз
for _ in range(rule['count']):
bot.send_message(chat_id, rule['response'])
при перезапуске все рулы пропадают. Как сделать так, чтобы они не пропадали, а хранились, например, в каком то файле. Если кто то поможет, буду очень благодарен. Спасибо заранее!
Здравствуйте!
Проблема в данном случае заключается в том, что все правила хранятся в оперативной памяти, и при перезапуске программы они стираются. Чтобы это исправить, можно хранить эти правила в постоянной памяти, например, в файле. Для этого можно использовать модуль json в Python, который позволяет сохранять и загружать структуры данных в формате JSON.
Вот как это можно сделать:
import json
rules = {}
# Загружаем правила из файла при запуске бота
try:
with open('rules.json', 'r') as f:
rules = json.load(f)
except FileNotFoundError:
pass # Файл с правилами ещё не создан
@bot.message_handler(commands=['add_rule_1'])
def add_rule_1(message):
chat_id = message.chat.id
if len(message.text.split()) > 1:
values = message.text.split()[1:]
try:
count, word, response = values
count = int(count)
rules[chat_id] = {'count': count, 'word': word, 'response': response}
# Сохраняем правила в файл после каждого изменения
with open('rules.json', 'w') as f:
json.dump(rules, f)
bot.reply_to(message, 'Правило успешно добавлено.')
except ValueError:
bot.reply_to(message, 'Ошибка: неверный формат входных данных.')
else:
bot.reply_to(message, 'Ошибка: необходимо указать значения после команды.')
@bot.message_handler(func=lambda message: True)
def handle_message(message):
chat_id = message.chat.id
if chat_id in rules:
rule = rules[chat_id]
if rule['word'] in message.text:
for _ in range(rule['count']):
bot.send_message(chat_id, rule['response'])
Теперь, когда вы добавите новое правило, оно будет сохранено в файл rules.json и не будет пропадать при перезапуске бота. Пожалуйста, убедитесь, что ваша программа имеет права на чтение и запись в файл rules.json.
Если вы хотите хранить данные более безопасно и надежно, стоит рассмотреть использование базы данных, например, SQLite. Это будет немного сложнее, чем просто хранение данных в файле, но позволит лучше управлять данными и обеспечить их сохранность даже в случае сбоев или ошибок в программе.