Ошибка telebot с токеном

Рейтинг: 0Ответов: 1Опубликовано: 18.05.2023
import telebot
from telebot import types
import time
import requests
import sqlite3
import datetime
import threading
import pytz

moscow_tz = pytz.timezone('Europe/Moscow')

# Пример преобразования UTC в МСК
now_utc = datetime.datetime.utcnow()
now_msk = now_utc.replace(tzinfo=pytz.utc).astimezone(moscow_tz)



api_key = "xxx"
bot = telebot.TeleBot('xxx')

reminder = {}
users_dict = {}

def save_user_data_to_file(chat_id, name, age, vkontakte, mobilenumber, info, birthday):
    with open("users.txt", "a", encoding='utf-8') as f:
        f.write(f"ID: {chat_id}, Имя: {name}, Возраст: {age}, Дата рождения: {birthday}, Ссылка на VK: {vkontakte}, Номер телефона: {mobilenumber},О себе: {info}\n")

@bot.message_handler(commands=['start'])
def start_message(message):
    video = open('keyboard.MP4', 'rb')
    bot.send_message(message.chat.id, 'Бот запущен!')

    keyboard = telebot.types.ReplyKeyboardMarkup(True)
    keyboard.row('моя визитка 💼', 'telegram-info')
    keyboard.row('погода ⛅️', 'поиск фотографий 🌇')
    keyboard.row('заметки 🔥', 'напоминания 🔔')
    keyboard.row('/help ❓')
    bot.send_video(message.chat.id, video, caption='Теперь можешь воспользоваться экранной клавиатурой.\nПриятного пользования!', reply_markup=keyboard)

@bot.message_handler(commands=['reminder'])
def reminder_message(message):
    bot.send_message(message.chat.id, "Введите напоминание:")
    bot.register_next_step_handler(message, set_reminder_name)
def set_reminder_name(message):
    user_data = {}
    user_data[message.chat.id] = {'reminder_name': message.text}
    bot.send_message(message.chat.id, text='Введите дату напоминания (в формате ДД:ММ:ГГГГ чч:мм)\nПример: 01.01.2023 00:00', parse_mode=None)
    bot.register_next_step_handler(message, reminder_set, user_data=user_data)
def reminder_set(message, user_data):
    try:
        moscow_tz = pytz.timezone('Europe/Moscow')
        reminder_time = datetime.datetime.strptime(message.text, '%d.%m.%Y %H:%M')
        reminder_time = moscow_tz.localize(reminder_time)
        now = datetime.datetime.now(moscow_tz)
        delta = reminder_time - now
        if delta.total_seconds() <= 0:
            bot.send_message(message.chat.id, 'Вы ввели прошедшую дату, попробуйте ещё раз.')
            bot.register_next_step_handler(message, reminder_set, user_data=user_data)
        else:
            reminder_name = user_data[message.chat.id]['reminder_name']
            reminder_time_formatted = reminder_time.strftime('%d.%m.%Y %H:%M')
            bot.send_message(message.chat.id, f'Напоминание "{reminder_name}" установлено на {reminder_time_formatted}')
            reminder_timer = threading.Timer(delta.total_seconds(), send_reminder, [message.chat.id, reminder_name, message])
            reminder_timer.start()

    except ValueError:
        bot.send_message(message.chat.id, 'Вы ввели дату в неверном формате.')
        bot.register_next_step_handler(message, reminder_set, user_data=user_data)

def send_reminder(chat_id, reminder_name, message):
    gif = open('lampa.gif', 'rb')
    bot.send_animation(chat_id, gif, caption='Время получить ваше напоминание:\n"{}"'.format(reminder_name))

@bot.message_handler(commands=['cloud'])
def startt_message(message):
    bot.send_message(message.chat.id, 'Давай создадим тебе твою персональную карточку с твоими данными.\nЯ тебе буду задавать вопросы, а ты на них должен будешь отвечать.\nПриступим.')
    time.sleep(1.5)
    bot.send_message(message.chat.id, 'Напиши своё имя: ')
    bot.register_next_step_handler(message, get_name)

def get_name(message):
    users_dict[str(message.chat.id)] = {"name": message.text}
    chat_id = str(message.chat.id)
    bot.send_message(chat_id, f"Будем друзьями, {users_dict[chat_id]['name']}!\nНапиши мне свой возраст:")
    bot.register_next_step_handler(message, get_age)

def get_age(message):
    users_dict[str(message.chat.id)]["age"] = message.text
    chat_id = str(message.chat.id)
    bot.send_message(chat_id, f"Тебе {users_dict[chat_id]['age']} лет.\nНапиши свой номер телефона, чтобы мы всегда с тобой были на связи:")
    bot.register_next_step_handler(message, get_mobilenumber)

def get_mobilenumber(message):
    chat_id = str(message.chat.id)
    users_dict[str(message.chat.id)]["mobilenumber"] = message.text
    bot.send_message(chat_id, f"Запомнил, твой номер: {users_dict[chat_id]['mobilenumber']}\nТеперь напиши мне когда ты родился:\nВ любом удобном для тебя формате.")
    bot.register_next_step_handler(message, get_birthday)

def get_birthday(message):
    chat_id = str(message.chat.id)
    users_dict[str(message.chat.id)]["birthday"] = message.text
    bot.send_message(chat_id, f"Дата твоего рождения: {users_dict[chat_id]['birthday']}\nИнтересно, сколько друзей тебя поздравляли бы без напоминания в вк?\nПрости, не будем о грустном.\nА теперь скинь ссылку на свою страницу VK, возможно когда-нибудь добавлю тебя в друзья.")
    bot.register_next_step_handler(message, get_vkontakte)

def get_vkontakte(message):
    users_dict[str(message.chat.id)]['vkontakte'] = message.text
    chat_id = str(message.chat.id)
    bot.send_message(chat_id, f"Твоя страница VK: {users_dict[chat_id]['vkontakte']}\nНапиши немного информации о себе, это может быть, всё, что угодно.")
    bot.register_next_step_handler(message, get_info)

def get_info(message):
    chat_id = str(message.chat.id)
    users_dict[chat_id]["info"] = message.text
    save_user_data_to_file(chat_id, users_dict[chat_id]['name'], users_dict[chat_id]['age'], users_dict[chat_id]['vkontakte'], users_dict[chat_id]['mobilenumber'], users_dict[chat_id]['info'], users_dict[chat_id]['birthday'])
    bot.send_message(chat_id, f"Спасибо за информацию.\nДанные были занесены в мою базу данных. ✅\nИмя: {users_dict[chat_id]['name']}\nВозраст: {users_dict[chat_id]['age']}\nДата рождения: {users_dict[chat_id]['birthday']}\nНомер телефона: {users_dict[chat_id]['mobilenumber']}\nVK: {users_dict[chat_id]['vkontakte']}\nО себе: {users_dict[chat_id]['info']} ")
    time.sleep(2)
    bot.send_message(chat_id, 'Чтобы вывести твою заполненную информацию, используй клавишу "моя визитка 💼"')

    keyboard = telebot.types.ReplyKeyboardMarkup(True)
    keyboard.row('моя визитка 💼', 'telegram-info')
    keyboard.row('погода ⛅️', 'поиск фотографий 🌇')
    keyboard.row('заметки 🔥', 'напоминания 🔔')
    keyboard.row('/help ❓')
    time.sleep(1.5)
    bot.send_message(message.chat.id, 'Приятного пользования!', reply_markup=keyboard)

@bot.message_handler(commands=['info'])
def get_user_info(message):
    chat_id = str(message.chat.id)
    if chat_id not in users_dict:
        bot.send_message(chat_id, "Пожалуйста заполни информацию о себе используя команду /cloud")
    else:
        name = users_dict[chat_id]['name']
        age = users_dict[chat_id]['age']
        info = users_dict[chat_id]['info']
        vkontakte = users_dict[chat_id]['vkontakte']
        birthday = users_dict[chat_id]['birthday']
        mobilenumber = users_dict[chat_id]['mobilenumber']
        bot.send_message(chat_id, f"⇨ Имя: {name}\n⇨ Возраст: {age}\n⇨ Дата рождения: {birthday}\n⇨ VK: {vkontakte}\n⇨ Номер телефона: {mobilenumber}\n⇨ Обо мне: {info}\n")
        time.sleep(2)
        bot.send_message(chat_id, "Чтобы заполнить форму по новой, введи команду /cloud")

@bot.message_handler(commands=['weather'])
def weather(message):
    bot.reply_to(message, "Введи название города, чтобы узнать погоду.")
    bot.register_next_step_handler(message, get_weather)

def get_weather(message):
    city = message.text
    url = f"http://api.openweathermap.org/data/2.5/weather?q={city}&appid={api_key}&units=metric"  # API-запрос к OpenWeatherMap
    response = requests.get(url).json()
    try:
        temp = response['main']['temp']
        feels_like = response['main']['feels_like']
        descr = response['weather'][0]['description']
        wind_speed = response['wind']['speed']
        humidity = response['main']['humidity']
        # Формирование сообщения с погодой
        weather_message = f"Погода в городе {city.capitalize()}:\n\nТемпература: {temp}°C\nОщущается как: {feels_like}°C\nСкорость ветра: {wind_speed} м/с\nВлажность: {humidity}%"
        bot.send_message(message.chat.id, weather_message)
        time.sleep(3)
        bot.send_message(message.chat.id, "Введите новый город или отправьте команду /menu (2 раза) для возвращения в главное меню")
        bot.register_next_step_handler(message, get_weather)  # Вызов функции для следующего город
    except KeyError:
        bot.send_message(message.chat.id, "Город не найден. Попробуйте ввести другой город или отправьте команду /menu для возвращения в главное меню")

@bot.message_handler(commands=['mytelegram'])
def get_telegram(message):
    bot.send_message(message.chat.id, f"Name: {message.from_user.first_name}\nID: {message.chat.id}\nUser Name: {message.from_user.username}")

@bot.message_handler(commands=['photo'])
def user_photo(message):
    keyboard = telebot.types.InlineKeyboardMarkup()
    keyboard.row(
        telebot.types.InlineKeyboardButton('кот 🐱', callback_data='cat'),
        telebot.types.InlineKeyboardButton('утёнок 🦆', callback_data='duck')
    )
    keyboard.row(
        telebot.types.InlineKeyboardButton('щенок 🐶', callback_data='dog'),
    )
    bot.send_message(message.chat.id, 'Выберите нужную фотографию', reply_markup=keyboard)
    # Удаляем сообщение с командой "поиск фотографий"
    bot.delete_message(chat_id=message.chat.id, message_id=message.message_id)

@bot.callback_query_handler(func=lambda call: True)
def callback_handler(call):
    chat_id = call.message.chat.id
    if call.data == 'cat':
        photo = open('photo.jpg', 'rb')
        bot.send_photo(chat_id, photo)
    elif call.data == 'duck':
        photo = open('utka.jpg', 'rb')
        bot.send_photo(chat_id, photo)
    elif call.data == 'dog':
        photo = open('dog1.jpeg', 'rb')
        bot.send_photo(chat_id, photo)

    # Удаляем сообщение с клавиатурой
    bot.delete_message(chat_id=chat_id, message_id=call.message.message_id)

@bot.message_handler(commands=['help'])
def help(message):
    keyboard = telebot.types.ReplyKeyboardMarkup(True)
    keyboard.row('разработчик бота 😎')
    keyboard.row('подробнее о клавише "моя визитка 💼"', 'подробнее о клавише "погода ⛅️"')
    keyboard.row('для чего клавиша telegram-info ?')
    keyboard.row('главное меню')
    bot.send_message(message.chat.id, 'Здесь Вы можете узнать подробнее о функционале.', reply_markup=keyboard)

@bot.message_handler(commands=['menu'])
def getmenu(message):
    keyboard = telebot.types.ReplyKeyboardMarkup(True)
    keyboard.row('моя визитка 💼', 'telegram-info')
    keyboard.row('погода ⛅️', 'поиск фотографий 🌇')
    keyboard.row('заметки 🔥', 'напоминания 🔔')
    keyboard.row('/help ❓')
    bot.send_message(message.chat.id, 'Вы вернулись в главное меню', reply_markup=keyboard)

@bot.message_handler(commands=['developer'])
def get_developer(message):
    bot.send_message(message.chat.id, 'Никита (@Rasty0501)\nМожете написать мне в личные сообщения с предложениями по улучшению бота.')

@bot.message_handler(commands=['helpinfo'])
def help_info(message):
    video = open('info.MP4', 'rb')
    bot.send_video(message.chat.id, video, caption='Клавиша "моя визитка 💼" показывает Вашу информацию, которую Вы внесли используя команду /cloud\n'
                           'Вы можете её обновить, прописав снова эту команду')

@bot.message_handler(commands=['helpweather'])
def help_weather(message):
    video = open('weather.MP4', 'rb')
    bot.send_video(message.chat.id, video, caption='Клавиша "погода ⛅️" предназначена для того, чтобы Вы могли узнать погоду в любом интересующем Вам городе.\n'
                                                       'Вводить название города можно как на русском языке, так и на английском.\n'
                                                       'Для отмены данной команды необходимо два раза отправить команду /menu')

@bot.message_handler(commands=['helptelegramid'])
def help_telegram(message):
    bot.send_message(message.chat.id,
                     'Данной клавишей Вы можете узнать данные о Вашем Telegram аккаунте: \nName: Ваш никнейм, который видят все пользователи.\n'
                     'ID: Ваш персональный Telegram ID аккаунта.\nUser Name: Ваше персональное имя аккаунта, по которому Вас может найти любой пользователь в Telegram')

@bot.message_handler(commands=['notes']) #заметки
def get_notes(message):
    gif = open('codding.gif', 'rb')
    bot.send_animation(message.chat.id, gif, caption='Данная функция на стадии разработки.')

@bot.message_handler(content_types=['text'])
def handle_text_message(message):
    if message.text.lower() == 'поиск фотографий 🌇':
        user_photo(message)
    elif message.text.lower() == 'погода ⛅️':
        weather(message)
    elif message.text.lower() == 'главное меню':
        getmenu(message)
    elif message.text.lower() == 'моя визитка 💼':
        get_user_info(message)
    elif message.text.lower() == 'моя визитка 💼':
        startt_message(message)
    elif message.text.lower() == 'telegram-info':
        get_telegram(message)
    elif message.text.lower() == 'разработчик бота 😎':
        get_developer(message)
    elif message.text.lower() == 'подробнее о клавише "моя визитка 💼"':
        help_info(message)
    elif message.text.lower() == 'подробнее о клавише "погода ⛅️"':
        help_weather(message)
    elif message.text.lower() == 'для чего клавиша telegram-info ?':
        help_telegram(message)
    elif message.text.lower() == 'заметки 🔥':
        get_notes(message)
    elif message.text.lower() == 'напоминания 🔔':
        reminder_message(message)
    else:
        gif = open('error.gif', 'rb') # gif ошибки запроса команды
        bot.send_animation(message.chat.id, gif, caption='Скорее всего ты ввёл запрос, которого нет в моей базе.')
        #caption позволяет отправить изображение вместе с текстом

if __name__ == '__main__':
    bot.polling(none_stop=True)
Traceback (most recent call last):
  File "C:\Python\telegramproject\telegram\hello.py", line 1, in <module>
    import telebot
  File "C:\Python\telegramproject\Lib\site-packages\telebot\__init__.py", line 19, in <module>
    bot = telebot.TeleBot('1128509073:AAHejg0Zqf022pV23y5x050fqnvit6vKLRc')
          ^^^^^^^^^^^^^^^
Traceback (most recent call last):
  File "C:\Python\telegramproject\telegram\hello.py", line 1, in <module>
    import telebot
  File "C:\Python\telegramproject\Lib\site-packages\telebot\__init__.py", line 19, in <module>
    bot = telebot.TeleBot('1128509073:AAHejg0Zqf022pV23y5x050fqnvit6vKLRc')
          ^^^^^^^^^^^^^^^
AttributeError: partially initialized module 'telebot' has no attribute 'TeleBot' (most likely due to a circular import). Did you mean: 'telebot'?

Если в PyCharm создаю новый проект, то код работает

Ответы

▲ 0
1. -     pip uninstall pytelegrambotapi
2. +     pip install --no-cache-dir pytelegrambotapi