def handle_reg_message(message): if get_credentials(message.chat.id) is not None: bot.send_message( message.chat.id, 'You are already log in\n' 'Send /help to get list of available commands') return bot.send_message(message.chat.id, 'Starting authentication') # Getting app credentials from file with open('credentials.json', 'r') as f: cred = json.load(f)['installed'] # Init auth flow flow = OAuth2WebServerFlow(client_id=cred['client_id'], client_secret=cred['client_secret'], scope=SCOPES, redirect_uri=cred['redirect_uris'][0]) # Getting authentication url auth_url = flow.step1_get_authorize_url() bot.send_message(message.chat.id, '{} - Authorization_url'.format(auth_url)) bot.send_message(message.chat.id, 'Write here your authentication token') # Receive message with auth code bot.register_next_step_handler(message, lambda m: get_auth_token(m, flow))
def get_mintime(message): global TIME_MIN try: TIME_MIN = int(message.text) # проверяем, что возраст введен корректно except (TypeError, ValueError): bot.send_message(message.chat.id, 'Цифрами, пожалуйста') bot.register_next_step_handler(message, get_mintime) return bot.send_message(message.chat.id, 'Какое максимальное кол-во часов в неделю ты готов проводить вместе?') bot.register_next_step_handler(message, get_maxtime)
def get_character(message): global W_A_W try: W_A_W = (int(message.text)) % 3 # проверяем, что возраст введен корректно except (TypeError, ValueError): bot.send_message(message.chat.id, 'Цифрами, пожалуйста') bot.register_next_step_handler(message, get_character) return bot.send_message(message.chat.id, 'Хочешь ли ты завести собаку? Ответь да/нет') bot.register_next_step_handler(message, get_dog)
def callback_phys_edu(call): bot.send_message(call.message.chat.id, "Then we will talk about your physical education visits.") user = TgUser.select().where(TgUser.user_id == call.message.chat.id).get() if user.req_visits == 0: bot.send_message(call.message.chat.id, "How many times should you go to physical education per semester?") bot.register_next_step_handler(call.message, set_up_visits) else: add_visit(call.message)
def get_minheight(message): global HEIG_MIN try: HEIG_MIN = int(message.text) # проверяем, что возраст введен корректно except (TypeError, ValueError): bot.send_message(message.chat.id, 'Цифрами, пожалуйста') bot.register_next_step_handler(message, get_minheight) return bot.send_message(message.chat.id, 'Напиши максимальный рост будущего партнера') bot.register_next_step_handler(message, get_maxheight)
def get_maxheight(message): global HEIG_MAX try: HEIG_MAX = int(message.text) # проверяем, что возраст введен корректно except (TypeError, ValueError): bot.send_message(message.chat.id, 'Цифрами, пожалуйста') bot.register_next_step_handler(message, get_maxheight) return bot.send_message(message.chat.id, 'Кто будет мужик в доме? Ты или не ты?') bot.send_message(message.chat.id, 'пс, пиши "я" / "не я"') bot.register_next_step_handler(message, get_head)
def get_age(message): global AGE try: AGE = int(message.text) # проверяем, что возраст введен корректно except (TypeError, ValueError): bot.send_message(message.chat.id, 'Цифрами, пожалуйста') bot.register_next_step_handler(message, get_age) return bot.send_message(message.chat.id, 'А теперь отправь ссылку на своё фото ^^') bot.send_message(message.chat.id, 'Постарайся не ошибаться, иначе твоя любовь тебя не найдет!') bot.register_next_step_handler(message, get_pic_link)
def handle_search(message): keyboard = telebot.types.ReplyKeyboardMarkup() key_author = telebot.types.KeyboardButton(text='По режиссёру') keyboard.add(key_author) key_genre = telebot.types.KeyboardButton(text='По жанру') keyboard.add(key_genre) key_auto = telebot.types.KeyboardButton(text='Автоматически') keyboard.add(key_auto) bot.send_message(message.chat.id, 'Выбери тип поиска:', reply_markup=keyboard) bot.register_next_step_handler(message, get_search_type)
def get_sex(message): global SEX if message.text.lower() == 'мальчик': SEX = 0 elif message.text.lower() == 'девчуля': SEX = 1 else: bot.send_message(message.chat.id, 'Ты написал неправильно... Попробуй-ка еще разочек :)') bot.register_next_step_handler(message, get_sex) return bot.send_message(message.chat.id, 'Сколько тебе лет?') bot.register_next_step_handler(message, get_age)
def get_head(message): global HEAD if message.text.lower() == 'не я': HEAD = 0 elif message.text.lower() == 'я': HEAD = 1 else: bot.send_message(message.chat.id, 'Ты написал неправильно... Попробуй-ка еще разочек :)') bot.register_next_step_handler(message, get_head) return bot.send_message(message.chat.id, 'Какое минимальное кол-во часов в неделю вы будете проводить вместе?') bot.register_next_step_handler(message, get_mintime)
def get_dog(message): global DOG if message.text.lower() == 'нет': DOG = 0 elif message.text.lower() == 'да': DOG = 1 else: bot.send_message(message.chat.id, 'Ты написал неправильно... Попробуй-ка еще разочек :)') bot.register_next_step_handler(message, get_dog) return bot.send_message(message.chat.id, 'Фуууух, последний вопросик') bot.send_message(message.chat.id, 'Где тебя искать - то? :)') bot.register_next_step_handler(message, get_find)
def handle_reg(message): flag = True try: TgUser.select().where(TgUser.user_id == message.chat.id).get() except DoesNotExist: flag = False if not flag: bot.send_message(message.chat.id, "What's your name?") bot.register_next_step_handler(message, get_name) else: user = TgUser.select().where(TgUser.user_id == message.chat.id).get() bot.send_message(message.chat.id, "Hi, {}!".format(user.name)) weather_or_phys_edu(message)
def callback_worker(call): if call.data == "yes": bot.send_message(call.message.chat.id, 'Спасибо! : )') elif call.data == "no": bot.send_message(call.message.chat.id, "Попрбуйте еще раз или найдите себе другого бота!:(") bot.register_next_step_handler(call.message, get_name) elif call.data=='idk': bot.send_message(call.message.chat.id, ":|") elif call.data == "Yes": bot.send_message(call.message.chat.id,'Введите счет этого матча') bot.register_next_step_handler(call.message,set_score) elif call.data == "No": bot.send_message(call.message.chat.id,"Прощайте!") elif call.data== "Idk": bot.send_message(call.message.chat.id , ":|")
def teacher_table_link_step(message): try: chat_id = message.chat.id link = message.text try: link = find_url(link)[0] msg = bot.send_message( chat_id, text='Введите, как таблица будет называться в боте') bot.register_next_step_handler(msg, teacher_table_name_step, link, False) except IndexError: bot.reply_to(message, 'Введите правильную ссылку на таблицу') except Exception as e: bot.reply_to(message, 'Произошла какая-то ошибка, я вас не понял ' + str(e))
def callback_phenomenon_manually(call, intro=True): """handle phenomenon manually db""" global callback_query_ph_manually callback_query_ph_manually = call user = User.query.filter_by(chat_id=call.from_user.id).first() if intro: # if callback_phenomenon_manually called first time text = f"{hints['phenomena temp set'][user.language]}\n{hints['num expected'][user.language]}" \ f"\n{hints['how to del'][user.language]}" else: # if user types incorrect msg text = info[user.language][0] msg = bot.send_message(call.from_user.id, text) bot.register_next_step_handler(message=msg, callback=add_phenomenon_manually)
def get_search_type(message): message_texts = { 'По режиссёру': 'Введи имя режиссера:', 'По жанру': 'Введи желаемый жанр:' } handlers = {'По режиссёру': handle_author_name, 'По жанру': handle_genre} markup = telebot.types.ReplyKeyboardRemove(selective=False) if message.text in message_texts: bot.send_message(message.chat.id, message_texts[message.text], reply_markup=markup) bot.register_next_step_handler(message, handlers[message.text]) elif message.text == 'Автоматически': handle_preferenced(message, markup) else: handle_all(message, markup)
def get_maxtime(message): global TIME_MAX try: TIME_MAX = int(message.text) # проверяем, что возраст введен корректно except (TypeError, ValueError): bot.send_message(message.chat.id, 'Цифрами, пожалуйста') bot.register_next_step_handler(message, get_maxtime) return bot.send_message(message.chat.id, 'Кем из романа "Война и мир" ты мог бы быть? Напиши номер варианта') bot.send_message(message.chat.id, '(Пол героя не важен, cуть лишь в том, чье поведение тебе ближе)') bot.send_message(message.chat.id, '1 Андрей Болконский') bot.send_message(message.chat.id, '2 Николай Ростов') bot.send_message(message.chat.id, '3 Пьер Безухов') bot.send_message(message.chat.id, '4 Наташа Ростова') bot.send_message(message.chat.id, '5 Марья Болконская') bot.send_message(message.chat.id, '6 Элен Курагина') bot.send_message(message.chat.id, '7 Анатоль Курагин') bot.register_next_step_handler(message, get_character)
def vote_for_best_student(message): # TODO голосовалка try: chat_id = message.chat.id student_on_lesson = app.google_tables.tables.students_on_lesson( app.google_tables.tables.ranges, app.google_tables.tables.sheet_counter) poll = types.Poll(question="Кто является самым активным студентом?") for i in student_on_lesson: poll.add(student_on_lesson[i]) for j in student_on_lesson: student_chat_id = Student.query.filter( Student.name == str(student_on_lesson[j])).first().id bot.send_poll(chat_id=student_chat_id, poll=poll) msg = bot.send_message(chat_id, text='Голосование начато') bot.register_next_step_handler(msg, send_results) except Exception as e: bot.reply_to(message, 'Произошла какая-то ошибка, я вас не понял ' + str(e))
def button_city(message, intro=True): """Handle button 'city'""" data = User.get_or_create_user_data(message) if not data['user']: new_user = User(username=data['username'], chat_id=data['chat_id'], language=data['lang']) db.session.add(new_user) db.session.commit() if intro: # if button_city called first time text = hints['city intro'][data['lang']] else: # if user types incorrect city name text = info[data['lang']][0] msg = bot.send_message(chat_id=data['chat_id'], text=text) bot.register_next_step_handler(message=msg, callback=add_city)
def set_up_visits(message): req_visits = 0 # Check for adequate answer. try: req_visits = int(message.text) except (TypeError, ValueError): bot.send_message(message.chat.id, "Please, use numbers.") bot.register_next_step_handler(message, set_up_visits) # Check for correct answer. if req_visits > 1440: bot.send_message(message.chat.id, "Hah. Are you from Exercise College?))) Your value are not allowed.\n" "Write a correct number of visits.") bot.register_next_step_handler(message, set_up_visits) else: TgUser.update(req_visits=req_visits).where(TgUser.user_id == message.chat.id).execute() bot.send_message(message.chat.id, "Ok.") add_visit(message)
def teacher_name_step(message): try: chat_id = message.chat.id name = message.text try: check_name = Student.query.filter( Student.id == str(chat_id)).first().name bot.send_message(chat_id, text='Вы уже зарегистрировались как студент ' + str(check_name)) except AttributeError: teacher = Teacher(id=chat_id, name=name) db.session.add(teacher) db.session.commit() msg = bot.send_message(chat_id, text='Введите ссылку на таблицу Google') bot.register_next_step_handler(msg, teacher_table_link_step) except Exception as e: bot.reply_to(message, "Произошла какая-то ошибка, я вас не понял " + str(e))
def weather_json(message): # Open a page with the weather for a necessary city. city = message.text API_key = "f4188f71f275596f99e8e258020fa628" url = "http://api.openweathermap.org/data/2.5/weather?q={}&APPID={}".format(city, API_key) page = requests.get(url) API_call = json.loads(page.text) # Check that the city is found. if API_call["cod"] == 200: # Parse the json response. bot.send_message(message.chat.id, "Well, there what I've found about {}.".format(city)) desc_list = API_call["weather"] bot.send_message(message.chat.id, "Weather description: {}".format(desc_list[0]["description"])) deviation = max(abs(API_call["main"]["temp_min"] - API_call["main"]["temp"]), abs(API_call["main"]["temp_max"] - API_call["main"]["temp"])) getcontext().prec = 3 temperature = Decimal(API_call["main"]["temp"]) - Decimal(273.0) deviation = Decimal(deviation) - Decimal(0.0) bot.send_message(message.chat.id, "Temperature: {} +- {} °C".format(temperature, deviation)) getcontext().prec = 4 pressure = Decimal(API_call["main"]["pressure"] * 0.750062) - Decimal(0.0) bot.send_message(message.chat.id, "Pressure: {} mm Hg".format(pressure)) bot.send_message(message.chat.id, "Humidity: {} %".format(API_call["main"]["humidity"])) bot.send_message(message.chat.id, "Wind speed: {} meter/sec. Wind degrees: {}°" .format(API_call["wind"]["speed"], API_call["wind"]["deg"])) bot.send_message(message.chat.id, "Cloudiness: {}%".format(API_call["clouds"]["all"])) # bot.send_message(message.chat.id, "Rain for the last 3 hours: {} mm".format(API_call["rain"]["rain.3h"])) # bot.send_message(message.chat.id, "Snow for the last 3 hours: {} mm".format(API_call["snow"]["snow.3h"])) weather_or_phys_edu(message) else: bot.send_message(message.chat.id, "{} was not found, sorry. Try an another city =)".format(city)) bot.register_next_step_handler(message, weather_json)
def send_question(message): try: row = Question.query.count() question = Question.query.filter_by(id=randint(1, row)).first() markup = types.ReplyKeyboardMarkup(one_time_keyboard=True, resize_keyboard=True) itembtna = types.KeyboardButton(question.question_answer_varian1) itembtnb = types.KeyboardButton(question.question_answer_varian2) itembtnc = types.KeyboardButton(question.question_answer_varian3) itembtnd = types.KeyboardButton(question.question_answer_varian4) itembtne = types.KeyboardButton(question.question_answer_varian5) itembtnf = types.KeyboardButton(question.question_answer_varian6) markup.row(itembtna, itembtnb, itembtnc) markup.row(itembtnd, itembtne, itembtnf) msg = bot.send_message(message.chat.id, str(question.question_text), reply_markup=markup, parse_mode='HTML') bot.register_next_step_handler(msg, process_answer_step, questid=question.id) except Exception as e: bot.reply_to(message, 'Something wrong!')
def callback_inline(call): if call.message: if call.data == "teacher": msg = bot.send_message(chat_id=call.message.chat.id, text='Представьтесь, пожалуйста') bot.register_next_step_handler(msg, teacher_name_step) elif call.data == "student": msg = bot.send_message(chat_id=call.message.chat.id, text='Представьтесь, пожалуйста') bot.register_next_step_handler(msg, student_name_step) elif call.data == "link": msg = bot.send_message(chat_id, text='Введите ссылку на таблицу Google') bot.register_next_step_handler(msg, teacher_table_link_step) elif call.data == "delete1": teacher_table_delete_step1(call.message) elif "delete2" in call.data: teacher_table_delete_step2(call.message, call.data) elif call.data == "start test": bot.register_next_step_handler(call.message, teacher_start_test_step) elif "test_table" in call.data: bot.register_next_step_handler(call.data, teacher_test_step)
def set_score(message): score[message.chat.id]=message.text bot.send_message(message.chat.id,"Кто забил голы? в формате <Фамилия минута, Фамилия минута ...>") bot.register_next_step_handler(message,set_goals)
def get_name(message): names[message.chat.id] = message.text bot.send_message(message.chat.id, 'Когда это было? Дата в формате дд.мм.гггг') bot.register_next_step_handler(message, get_date)
def handle_reg(message): bot.send_message(message.chat.id, "Напиши навзвания двух команд игравших в матче в формате ' Название команды хозяев " "- Название Команды гостей' " ) bot.register_next_step_handler(message, get_name)
def new_name(message): msg1 = bot.send_message(message.chat.id, text='Ввведите новое имя') bot.register_next_step_handler(msg1, student_change_name_step)
def callback_worker(call): if call.data == "yes": # call.data это callback_data, которую мы указали при объявлении кнопки bot.send_message(call.message.chat.id, 'Запомню : )') elif call.data == "no": bot.send_message(call.message.chat.id, "Попробуем начать сначала. Как тебя зовут?") bot.register_next_step_handler(call.message, get_name)
def callback_handler(call): chat_id = call.message.chat.id if call.data == "add_favorite": # добавление статьи в избранное # собираем данные user = User.get(User.telegram_id == chat_id) title = call.message.text.split("\n\n")[0] url = call.message.text.split("\n\n")[1] tkeyboard = tools.generate_keyboard("unfavorite") # создаем новую статью в БД try: like = Favorite(user=user, title=title, liked_url=url) like.save() # уведомляем пользователя о добавлении статьи в избранное # + добавляем к сообщение кнопку для удаления bot.answer_callback_query(call.id, "Добавлено в избранные публикации", show_alert=True) bot.edit_message_reply_markup(chat_id=chat_id, message_id=call.message.message_id, reply_markup=tkeyboard) except IntegrityError: bot.answer_callback_query(call.id, "Уже добавлено в избранные публикации", show_alert=True) bot.edit_message_reply_markup(chat_id=chat_id, message_id=call.message.message_id, reply_markup=tkeyboard) elif call.data == "delete_favorite": # delete favorite article from the db user = User.get(User.telegram_id == chat_id) tkeyboard = tools.generate_keyboard("favorite") # проверяем существование публикации в избранном # это нужно, в случае нажатия по кнопке на старом сообщении try: like = Favorite.get( Favorite.liked_url == call.message.text.split("\n\n")[1]) like.delete_instance() except DoesNotExist: logs.add_error(f"{user} - got an exception DoesNotExist") bot.answer_callback_query( call.id, "Публикация уже удалена из списка избранного", show_alert=True) bot.edit_message_reply_markup(chat_id=chat_id, message_id=call.message.message_id, reply_markup=tkeyboard) return bot.answer_callback_query(call.id, "Удалено из избранных публикаций", show_alert=True) bot.edit_message_reply_markup(chat_id=chat_id, message_id=call.message.message_id, reply_markup=tkeyboard) elif call.data == "delete_element": # удаление публикации из избранного с ипсользование следующего шага markup = types.ForceReply(selective=False) bot.send_message( chat_id, "Введите номер публикации\n/cancel - отменить действие", reply_markup=markup) bot.register_next_step_handler(call.message, get_element) elif call.data == "to_main": # вернуть reply keyboard по нажатию на inline кнопку tkeyboard = tools.generate_keyboard() bot.send_message(chat_id, "Главная", reply_markup=tkeyboard)