Exemple #1
0
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))
Exemple #2
0
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)
Exemple #3
0
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)
Exemple #5
0
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)
Exemple #6
0
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)
Exemple #7
0
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)
Exemple #8
0
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)
Exemple #9
0
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)
Exemple #10
0
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)
Exemple #11
0
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)
Exemple #13
0
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 , ":|")
Exemple #14
0
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))
Exemple #15
0
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)
Exemple #16
0
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)
Exemple #17
0
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)
Exemple #18
0
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))
Exemple #19
0
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)
Exemple #21
0
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)
Exemple #23
0
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!')
Exemple #24
0
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)
Exemple #25
0
def set_score(message):
    score[message.chat.id]=message.text
    bot.send_message(message.chat.id,"Кто забил голы?  в формате  <Фамилия минута, Фамилия минута ...>")
    bot.register_next_step_handler(message,set_goals)
Exemple #26
0
def get_name(message):
    names[message.chat.id] = message.text
    bot.send_message(message.chat.id, 'Когда это было? Дата в формате дд.мм.гггг')
    bot.register_next_step_handler(message, get_date)
Exemple #27
0
def handle_reg(message):
    bot.send_message(message.chat.id, "Напиши навзвания двух команд игравших в матче в формате ' Название команды хозяев "
                                      "- Название Команды гостей' " )
    bot.register_next_step_handler(message, get_name)  
Exemple #28
0
def new_name(message):
    msg1 = bot.send_message(message.chat.id, text='Ввведите новое имя')
    bot.register_next_step_handler(msg1, student_change_name_step)
Exemple #29
0
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)
Exemple #30
0
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)