Top.Mail.Ru
Ответы

Проблема python на библиотеке telebot

Здравствуйте, я делал бота для telegram на telebot и возникла такая ошибка
вот код:

12345678910111213141516171819202122232425262728293031323334353637383940
 @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.

Вот как это можно сделать:

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
 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. Это будет немного сложнее, чем просто хранение данных в файле, но позволит лучше управлять данными и обеспечить их сохранность даже в случае сбоев или ошибок в программе.

Удаленный ответ Ответ удалён