Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Помогите решить проблему в телеграмм боте , не добавляется задание.

АСВ Альянс Ученик (126), на голосовании 3 месяца назад
 import json 
import telebot
from telebot.handler_backends import State, StatesGroup
bot = telebot.TeleBot("7224536180:AAEdGh-v7uFBlonXRd2yYrjP98fP3xRcxjk")

class UserStates(StatesGroup):
waiting_for_task = State()
waiting_for_edit_task = State()

def load_data():
try:
with open('family_tasks.json', 'r', encoding='utf-8') as file:
data = json.load(file)
print("Data loaded successfully:", data)
return data
except FileNotFoundError:
print("File not found, returning empty dictionary")
return {}
except json.JSONDecodeError:
print("Error decoding JSON file, returning empty dictionary")
return {}
except Exception as e:
print(f"Unexpected error: {e}")
return {}

def save_data(data):
try:
with open('family_tasks.json', 'w', encoding='utf-8') as file:
json.dump(data, file, ensure_ascii=False, indent=4)
print("Data saved successfully")
except Exception as e:
print(f"Error saving data: {e}")


@bot.message_handler(commands=['start'])
def send_welcome(message):
bot.send_message(message.chat.id, "Привет! Я помогу вам управлять семейными делами.\n\n"
"Чтобы добавить задание, используйте команду /add\n"
"Чтобы выполнить задание, используйте команду /done\n"
"Чтобы посмотреть статистику, используйте команду /stats")

@bot.message_handler(commands=['add'])
def add_task(message):
print("Add task command received!")
bot.send_message(message.chat.id, "Введите задание:")
bot.set_state(message.chat.id, UserStates.waiting_for_task, message.chat.id)

@bot.message_handler(state=UserStates.waiting_for_task)
def process_task(message):
print("Processing task...")
task = message.text
user_id = message.chat.id
data = load_data()
data[user_id] = data.get(user_id, {'tasks': [], 'stars': 0})
data[user_id]['tasks'].append({"task": task, "status": "Не выполнено"})
save_data(data)
bot.send_message(message.chat.id, "Задание добавлено")
bot.delete_state(message.chat.id)

@bot.message_handler(commands=['done'])
def done(message):
user_data = load_data()
chat_id = message.chat.id
if chat_id in user_data and user_data[chat_id]['tasks']:
completed_task = user_data[chat_id]['tasks'].pop(0)
user_data[chat_id]['stars'] += 1
save_data(user_data)
bot.send_message(
message.chat.id,
f"Задание '{completed_task['task']}' выполнено! "
f"У вас теперь {user_data[chat_id]['stars']} звёзд."
)
else:
bot.send_message(message.chat.id, "У вас нет активных заданий.")

@bot.message_handler(commands=['stats'])
def show_stats(message):
user_data = load_data()
chat_id = message.chat.id
if chat_id in user_data:
tasks = [task['task'] for task in user_data[chat_id]['tasks']]
stars = user_data[chat_id]['stars']
bot.send_message(
message.chat.id,
f"Активные задания: {tasks}\nКоличество звёзд: {stars}"
)
else:
bot.send_message(message.chat.id, "Статистика отсутствует.")

bot.polling(none_stop=True)
Голосование за лучший ответ
Деньги чистое зло Гуру (2624) 4 месяца назад
Спасибо, что предоставили код. Я проанализировал его и не вижу явных ошибок в логике добавления задания. Однако, давайте рассмотрим несколько моментов, которые могут помочь решить проблему:

1. Проверка сохранения данных:
После добавления задания, попробуйте вручную проверить файл 'family_tasks.json'. Убедитесь, что он создается и содержит корректные данные.

2. Отладочные сообщения:
Добавьте больше отладочных сообщений в функцию `process_task`, чтобы убедиться, что все этапы выполняются корректно:

```python
@bot.message_handler(state=UserStates.waiting_for_task)
def process_task(message):
print("Processing task...")
task = message.text
user_id = str(message.chat.id) # Преобразуем в строку
print(f"User ID: {user_id}")
data = load_data()
print(f"Loaded data: {data}")
if user_id not in data:
data[user_id] = {'tasks': [], 'stars': 0}
data[user_id]['tasks'].append({"task": task, "status": "Не выполнено"})
print(f"Updated data: {data}")
save_data(data)
bot.send_message(message.chat.id, "Задание добавлено")
bot.delete_state(message.chat.id, message.chat.id)
```

3. Проверка типов данных:
Убедитесь, что `user_id` всегда строка, так как JSON использует строковые ключи.

4. Обработка исключений:
Добавьте обработку исключений в функцию `process_task`:

```python
@bot.message_handler(state=UserStates.waiting_for_task)
def process_task(message):
try:
# ... (ваш существующий код) ...
except Exception as e:
print(f"Error in process_task: {e}")
bot.send_message(message.chat.id, "Произошла ошибка при добавлении задания. Попробуйте еще раз.")
finally:
bot.delete_state(message.chat.id, message.chat.id)
```

5. Проверка состояния:
Убедитесь, что состояние корректно устанавливается и удаляется:

```python
@bot.message_handler(commands=['add'])
def add_task(message):
print("Add task command received!")
bot.send_message(message.chat.id, "Введите задание:")
bot.set_state(message.chat.id, UserStates.waiting_for_task, message.chat.id)
print(f"State set for user {message.chat.id}")
```

6. Проверка версии библиотеки:
Убедитесь, что вы используете последнюю версию `pyTelegramBotAPI`.

Попробуйте внести эти изменения и запустить бота снова. Если проблема сохраняется, проверьте консольный вывод на наличие ошибок или необычного поведения. Это поможет лучше понять, на каком этапе возникает проблема.
АСВ АльянсУченик (126) 4 месяца назад
Спасибо вам)
Похожие вопросы