Ошибка telebot с токеном
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 создаю новый проект, то код работает
Источник: Stack Overflow на русском