@choop1337

Как заставить бота работать?

Запускаю бота, все остальные его функции работают, но именно гороскоп не работает, спасибо

from pycbrf import ExchangeRates, Banks
import datetime
import telebot
from pyowm import OWM
from pyowm.utils.config import get_default_config
import config
import random
from telebot import types
# импорт всех библиотек, которые понадобятся для написания бота

bot = telebot.TeleBot(' TOKEN ')#токен бота, взятый у Bot Father

NY = datetime.datetime(2023,1,1)
now = datetime.datetime.today()

first = ["Сегодня — идеальный день для новых начинаний.","Оптимальный день для того, чтобы решиться на смелый поступок!","Будьте осторожны, сегодня звёзды могут повлиять на ваше финансовое состояние.","Лучшее время для того, чтобы начать новые отношения или разобраться со старыми.","Плодотворный день для того, чтобы разобраться с накопившимися делами."]
second = ["Но помните, что даже в этом случае нужно не забывать про","Если поедете за город, заранее подумайте про","Те, кто сегодня нацелен выполнить множество дел, должны помнить про","Если у вас упадок сил, обратите внимание на","Помните, что мысли материальны, а значит вам в течение дня нужно постоянно думать про"]
second_add = ["отношения с друзьями и близкими.","работу и деловые вопросы, которые могут так некстати помешать планам.","себя и своё здоровье, иначе к вечеру возможен полный раздрай.","бытовые вопросы — особенно те, которые вы не доделали вчера.","отдых, чтобы не превратить себя в загнанную лошадь в конце месяца."]
third = ["Злые языки могут говорить вам обратное, но сегодня их слушать не нужно.","Знайте, что успех благоволит только настойчивым, поэтому посвятите этот день воспитанию духа.","Даже если вы не сможете уменьшить влияние ретроградного Меркурия, то хотя бы доведите дела до конца.","Не нужно бояться одиноких встреч — сегодня то самое время, когда они значат многое.","Если встретите незнакомца на пути — проявите участие, и тогда эта встреча посулит вам приятные хлопоты."]

@bot.message_handler(commands=['start']) # Первая команда, команда для начала работы бота
def start(message): #создание функции
    markup = telebot.types.ReplyKeyboardMarkup(row_width=3)
    itembtn1 = telebot.types.KeyboardButton(' USD ')
    itembtn2 = telebot.types.KeyboardButton(' EUR ')
    markup.add(itembtn1, itembtn2) #создание кнопок
    bot.send_message( message.chat.id, "Добро пожаловать,\n/start - запуск бота\nДля того чтобы узнать гороскоп, напишите 'гороскоп'\n /weather Чтобы узнать погоду и следуйте указаниям бота\nЧтобы узнать курс валюты, введите ее название\n/newyear Количество дней до нового года", reply_markup=markup)
#сообщение бота на команду /start


@bot.message_handler(commands=['weather'])# cоздание команды /weather
def get_msg(message): # бот ждет получение информации собеседника, для своей работы
    sent = bot.send_message(message.chat.id, 'Введите название города')
    bot.register_next_step_handler(sent, send_weather)


@bot.message_handler(content_types=['text']) # если человек решил узнать курс валют, то программа идет по этому коду.
def message(message):
    message_norm = message.text.strip().lower()
    if message_norm in ['usd', 'eur']:
        rates = ExchangeRates()
        bot.send_message(chat_id=message.chat.id,text=f"<b>Сейчас курс :{message_norm.upper()}  {float(rates[message_norm.upper()].rate)}</b>", parse_mode="html") #программа отправляет человеку курс на его валюту
    
def send_weather(message): #создание функции погода, которая работает после работы строчек 20 - 23.  
    try: #цикл try будет работать, если человек ввел правильное название города
        place = message.text
        config_dict = get_default_config()
        config_dict['language'] = 'ru' # настройки бота под русский язык 

        owm = OWM('TOKEN', config_dict) #полученный апи ключ с сайта openweathermap.org, без него бот не будет работать
        mgr = owm.weather_manager()
        observation = mgr.weather_at_place(place)
        w = observation.weather
        t = w.temperature("celsius") # в какой единице температуры будет выводить
        t1 = t['temp']
        t2 = t['feels_like']
        t3 = t['temp_max']
        t4 = t['temp_min']
        wi = w.wind()['speed'] # настройки программы, которые будут выведены далее 
        humi = w.humidity
        cl = w.clouds
        st = w.status
        dt = w.detailed_status
        ti = w.reference_time('iso')
        pr = w.pressure['press']
        vd = w.visibility_distance
        bot.send_message(message.chat.id, "В городе " + str(place) + " температура " + str(t1) + " °C" + "\n" + 
                "Максимальная температура " + str(t3) + " °C" +"\n" + 
                "Минимальная температура " + str(t4) + " °C" + "\n" + 
                "Ощущается как" + str(t2) + " °C" + "\n" +
                "Скорость ветра " + str(wi) + " м/с" + "\n" + 
                "Давление " + str(pr) + " мм.рт.ст" + "\n" + 
                "Влажность " + str(humi) + " %" + "\n" + 
                "Видимость " + str(vd) + "  метров" + "\n" +
                "Описание " + str(st) + "\n\n" + str(dt))

    except: # цикл except будет работать тогда, когда человек ввел неверное название города
        bot.send_message(message.chat.id,"Такой город не найден!")
        print(str(message.text),"- не найден")

def get_text_messages(message):
    if message.text == "Привет":
        bot.send_message(message.from_user.id, "{Хорошо, сейчас я расскажу тебе гороскоп на сегодня.")
        keyboard = types.InlineKeyboardMarkup()
        key_oven = types.InlineKeyboardButton(text='Овен', callback_data='zodiac')
        keyboard.add(key_oven)
        key_telec = types.InlineKeyboardButton(text='Телец', callback_data='zodiac')
        keyboard.add(key_telec)
        key_bliznecy = types.InlineKeyboardButton(text='Близнецы', callback_data='zodiac')
        keyboard.add(key_bliznecy)
        key_rak = types.InlineKeyboardButton(text='Рак', callback_data='zodiac')
        keyboard.add(key_rak)
        key_lev = types.InlineKeyboardButton(text='Лев', callback_data='zodiac')
        keyboard.add(key_lev)
        key_deva = types.InlineKeyboardButton(text='Дева', callback_data='zodiac')
        keyboard.add(key_deva)
        key_vesy = types.InlineKeyboardButton(text='Весы', callback_data='zodiac')
        keyboard.add(key_vesy)
        key_scorpion = types.InlineKeyboardButton(text='Скорпион', callback_data='zodiac')
        keyboard.add(key_scorpion)
        key_strelec = types.InlineKeyboardButton(text='Стрелец', callback_data='zodiac')
        keyboard.add(key_strelec)
        key_kozerog = types.InlineKeyboardButton(text='Козерог', callback_data='zodiac')
        keyboard.add(key_kozerog)
        key_vodoley = types.InlineKeyboardButton(text='Водолей', callback_data='zodiac')
        keyboard.add(key_vodoley)
        key_ryby = types.InlineKeyboardButton(text='Рыбы', callback_data='zodiac')
        keyboard.add(key_ryby)
        bot.send_message(message.from_user.id, text='Но перед этим, выбери интересующий знак зодиака', reply_markup=keyboard)
    elif message.text == "/help":
        bot.send_message(message.from_user.id, "Напиши ' Гороскоп ' ")
    else:
        bot.send_message(message.from_user.id, "Я тебя не понял.....(((\nНажми на кнопочку ")
        bot.register_next_step_handler(sent, callback_query_handler)

@bot.callback_query_handler(func=lambda call: True)
def callback_worker(call):
    if call.data == "zodiac": 
        msg = random.choice(first) + ' ' + random.choice(second) + ' ' + random.choice(second_add) + ' ' + random.choice(third)

@bot.message_handler(commands=['newyear'])
def date(message):
    d = NY-now 
    mm, ss = divmod(d.seconds, 60)
    hh, mm = divmod(mm, 60)
    bot.send_message(message.chat.id, str(d))
    print('До нового года' + str(d) )

bot.polling(none_stop=True, interval=0) # настройка, для того, чтобы бот работал бесконечно, без задержки
  • Вопрос задан
  • 147 просмотров
Пригласить эксперта
Ответы на вопрос 1
shurshur
@shurshur
Сисадмин, просто сисадмин...
А как он должен работать, если ты в обработчике zodiac создаёшь переменную msg, но никаких сообщений не отправляешь? До кучи, как по-твоему это будет работать, если call.data на всех кнопках одинаковый, как бот их будет различать?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы