Telegram Bot не запускается
При вводе команды python3 bot.py --token [TOKEN]
выдает следующую ошибку
Traceback (most recent call last):
File "bot.py", line 180, in <module>
main(token)
File "bot.py", line 153, in main
updater = Updater(token)
File "/home/kirillmusk/.local/lib/python3.8/site-packages/telegram/ext/updater.py", line 279, in __init__
self.bot = ExtBot(
File "/home/kirillmusk/.local/lib/python3.8/site-packages/telegram/ext/extbot.py", line 99, in __init__
super().__init__(
File "/home/kirillmusk/.local/lib/python3.8/site-packages/telegram/bot.py", line 194, in __init__
self.token = self._validate_token(token)
File "/home/kirillmusk/.local/lib/python3.8/site-packages/telegram/bot.py", line 358, in _validate_token
raise InvalidToken()
telegram.error.InvalidToken: Invalid token
Вот код
import Time
import test_time
import test_conversation
import conversation
from datetime import datetime, date
import time
import threading
from telegram.ext import Updater, CommandHandler, MessageHandler, Filters
import logging
import sys
# Логирование.
logging.basicConfig(format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
level=logging.INFO)
logger = logging.getLogger(__name__)
task_managers = dict()
class ReminderHandler():
def __init__(self):
self.actual_date = date.today()
self.today_reminder_sent = False
self.tomorrow_reminder_sent = False
# Метод для отправки напоминаний.
def update(self, updater):
hour = datetime.now().hour
# Проверяем, сменился ли день.
if date.today() > self.actual_date:
self.actual_date = date.today()
self.today_reminder_sent = False
self.tomorrow_reminder_sent = False
filter_tasks()
# Проверяем, нужно ли отправить напоминание о сегодняшних задачах.
if self.today_reminder_sent is False and hour >= 9:
self.today_reminder_sent = True
for chat_id in task_managers.keys():
send_today_tasks(updater, chat_id)
# Проверяем, нужно ли отправить напоминание о завтрашних задачах.
if self.tomorrow_reminder_sent is False and hour >= 20:
self.tomorrow_reminder_sent = True
for chat_id in task_managers.keys():
send_tomorrow_tasks(updater, chat_id)
def start(bot, update):
task_managers[update.effective_chat.id] = conversation.TaskManager()
update.message.reply_text("Привет!")
# Функция для ответа на сообщение.
def reply_message(bot, update):
task = conversation.create_task(update.message.text.lower())
if task is None:
update.message.reply_text('Не могу распознать задачу.')
else:
task_managers[update.effective_chat.id].add_task(task)
update.message.reply_text('Задача {} добавлена.'.format(task.get_task()))
# Функция для вывода всех задач.
def tasks(bot, update):
tasks_list = task_managers[update.effective_chat.id].get_all_tasks()
all_tasks = '\n'.join(map(str, tasks_list))
update.message.reply_text(all_tasks if len(all_tasks) > 0 else "Нет запланированных задач.")
# Функция для вывода задач на сегодня.
def tasks_for_today(bot, update):
tasks_list = task_managers[update.effective_chat.id].get_tasks_for_today()
today_tasks = '\n'.join(map(str, tasks_list))
update.message.reply_text(today_tasks if len(today_tasks) > 0 else "На сегодня ничего не запланировано.")
# Функция для вывода задач на завтра.
def tasks_for_tomorrow(bot, update):
tasks_list = task_managers[update.effective_chat.id].get_tasks_for_tomorrow()
tomorrow_tasks = '\n'.join(map(str, tasks_list))
update.message.reply_text(tomorrow_tasks if len(tomorrow_tasks) > 0 else "На завтра ничего не запланировано.")
# Функция для отправки задач на сегодня.
def send_today_tasks(updater, chat_id):
tasks_list = task_managers[chat_id].get_tasks_for_today()
today_tasks = '\n'.join(map(str, tasks_list))
updater.bot.send_message(chat_id, today_tasks if len(today_tasks) > 0 else "На сегодня ничего не запланировано.")
# Функция для отправки задач на завтра.
def send_tomorrow_tasks(updater, chat_id):
tasks_list = task_managers[chat_id].get_tasks_for_tomorrow()
tomorrow_tasks = '\n'.join(map(str, tasks_list))
updater.bot.send_message(chat_id, tomorrow_tasks if len(tomorrow_tasks) > 0 else
"На завтра ничего не запланировано.")
# Функция для удаления просроченных задач.
def filter_tasks():
for task_manager in task_managers.values():
task_manager.remove_outdated_tasks()
# Функция для обновления.
def run_updater(updater):
reminder_handler = ReminderHandler()
while True:
reminder_handler.update(updater)
time.sleep(60)
# Функция для запуска потока обновления данных.
def start_updater(updater):
t = threading.Thread(target=run_updater, args=(updater,))
t.daemon = True
t.start()
# Функция для удобного отображения ошибок.
def error(bot, update, error):
logger.warning('Update "%s" caused error "%s"', update, error)
# Функция для вывода подсказки по использованию.
def show_help():
print('Использование бота: python bot.py --token [your_token]\n'
'Запуск тестов: python bot.py --test')
def bot_help(bot, update):
update.message.reply_text('Доступные команды:\n''/start - начало работы с ботом;\n'
'/help - вывод доступных команд;\n''/задачи - вывод всех запланированных задач;\n'
'/сегодня - вывод задач на сегодня;\n''/завтра - вывод задач на завтра.\n')
# Функция для получения токена.
def get_token(list_of_args):
if len(list_of_args) == 2:
token = list_of_args[1]
else:
show_help()
exit()
return token
def main(token):
updater = Updater(token)
dp = updater.dispatcher
dp.add_handler(MessageHandler(Filters.text, reply_message))
dp.add_handler(CommandHandler("/start", start))
dp.add_handler(CommandHandler("help", bot_help))
dp.add_handler(CommandHandler("задачи", tasks))
dp.add_handler(CommandHandler("сегодня", tasks_for_today))
dp.add_handler(CommandHandler("завтра", tasks_for_tomorrow))
dp.add_error_handler(error)
start_updater(updater)
updater.start_polling()
updater.idle()
if __name__ == '__main__':
if len(sys.argv) < 2:
show_help()
exit()
if sys.argv[1] == '--test':
test_time.run_tests()
test_conversation.run_tests()
elif sys.argv[1] == '--token':
token = get_token(sys.argv[1:])
main(token)
else:
exit()
Забавно то, что если я не буду делать пробел между --token и [TOKEN] ничего не произойдет. Бот не будет реагировать на команды, но и в терминале ошибок не будетю