def user_entering_age(message): # Here we’ll do a check if not message.text.isdigit(): # Состояние не меняем, поэтому только выводим сообщение об ошибке и ждём дальше bot.send_message(message.chat.id, "Something get wrong 🤔 Try again!") bot.send_sticker( message.chat.id, 'CAACAgQAAxkBAAIlml5BssgRiup761KZTm_eAfnNwhmQAAIeAQACu-RJAAEYZh0WQkIVsRgE' ) return # At this stage, we are sure that message.text can be converted to a number, so we do not risk anything if int(message.text) < 10 or int(message.text) > 100: bot.send_message( message.chat.id, "What a strange age! I don't believe you! Answer honestly 🙃") bot.send_sticker( message.chat.id, 'CAACAgIAAxkBAAIloF5BtAPCWDpC4NmBuqPSqgN9dCz1AAKWAQACW90SCIRDegskrgwjGAQ' ) return else: # Age entered correctly, can go further bot.send_message( message.chat.id, "Once upon a time, I was the same age as you do ... oh ... " "However, we will not be distracted. " "\nLet me know a little bit more about you ☺️" "\nWhere are you from?") dbworker.set_state(message.chat.id, config.States.S_SEND_LOCATION.value)
def user_choose_support_line(message, msg_text): Other_Function.delete_message( config.token, message.chat.id, message.message_id) # удаляет лишнии сообщения бота user_data['SupLine'] = msg_text # вносит занчение выбранной линии поддержки keyboard = types.InlineKeyboardMarkup() callback_button_1 = types.InlineKeyboardButton(text="Менее 10", callback_data="CS_1") # Кнопка для значения размера компании < 10 callback_button_2 = types.InlineKeyboardButton(text="От 10 до 100", callback_data="CS_2") # Кнопка для значения размера компании < 100 callback_button_3 = types.InlineKeyboardButton(text="От 100 до 1000", callback_data="CS_3") # Кнопка для значения размера компании < 1000 callback_button_4 = types.InlineKeyboardButton(text="Более 1000", callback_data="CS_4") # Кнопка для значения размера компании > 1000 keyboard.add(callback_button_1, callback_button_2, callback_button_3, callback_button_4) bot.send_message(message.chat.id, "Укажите размер компании", reply_markup=keyboard) # Выводим вопрос и клавиатуру dbworker.set_state(message.chat.id, config.States.S_ENTER_COMPANY_SIZE. value) # Изменяет стадию работы бота с клиентом
def take_this_nomber(message): # Если пользователь нажал согласился предоставить свой телефон pn = message.contact.phone_number user_data['Phone'] = pn # Вносит занчение контактной телефона Other_Function.delete_message(config.token, message.chat.id, message.message_id - 1) # удаляет лишнии сообщения бота # Если данная функция срабатывает при редактировании элемента, то пеосле переводит на стадию подтверждения корректности заявки # Понимание работы в режиме редактирования происходит за счет значения Choose Edit словаря if user_data['Choose Edit'] == 'ET_CL': Other_Function.user_current_reply(message) # Переводит на стадию подтверждения корректности заявки с измененным элементом user_data['Choose Edit'] = '' # Обнуляет служебное значение return dbworker.set_state( message.chat.id, config.States.S_TICKET.value) # Изменяет стадию работы бота с клиентом msg = bot.send_message(message.chat.id, "Опишите вопрос") bot.register_next_step_handler(msg, user_entering_tiket)
def cmd_reset(message): bot.send_message( message.chat.id, "Let's start anew.\n" "Which day's statistics do you want to get: /today or /yesterday.\n" "Use /info or /commands to rewind what I am and what can I do.") bot.send_photo(message.chat.id, pict[randint(0, 5)]) dbworker.set_state(message.chat.id, config_my.States.S_ENTER_DAY.value)
def user_sending_photo(message): # То, что это фотография, мы уже проверили в хэндлере, никаких дополнительных действий не нужно. bot.send_message( message.chat.id, "Отлично! Больше от тебя ничего не требуется. Если захочешь пообщаться снова - " "отправь команду /start.") dbworker.set_state(message.chat.id, config.States.S_START.value)
def addincome(message): keyboard = telebot.types.ReplyKeyboardMarkup() keyboard.row('salary', 'pozhertvovanie gosudarstva') keyboard.row('/help', '/reset') keyboard.row('/mainmenu') bot.send_message(message.chat.id, "Choose type of income: ", reply_markup=keyboard) dbworker.set_state(message.chat.id, config.State.S_ENTER_TYPE_INCOME, message.chat.username)
def send_welcome(message): bot.send_message(message.chat.id, 'Что ж, давайте поменяем настройки') bot.send_message(message.chat.id, text="Выберите настройку", reply_markup=keyboard_settings) dbworker.set_state(message.chat.id, config.States.S_SETTINGS.value) bot.delete_message(message.chat.id, message.id)
def get_lang(message): if not (message.text == 'ru' or message.text == 'en'): bot.send_message(message.chat.id, "Language can be only en or ru!") else: dbworker.set_data(message.chat.id, 'lang', message.text) if dbworker.get_current_state( message.chat.id) == dbconfiguration.CAESAR_LANG_ET: bot.send_message(message.chat.id, '''So, there is your output file!''') bot.send_document( message.chat.id, Caesar.encrypt_text( dbworker.get_data(message.chat.id, 'file'), dbworker.get_data(message.chat.id, 'shift'), dbworker.get_data(message.chat.id, 'lang')).encode('UTF-8')) dbworker.clear_data(message.chat.id) if dbworker.get_current_state( message.chat.id) == dbconfiguration.CAESAR_LANG_DT: bot.send_message(message.chat.id, '''So, there is your output file!''') bot.send_document( message.chat.id, Caesar.decrypt_text( dbworker.get_data(message.chat.id, 'file'), dbworker.get_data(message.chat.id, 'shift'), dbworker.get_data(message.chat.id, 'lang')).encode('UTF-8')) dbworker.clear_data(message.chat.id) dbworker.set_state(message.chat.id, dbconfiguration.CAESAR, bot)
def user_entering_name(message): if "Назад" == message.text: dbworker.set_state(message.chat.id, config.States.SELECT_RULES.value) elif "Электрички" == message.text: markup = utils.generate_markup(["Минск -- Моло", "Моло -- Минск", "Назад"]) bot.send_message(message.chat.id, "Выберите маршрут!", reply_markup=markup) dbworker.set_state(message.chat.id, config.States.SELECT_RULES.value)
def handele_text(message): conversation_state = dbworker.get_current_state(message.chat.id) if conversation_state == constants.States.ENTER_PICTURE_TOPIC: dbworker.set_state(message.chat.id, constants.States.SENT_PICTURE_TOPIC) send_picture_by_topic(message.chat.id, message.text) else: bot.reply_to(message, constants.text_messages['plain_text'])
def Ia_Jok(call): zhauap = call.data[4:] db = SQLight() reply_markup = telebot.types.ReplyKeyboardRemove() if zhauap == 'Бар': db.update_sala(123, zhauap) bot.answer_callback_query(call.id, text="Күте тұрыңыз...") bot.send_message( call.from_user.id, "<a href='https://www.youtube.com/watch?v=lJ-7CODAQqc'>Саласы бар</a>", parse_mode="HTML", reply_markup=zhukteu_batyrma()) return bot.answer_callback_query(call.id, text="Күте тұрыңыз...") db.update_sala(123, zhauap) markup = telebot.types.InlineKeyboardMarkup() row_1 = [ telebot.types.InlineKeyboardButton(text="Саламды анықтағым келеді", callback_data='#') ] markup.row(*row_1) bot.send_message( call.from_user.id, "<a href='https://www.youtube.com/watch?v=uWRvrdOyBXA'>Салам бар, бірақ өзім білмеймін</a>", parse_mode="HTML", reply_markup=markup) dbworker.set_state(call.from_user.id, config.States.kirispe_pikir.value)
def result_ret(message): if message.text in ('2010', '2011', '2012', '2013', '2014', '2015', '2016', '2017', '2018', '2019', '2020'): year = message.text day = dbworker.get_property(message.chat.id, "day") if int(day) < 10: day = '0' + day month = dbworker.get_property(message.chat.id, "month") code = dbworker.get_property(message.chat.id, "code") print(code, day, year, month) print(day+ '.' + months[month] + '.' + year) markup = types.ReplyKeyboardRemove(selective=False) bot.send_message(message.chat.id, "Минутку...", reply_markup=markup) url = 'https://cbr.ru/currency_base/daily/?UniDbQuery.Posted=True&UniDbQuery.To=' x = stat(url + day + '.' + months[month] + '.' + year) x.set_index('Код', inplace=True) result_ex = x.loc[code] bot.send_message(message.chat.id, f"Курс {code} на {day + '.' + months[month] + '.' + year}") bot.send_message(message.chat.id, f"{result_ex[2]} руб. за {result_ex[0]} {result_ex[1]}") dbworker.set_state(message.chat.id, config.States.S_START.value) else: #bot.send_message(message.chat.id, "История ежедневного курса валют у Банка России .") bot.send_message(message.chat.id, "Вы ввели неверный год. Попробуйте еще раз.") dbworker.set_state(message.chat.id, config.States.S_ENTER_YEAR.value) bot.send_message(message.chat.id, "Используйте /info или /commands чтобы узнать что может сообщить бот.")
def ent_month(message): if message.text in ('Янв', 'Фев', 'Мар', 'Апр', 'Май', 'Июн', 'Июл', 'Авг', 'Сен', 'Окт','Ноя','Дек'): dbworker.set_property(message.chat.id, message.text, "month") markup = types.ReplyKeyboardMarkup() itembtn1 = types.KeyboardButton('2010') itembtn2 = types.KeyboardButton('2011') itembtn3 = types.KeyboardButton('2012') itembtn4 = types.KeyboardButton('2013') itembtn5 = types.KeyboardButton('2014') itembtn6 = types.KeyboardButton('2015') itembtn7 = types.KeyboardButton('2016') itembtn8 = types.KeyboardButton('2017') itembtn9 = types.KeyboardButton('2018') itembtn10 = types.KeyboardButton('2019') itembtn11 = types.KeyboardButton('2020') markup.add(itembtn1, itembtn2, itembtn3, itembtn4, itembtn5, itembtn6, itembtn7, itembtn8, itembtn9, itembtn10, itembtn11) bot.send_message(message.chat.id, "Выберите год:", reply_markup=markup) dbworker.set_state(message.chat.id, config.States.S_ENTER_YEAR.value) else: bot.send_message(message.chat.id, "Вы ввели неверный месяц. Попробуйте еще раз.") dbworker.set_state(message.chat.id, config.States.S_ENTER_MONTH.value)
def day(message): if message.text in ('1', '2', '3', '4', '5', '6','7', '8', '9','10','11','12','13','14','15','16','17','18', '19', '20', '21', '22', '23', '24', '25', '26', '27', '28', '29', '30', '31'): #currency = messages.text dbworker.set_property(message.chat.id, message.text, "day") bot.reply_to(message, 'Введите месяц') #dbworker.set_property(messages.chat.id, currency, "code") markup = types.ReplyKeyboardMarkup() itembtn1 = types.KeyboardButton('Янв') itembtn2 = types.KeyboardButton('Фев') itembtn3 = types.KeyboardButton('Мар') itembtn4 = types.KeyboardButton('Апр') itembtn5 = types.KeyboardButton('Май') itembtn6 = types.KeyboardButton('Июн') itembtn7 = types.KeyboardButton('Июл') itembtn8 = types.KeyboardButton('Авг') itembtn9 = types.KeyboardButton('Сен') itembtn10 = types.KeyboardButton('Окт') itembtn11 = types.KeyboardButton('Ноя') itembtn12 = types.KeyboardButton('Дек') markup.add(itembtn1, itembtn2, itembtn3, itembtn4, itembtn5, itembtn6, itembtn7, itembtn8, itembtn9, itembtn10, itembtn11, itembtn12) bot.send_message(message.chat.id, "Выберите месяц:", reply_markup=markup) dbworker.set_state(message.chat.id, config.States.S_ENTER_MONTH.value) else: bot.send_message(message.chat.id, "Вы ввели неверную дату. Попробуйте еще раз.") dbworker.set_state(message.chat.id, config.States.S_ENTER_DAY.value)
def type_income(message): in_type = message.text dbworker.drop_table(message.chat.id) dbworker.temp_table_income(message.chat.id, in_type) dbworker.set_state(message.chat.id, config.State.S_ENTER_INCOME, message.chat.username) bot.send_message(message.chat.id, 'Enter sum, please') bot.send_message(message.chat.id, 'PS If you want enter float number you will use dot, not comma(56.6)')
def select_rule(message): # if ([i for i in GREETINGS if i in message.text.lower()]): # bot.send_message(message.chat.id, 'Що нада бля?') # elif ([i for i in TRAINS if i in message.text.lower()]): if "Назад" == message.text: dbworker.set_state(message.chat.id, config.States.MAIN_SELECT.value) elif "Моло -- Минск" == message.text: os.remove("quotes.json") print(os.system("scrapy crawl Pavuk -o quotes.json -a url=molodechno--minsk")) elif "Минск -- Моло" == message.text: os.remove("quotes.json") print(os.system("scrapy crawl Pavuk -o quotes.json -a url=minsk--molodechno")) try: with open("quotes.json") as json_file: json_data = json.load(json_file) print(json_data[0]['time'][0][3:5]) data = [i for i in json_data if (datetime.datetime.now().time().hour < int(i['time'][0][:2])) or ((datetime.datetime.now().time().hour == int(i['time'][0][:2])) and datetime.datetime.now().time().minute < int(i['time'][0][3:5]))] if not data: data = json_data[:3] bot.send_message(message.chat.id, f"1. {data[0]['time'][0]} --- {data[0]['time'][1]} {data[0]['path']}\n" f"2. {data[1]['time'][0]} --- {data[1]['time'][1]} {data[1]['path']}\n" f"3. {data[2]['time'][0]} --- {data[2]['time'][1]} {data[2]['path']}\n") except IOError: pass
def addexpense(message): keyboard = telebot.types.ReplyKeyboardMarkup() keyboard.row('coffee', 'food') keyboard.row('/help', '/reset') keyboard.row('/mainmenu') bot.send_message(message.chat.id, "Choose type of expense: ", reply_markup=keyboard) dbworker.set_state(message.chat.id, config.State.S_ENTER_TYPE_EXPENSE, message.chat.username)
def settings_message(message): if message.from_user.id == 460800754: bot.send_message(message.chat.id, "Вес Рост Пол") dbworker.set_state("460800754", config.States.S_EDIT.value) print("-1") else: bot.send_message(message.chat.id, "Нет ноступа!")
def callback_inline(call): if call.message: try: u_id=call.message.chat.id c = sqlite3.connect(config.db_user_dataset) d_c = sqlite3.connect(config.db_database_dump_file) # data=dump_worker.get_data() dump_worker.user_pik_append(c,u_id,dump_worker.chek_pik(c,d_c,u_id,int(call.data))) dump_worker.user_chose_update(c,u_id) unic=dump_worker.search_unic_data(c,d_c,u_id) if type(unic[0])==dict: bot.edit_message_text(chat_id=u_id, message_id=call.message.message_id, text='Вот то что мы сумели найти: ') for i in unic: items=list(i.items()) up_str='' for item in items: if item[1]=='': continue else: up_str=up_str+item[0]+': '+item[1]+'\n' bot.send_message(u_id,text=up_str) foto_way=foto_worker.read_foto(u_id,i['photo']) bot.send_photo(u_id,photo = open(foto_worker.create_way(foto_way), 'rb')) foto_worker.delite_foto(foto_worker.create_way(foto_way)) # foto_worker.delite_foto(foto_way) elif unic[0]=='': bot.send_message(u_id,'Для этой модели/категории пока ничего нет, попробуйте позже или свяжитесь с нами') dump_worker.user_chose_reset(с,u_id) dbworker.set_state(u_id, config.States.S_START_EARNING.value) else: key=create_inline(unic) bot.edit_message_text(chat_id=u_id, message_id=call.message.message_id, text='из списка:',reply_markup=key) except: bot.send_message(call.message.chat.id,text='что-то пошло не так нажмите "Вернуться в меню"')
def user_sending_photo(message): bot.send_message(message.chat.id, "Чи є у тебе хоббі? Яке саме?") dbworker.set_state(message.chat.id, config.States.S_HOBBY.value) info = session.query(Info).filter_by(chat_id=message.chat.id).first() info.komun = message.text session.add(info) session.commit()
def company_add(message): if message.text != 'Хватит': try: dbworker.set_notification_member(message.chat.id, message.text) bot.send_message( message.chat.id, text= 'Отлично. Я запомнил. Может выберем что-то еще или напишите <b>Хватит</b>', parse_mode='HTML') except TypeError: bot.send_message( message.chat.id, text= 'Упс, похоже вы ввели неправильное название компании. Попробуйте ввести название компании еще раз:(' ) else: notification_list = dbworker.get_notification_list(message.chat.id) if notification_list: bot.send_message( message.chat.id, text="Выбранный вами список компаний (Название - Тикер - Биржа)" ) bot.send_message(message.chat.id, text=notification_list) dbworker.set_state(message.chat.id, config.States.S_START.value) else: bot.send_message(message.chat.id, text='''Кажется вы ничего не выбрали.\n Введите список компаний, которые хотите добавить в уведомления.\n Чтобы прекратить ввод, напишите: <b>Хватит</b>''', parse_mode='HTML')
def user_sending_photo(message): bot.send_message(message.chat.id, "Відмінно! Напиши свою пошту.") dbworker.set_state(message.chat.id, config.States.S_SEND_MAIL.value) info = session.query(Info).filter_by(chat_id=message.chat.id).first() info.phone = message.text session.add(info) session.commit()
def startEarning(message): if (message.text == 'Вернуться в меню ⬅'): dbworker.set_state(message.chat.id, config.States.S_START_EARNING.value) openMainMenu(message) if (message.text == 'Steam'): bot.send_message(message.from_user.id, 'данный раздел пока в разработке') keyboard = types.ReplyKeyboardMarkup(row_width=2, resize_keyboard=True) button_back = types.KeyboardButton(text="Вернуться в меню ⬅") keyboard.add(button_back) if (message.text == 'Qiwi'): keyboard = types.ReplyKeyboardMarkup(row_width=2, resize_keyboard=True) button_back = types.KeyboardButton(text="Вернуться в меню ⬅") keyboard.add(button_back) bot.send_message( message.from_user.id, 'введите количество ' + config.Default_Values.D_CURRENCY.value + ' для перевода и номер телефона( без 8 и через пробел )', reply_markup=keyboard) dbworker.set_state(message.chat.id, config.States.S_QIWI.value)
def user_sending_photo(message): bot.send_message(message.chat.id, "Подобається тобі працювати в команді?") dbworker.set_state(message.chat.id, config.States.S_LIKE.value) info = session.query(Info).filter_by(chat_id=message.chat.id).first() info.job = message.text session.add(info) session.commit()
def tour_msg(message): state = dbworker.get_current_state(message.chat.id) balance = getBalance(message.from_user.id) sub_status = checkSubscriber(message.from_user.id) if sub_status: if state == config.States.S_YN_POST.value: bot.send_message(message.chat.id, constants.msg_enter_text, reply_markup=reset_markup()) else: bot.send_message(message.chat.id, constants.msg_enter_text, reply_markup=reset_markup()) dbworker.set_state(message.chat.id, config.States.S_YN_POST.value) else: if balance < 5: bot.send_message(message.chat.id, getStrFailTour(message.from_user.id)) else: if state == config.States.S_YN_TOUR.value: bot.send_message(message.chat.id, constants.msg_cost_5 + constants.msg_enter_text, reply_markup=reset_markup()) else: bot.send_message(message.chat.id, constants.msg_cost_5 + constants.msg_enter_text, reply_markup=reset_markup()) dbworker.set_state(message.chat.id, config.States.S_YN_TOUR.value)
def user_entering_name(message): bot.send_message( message.chat.id, "Отлично имя, запомню! 👌 \nТеперь укажите, пожалуйста, свой номер телефона." ) dbworker.set_state(message.chat.id, config.States.S_ENTER_PHONE.value)
def user_entering_company_name(message): # Фукция обработки названия компании и запроса контактного лица Other_Function.delete_message(config.token, message.chat.id, message.message_id - 1) # удаляет лишнии сообщения бота user_data['Name Company'] = message.text # Вносит занчение названия компании # Если данная функция срабатывает при редактировании элемента, то пеосле переводит на стадию подтверждения корректности заявки # Понимание работы в режиме редактирования происходит за счет значения Choose Edit словаря if user_data['Choose Edit'] == 'ET_CmN': Other_Function.user_current_reply(message) # Переводит на стадию подтверждения корректности заявки с измененным элементом user_data['Choose Edit'] = '' # Обнуляет служебное значение return # Обрывает работу функции bot.send_message(message.chat.id, "Укажите контактное лицо") dbworker.set_state(message.chat.id, config.States.S_ENTER_CONTACT_NAME. value) # Изменяет стадию работы бота с клиентом
def mmm(message): chat_id = message.from_user.id db_users.update_lot(chat_id, 'phone_number', message.contact.phone_number) db_users.update_lot(chat_id, 'status', 'active') res = db_users.confirm(chat_id) row = ['Отменить', 'Перенести', 'Опаздываю'] price = db_users.price_list[res[0]] date = separate_callback_data(res[2]) moth = db_users.moths[date[1]] bot.send_message( text=f'Услуга: {res[0]}\n' f'Мастер: {res[1]}\n' f'Дата: {date[2]} {moth}\n' f'Время: {res[3]} \n' f'Стоимость: {price} ₽\n\n' f'Если что-то пойдет не по плану, используй кнопки под этим сообщением.', chat_id=chat_id, reply_markup=default_keyboard(row)) a = [ "Записаться", 'Мои заказы', 'Контакты', 'Адрес', "Мастера", "Услуги", "Пригласить друга", "Режим работы" ] bot.send_message(chat_id, 'Отлично, спасибо. Я тебя записал!', reply_markup=start_markup(a, 2)) db_users.write_pos(chat_id) dbworker.set_state(str(chat_id), '1')
def choose_travel(message): global travel global country if message.text is None: return else: conn = sqlite3.connect(bot_conf.travel_file) cursor = conn.cursor() cursor.execute( "SELECT travelling.travel_company, travelling.cost, travelling.departure_date, travelling.return_date, travelling.description, travelling.counter FROM travelling WHERE travelling.country=?", (message.text, )) country = message.text t = cursor.fetchall() travel = list(t) bot.send_message(message.chat.id, "Вы выбрали следующую поездку") bot.send_message(message.chat.id, message.text) bot.send_message(message.chat.id, "Туристический оператор: " + str(travel[0][0])) bot.send_message(message.chat.id, "Стоимость поездки: " + str(travel[0][1])) bot.send_message(message.chat.id, "Дата отправления: " + str(travel[0][2])) bot.send_message(message.chat.id, "Дата возвращения: " + str(travel[0][3])) bot.send_message(message.chat.id, "Описание тура: " + str(travel[0][4])) bot.send_message(message.chat.id, "Количество путевок: " + str(travel[0][5])) bot.send_message(message.chat.id, "Хотите её приобрести?") dbworker.set_state(message.chat.id, bot_conf.States.S_BUY_TRAVEL.value)
def cmd_choose_start_graphic(message): if message.text == "Отменить кастомизацию.": cmd_reset(message) else: if message.text == "Своя.": keyboard = types.ReplyKeyboardMarkup(row_width=2) item1 = types.KeyboardButton("Отменить кастомизацию.") keyboard.add(item1) bot.send_message(message.chat.id, "Загрузите заставку 1920x1080 .png", reply_markup=keyboard) conn = sqlite3.connect("database.db") cursor = conn.cursor() sql = "UPDATE user_custom SET Wallpaper='{0}' where user_id={1}".format(message.text.rstrip("."), message.from_user.id) cursor.execute(sql) conn.commit() conn.close() dbworker.set_state(message.chat.id, config.States.S_DOWNLOAD_WALLPAPER.value) if message.text != "Своя.": keyboard = types.ReplyKeyboardMarkup(row_width=2) item1 = types.KeyboardButton("Отменить кастомизацию.") keyboard.add(item1) bot.send_message(message.chat.id, "Оставьте контактные данные или нажмите Отменить", reply_markup=keyboard) conn = sqlite3.connect("database.db") cursor = conn.cursor() sql = "UPDATE user_custom SET Wallpaper='{0}' where user_id={1}".format(message.text.rstrip("."), message.from_user.id) cursor.execute(sql) conn.commit() conn.close() dbworker.set_state(message.chat.id, config.States.S_FINAL.value)