Ошибка AttributeError: 'str' object has no attribute 'type'
Делаю телеграмм бота для планирования задач на телеботе. Пытался реализовать удаление задачи с перекодирование по utf - 8, но после получения названия задачи, бот не видит ее в словаре, а если не использовать utf-8 то выдает ошибку return {"type": self.type, AttributeError: 'str' object has no attribute 'type'
Вот полный код бота, подскажите пожалуйста, что не так:
import telebot
from datetime import datetime, timedelta
bot = telebot.TeleBot('тут токен')
tasks = {}
@bot.message_handler(commands=['start'])
def main_menu(message):
markup = telebot.types.ReplyKeyboardMarkup(resize_keyboard=True)
markup.add('Список задач', 'Добавить задачу', 'Настройки', 'О боте')
bot.send_message(message.chat.id, 'Выберите действие:', reply_markup=markup)
@bot.message_handler(func=lambda message: message.text == 'Список задач')
def task_list(message):
markup = telebot.types.ReplyKeyboardMarkup(resize_keyboard=True)
markup.add('Задачи на сегодня', 'Задачи на неделю', 'Все задачи', 'Удалить задачу', 'Назад')
bot.send_message(message.chat.id, 'Выберите период:', reply_markup=markup)
@bot.message_handler(func=lambda message: message.text == 'Удалить задачу')
def delete_task(message):
markup = telebot.types.ReplyKeyboardMarkup(resize_keyboard=True)
markup.add(*tasks.keys())
markup.add('Назад')
bot.send_message(message.chat.id, 'Выберите задачу для удаления:', reply_markup=markup)
@bot.message_handler(func=lambda message: message.text in tasks.keys())
def delete_task_confirm(message):
task_name = message.text
markup = telebot.types.ReplyKeyboardMarkup(resize_keyboard=True)
markup.add('Да', 'Нет')
bot.send_message(message.chat.id, f'Вы действительно хотите удалить задачу "{task_name}"?', reply_markup=markup)
@bot.message_handler(func=lambda message: message.text == 'Да')
def delete_task_final(message):
task_name = message.text
if task_name in tasks:
del tasks[task_name] #тут возникает проблема
bot.send_message(message.chat.id, 'Задача удалена.')
else:
bot.send_message(message.chat.id, 'Задачи под названием', task_name, 'нет')
@bot.message_handler(func=lambda message: message.text == 'Нет')
def back_to_main_menu(message):
main_menu(message)
@bot.message_handler(func=lambda message: message.text == 'Добавить задачу')
def add_task(message):
markup = telebot.types.ReplyKeyboardMarkup(resize_keyboard=True)
markup.add('На сегодня', 'На завтра', 'Выбрать дату', 'Назад')
bot.send_message(message.chat.id, 'Выберите дату:', reply_markup=markup)
@bot.message_handler(func=lambda message: message.text == 'Настройки')
def settings(message):
markup = telebot.types.ReplyKeyboardMarkup(resize_keyboard=True)
markup.add('Выбрать язык(в разработке)', 'Назад')
bot.send_message(message.chat.id, 'Выберите действие:', reply_markup=markup)
@bot.message_handler(func=lambda message: message.text == 'О боте')
def about_bot(message):
bot.send_message(message.chat.id, 'Этот бот поможет вам управлять своими задачами')
@bot.message_handler(func=lambda message: message.text == 'Задачи на сегодня')
def tasks_today(message):
today = datetime.today()
tasks_list = [task for task in tasks.values() if task['date'] == today.strftime('%d.%m.%Y')]
if tasks_list:
msg = 'Задачи на сегодня:\n'
for task in tasks_list:
msg += f'- {task["name"]} ({task["time"]})\n'
bot.send_message(message.chat.id, msg)
else:
bot.send_message(message.chat.id, 'На сегодня нет задач.')
@bot.message_handler(func=lambda message: message.text == 'Задачи на неделю')
def tasks_week(message):
today = datetime.today()
week_start = today - timedelta(days=today.weekday())
week_end = week_start + timedelta(days=6)
tasks_list = [task for task in tasks.values() if week_start <= datetime.strptime(task['date'], '%d.%m.%Y') <= week_end]
if tasks_list:
msg = 'Задачи на эту неделю:\n'
for task in tasks_list:
msg += f'- {task["name"]} ({task["time"]}) - {task["date"]}\n'
bot.send_message(message.chat.id, msg)
else:
bot.send_message(message.chat.id, 'На эту неделю нет задач.')
@bot.message_handler(func=lambda message: message.text == 'Все задачи')
def all_tasks(message):
tasks_list = [task for task in tasks.values()]
if tasks_list:
msg = 'Все задачи:\n'
for task in tasks_list:
msg += f'- {task["name"]} ({task["time"]}) - {task["date"]}\n'
bot.send_message(message.chat.id, msg)
else:
bot.send_message(message.chat.id, 'Нет задач.')
@bot.message_handler(func=lambda message: message.text == 'На сегодня')
def add_task_today(message):
bot.send_message(message.chat.id, 'Введите название задачи:')
bot.register_next_step_handler(message, add_task_today_time)
def add_task_today_time(message):
task_name = message.text
bot.send_message(message.chat.id, 'Введите время для задачи в формате 00:00:')
bot.register_next_step_handler(message, add_task_today_save, task_name)
def add_task_today_save(message, task_name):
task_time = message.text
today = datetime.today()
task = {'name': task_name, 'time': task_time, 'date': today.strftime('%d.%m.%Y')}
tasks[task['name']] = task
bot.send_message(message.chat.id, 'Задача добавлена.')
@bot.message_handler(func=lambda message: message.text == 'На завтра')
def add_task_tomorrow(message):
bot.send_message(message.chat.id, 'Введите название задачи:')
bot.register_next_step_handler(message, add_task_tomorrow_time)
def add_task_tomorrow_time(message):
task_name = message.text
bot.send_message(message.chat.id, 'Введите время для задачи в формате 00:00:')
bot.register_next_step_handler(message, add_task_tomorrow_save, task_name)
def add_task_tomorrow_save(message, task_name):
task_time = message.text
tomorrow = datetime.today() + timedelta(days=1)
task = {'name': task_name, 'time': task_time, 'date': tomorrow.strftime('%d.%m.%Y')}
tasks[task['name']] = task
bot.send_message(message.chat.id, 'Задача добавлена.')
@bot.message_handler(func=lambda message: message.text == 'Выбрать дату')
def add_task_date(message):
bot.send_message(message.chat.id, 'Введите дату в формате 01.01.2001:')
bot.register_next_step_handler(message, add_task_date_time)
def add_task_date_time(message):
task_date = message.text
bot.send_message(message.chat.id, 'Введите название задачи:')
bot.register_next_step_handler(message, add_task_date_save, task_date)
def add_task_date_save(message, task_date):
task_name = message.text
bot.send_message(message.chat.id, 'Введите время для задачи в формате 00:00:')
bot.register_next_step_handler(message, add_task_date_final_save, task_name, task_date)
def add_task_date_final_save(message, task_name, task_date):
task_time = message.text
task = {'name': task_name, 'time': task_time, 'date': task_date}
tasks[task['name']] = task
bot.send_message(message.chat.id, 'Задача добавлена.')
@bot.message_handler(func=lambda message: message.text == 'Выбрать язык(в разработке)')
def change_language(message):
markup = telebot.types.ReplyKeyboardMarkup(resize_keyboard=True)
markup.add('Английский', 'Русский')
markup.add('Назад')
bot.send_message(message.chat.id, 'Выберите язык:', reply_markup=markup)
@bot.message_handler(func=lambda message: message.text == 'Назад')
def back_to_main_menu(message):
main_menu(message)
bot.polling()
И да, простите за такой ужасный код Полный текст ошибки:
Traceback (most recent call last):
File "c:\Users\user1\OneDrive\������� ����\bot.py", line 182, in <module>
bot.polling()
File "C:\Users\user1\AppData\Roaming\Python\Python38\site-packages\telebot\__init__.py", line 1104, in polling
self.__threaded_polling(non_stop=non_stop, interval=interval, timeout=timeout, long_polling_timeout=long_polling_timeout,
File "C:\Users\user1\AppData\Roaming\Python\Python38\site-packages\telebot\__init__.py", line 1179, in __threaded_polling
raise e
File "C:\Users\user1\AppData\Roaming\Python\Python38\site-packages\telebot\__init__.py", line 1141, in __threaded_polling
self.worker_pool.raise_exceptions()
File "C:\Users\user1\AppData\Roaming\Python\Python38\site-packages\telebot\util.py", line 149, in raise_exceptions
raise self.exception_info
File "C:\Users\user1\AppData\Roaming\Python\Python38\site-packages\telebot\util.py", line 92, in run
task(*args, **kwargs)
File "C:\Users\user1\AppData\Roaming\Python\Python38\site-packages\telebot\__init__.py", line 7868, in _run_middlewares_and_handler
result = handler['function'](message)
File "c:\Users\user1\OneDrive\������� ����\bot.py", line 46, in delete_task_final
bot.send_message(message.chat.id, '������ ��� ���������', task_name, '���')
File "C:\Users\user1\AppData\Roaming\Python\Python38\site-packages\telebot\__init__.py", line 1673, in send_message
apihelper.send_message(
File "C:\Users\user1\AppData\Roaming\Python\Python38\site-packages\telebot\apihelper.py", line 257, in send_message
payload['entities'] = json.dumps(types.MessageEntity.to_list_of_dicts(entities))
File "C:\Users\user1\AppData\Roaming\Python\Python38\site-packages\telebot\types.py", line 1619, in to_list_of_dicts
res.append(MessageEntity.to_dict(e))
File "C:\Users\user1\AppData\Roaming\Python\Python38\site-packages\telebot\types.py", line 1643, in to_dict
return {"type": self.type,
AttributeError: 'str' object has no attribute 'type' ```