async def process_region(message: types.Message, state: FSMContext): async with state.proxy() as data: data['casenum'] = message.text c.execute("SELECT * FROM rega ORDER BY did DESC LIMIT 0,1") fetch = c.fetchall() next_did = fetch[0][0] + 1 reger = message.chat.first_name region = data['region'] agency = data['agency'] content = data['content'] casenum = data['casenum'] await bot.send_message(message.chat.id, md.text( md.text('Сонымен, ', md.bold(data['regdoc']), " әрекеті таңдалды"), md.text('Құжаттың шығыс тіркеу номері: ', next_did), md.text('Құжатты тіркеген: ', reger), md.text('Құжат жолданатын аймақ: ', region), md.text('Құжат жолданатын мекеме: ', agency), md.text('Құжаттың қысқаша мазмұны: ', content), md.text('Құжат қатысты істің номері: ', casenum), sep='\n\n'), parse_mode=ParseMode.MARKDOWN) c.execute("INSERT INTO rega(did,reger,region,agency,content,casenum) VALUES(?,?,?,?,?,?)", (next_did, reger, region, agency, content, casenum)) conn.commit() # Finish conversation data.state = None await state.finish()
async def process_gender(message: types.Message, state: FSMContext): async with state.proxy() as data: data['gender'] = message.text # Remove keyboard markup = types.ReplyKeyboardRemove() # And send message await bot.send_message(message.chat.id, md.text( md.text('Hi! Nice to meet you,', md.bold(data['name'])), md.text('Age:', data['age']), md.text('Gender:', data['gender']), sep='\n'), reply_markup=markup, parse_mode=ParseMode.MARKDOWN) # Finish conversation data.state = None
async def process_start_command(msg: types.Message): await msg.reply(text(emojize(START_TEXT)))
async def process_help_command(message: types.Message): msg = text('The next commands to help you:', '/add', '/learn', sep='\n') # await message.reply(msg, parse_mode=ParseMode.HTML) await message.reply(msg)
async def create_today_todo_list(message: types.Message, chat: Chat): dt = message.date async with OrmSession() as session: parsed_todo_items = get_bulleted_items_list_from_message(message) if parsed_todo_items: select_stmt = select(Project) \ .where( Project.chat_id == chat.id ) \ .order_by(Project.id) projects_result = await session.execute(select_stmt) project = projects_result.scalars().first() bucket = PeriodBucket.new(project.period_bucket_mode, dt) if bucket.is_valid(): new_todo_list = await project.create_new_for_period_with_items_or_append_to_existing( session, bucket, dt, parsed_todo_items) await session.commit() if project.period_bucket_mode in [ PeriodBucketModes.daily, PeriodBucketModes.onworkingdays ]: reply_message_text = text( text( 'План составлен не с вечера, но и день в день - тоже замечательно. Вот, пожалуйста:' ) if new_todo_list else text('К вашим сегодняшним планам я добавлю:'), text(''), *[ text(':inbox_tray:', parsed_item) for parsed_item in parsed_todo_items ], text(''), text( 'Чтобы свериться со списком запланированных дел, можно набрать /todo' ), sep='\n') else: if project.period_bucket_mode == PeriodBucketModes.weekly: period_bucket_word = 'на текущую неделю' elif project.period_bucket_mode == PeriodBucketModes.monthly: period_bucket_word = 'на текущий месяц' elif project.period_bucket_mode == PeriodBucketModes.yearly: period_bucket_word = 'на текущий год' else: period_bucket_word = '' reply_message_text = text( (text('Я запишу ваши планы на ', period_bucket_word, ':', sep='') if new_todo_list else text( 'К вашим планам', period_bucket_word, 'я добавлю:')) if period_bucket_word else (text('Я запишу ваши планы') if new_todo_list else text('К вашим планам я добавлю:')), text(''), *[ text(':inbox_tray:', parsed_item) for parsed_item in parsed_todo_items ], text(''), text( 'Чтобы свериться со списком запланированных дел, можно набрать /todo' ), sep='\n') await message.reply( emojize(reply_message_text), disable_web_page_preview=True, ) else: await message.reply( text( 'Сегодня выходной, никаких планов, пожалуйста. Ничего не буду добавлять' ), disable_web_page_preview=True, )
async def process_help_command(message: types.Message): msg = text(bold('Я могу ответить на следующие команды:'), '/photo - отправляет фотографию с котом (не спрашивайте зачем)', '/note - отправляет гифку с Эллиотом', '/info - дает сведение о боте', '/create - создает пост', '/history - ахуительная история', sep='\n') await message.reply(msg, parse_mode=ParseMode.MARKDOWN)
def bold_name_with_description(self) -> str: """ Return short repr with description in square brackets if exists """ return md.text( self.bold_name, f'[{self.description}]') if self.description else self.bold_name
async def unknown_message(msg: types.Message): answer = text(emojize('Я не знаю, что с этим делать :astonished:'), italic('\nЯ просто напомню,'), 'что есть', code('команда'), '/help') await msg.reply(answer, parse_mode=ParseMode.MARKDOWN)
async def answ(message: types.Message): await message.answer(fmt.text('Напиши', fmt.hbold('/start')), parse_mode="HTML")
def failed_on_captcha(train_order: TrainOrder): msg = text(':warning: Blocked on captcha :warning:', text(bold('Information:'), train_order)) return emojize(msg)
@dp.message_handler(commands=['hi1']) async def process_hi1_command(message: types.Message): await message.reply("Первое - изменяем размер клавиатуры", reply_markup=kb.greet_kb1) help_message = text( "Приветствуем вас в меню помощи книжного бота! Данный бот дает представление о самых популярных писателях в жанрах: Ужасы, Триллер, Фантастика, а также о самых популярных авторах в данных жанрах и их наиболее популярных произведениях" "Чтобы получить интересующую вас информацию, нажимайте соответствующие кнопки в меню выбора." "/start - начать работу" "/help - получить информацию о боте" ) @dp.message_handler(commands=['help']) async def process_help_command(message: types.Message): await message.reply(help_message) if __name__ == '__main__': executor.start_polling(dp)
from configure import BOT_TOKEN import key as kb logging.basicConfig(level=logging.INFO) # Инициализируем бота и диспетчера bot = aiogram.Bot(token=BOT_TOKEN) dp = aiogram.Dispatcher(bot) # Обработка команды help help_message = text( "Бот предоставляет расписание занятий:\n" "● студента по номеру его группы (пример: 16КБ(с)РЗПО);\n" "● преподавателя по ФИО (пример: Иванов Иван Иванович);\n" "Реализован выбор отображения расписания:\n" "- на день;\n" "- на неделю;\n" "Функция оповещения позволяет настроить бота для напоминания о занятиях в университете.\n\n" "Доступные команды:\n" "/start - Запуск бота. Выбор роли студент/преподаватель\n" "/notification - Настройка оповещений\n" "/help - Помощь. Краткое руководство по использованию бота") @dp.callback_query_handler(lambda c: c.data == 'btn_back') async def callback_button_back(callback_query: types.CallbackQuery): await bot.answer_callback_query(callback_query.id) await bot.send_message(callback_query.from_user.id, 'Выберите', reply_markup=kb.inline_kb_main)
async def help(message: types.Message): message_text = text(cupsharing.messagehi, '/rent') await message.reply(message_text, parse_mode=ParseMode.MARKDOWN)
from aiogram.utils.markdown import hitalic, hbold, text from aiogram.utils.emoji import emojize SELECTING_ACTIVITY = emojize( 'Выбери занятие, которое хочешь начать :arrow_down::arrow_down::arrow_down:' ) SELECTING_SUBACTIVITY = emojize( 'Выбери подзанятие, которое хочешь начать :arrow_down::arrow_down::arrow_down:' ) STARTED_ACTIVITY = text(emojize(':rocket: Ты начал(-a) занятие "'), hitalic('{activity_type_name}'), '".', sep="") STARTED_SUBACTIVITY = text(text(emojize(':rocket: Ты начал(-a) занятие'), hitalic('{activity_type_name}')), text(emojize(":open_file_folder: Подзанятие:"), hitalic('{subactivity_name}')), sep="\n") STOPPED_ACTIVITY = text( emojize(':white_check_mark: Занятие завершено ({activity_type_name})'), "", emojize( ':stopwatch: Продолжительность: {hours} часов {minutes} минут {seconds} секунд' ), emojize( '🧮 Всего за сегодня: {total_hours} часов {total_minutes} минут {total_seconds} секунд' ),
async def display_result(message: types.message): ''' Функция обработки команды /display {param} :param message: сообщение от пользоваетля ''' arg: str = message.get_args() markup=types.ReplyKeyboardRemove() # Если параметр быд задан, и он является числом if arg: if arg.isnumeric(): if telbot.get(message.from_user.id): if len(telbot.get(message.from_user.id)) >= int(arg) > 0: row = telbot[message.from_user.id][int(arg)-1] if row: # Были ли найдены вакансии по этому запросу if row[2]: # Если запрос найден, то открываем файл с результатами with open(file_folder + "/" + row[5], 'r') as f: result: json = json.load(f) # Формируем строки вывода description_skills: dict = result['description'] key_skills: dict = result['keyskills'] salary_average: dict = result['salary'] # Для навыков из описания sum_description: str = "" for key, value in list(description_skills.items())[:10]: sum_description += key + " - " + str(value) + "%\n" # Для навыков из ключевых навыков sum_keyskills: str = "" for key, value in list(key_skills.items())[:10]: sum_keyskills += key + " - " + str(value) + "%\n" sum_salaries: str = "" # Для зарплат for key, value in salary_average.items(): sum_salaries += key + " от: " + '{:6.0f}'.format(value[0]) + "₽. до: " + '{:6.0f}'.format(value[1]) + "₽.\n" # Выводим полученные результаты sum_description = "10 навыков взятых из описания вакансии:\n\n" + sum_description sum_keyskills = "10 знаний взятых из ключевых навыков:\n\n" + sum_keyskills sum_salaries = "Усредненная зарплата для данной выборки:\n\n" + sum_salaries await bot.send_message(message.chat.id, sum_description) await bot.send_message(message.chat.id, sum_keyskills) await bot.send_message(message.chat.id, sum_salaries) else: await bot.send_message(message.chat.id, md.text("По этому запросу не найдено ни одной вакансии.")) else: # Если номер запроса указан неверно await message.reply(f"Неверный параметр: {arg}") else: # Возможны случаи ( telegram bot ) был перезапущен, и запросы из # кэша пропали. Тогда нужно запустить команду /list all и кэш будет восстановлен await bot.send_message(message.chat.id, md.text("Необходимо обновить данные с помощью команды", md.bold("/list all")), reply_markup=markup, parse_mode=ParseMode.MARKDOWN, ) else: # Если параметр не является числом, то выводим сообщение об ошибке await message.reply("Неправильный формат команды.") else: # Если у команды не было задано параметров, то выводим текущий запрос if current_telbot.get(message.from_user.id): region = str(current_telbot[message.from_user.id][0]).replace("None", "Не задан") request = str(current_telbot[message.from_user.id][1]).replace("None","Не задан") await bot.send_message(message.chat.id, md.text( md.text("Текущий запрос:\nрегион: ", md.bold(region)), md.text("\nзапрос: ", md.bold(request)) ), reply_markup=markup, parse_mode=ParseMode.MARKDOWN, ) else: await message.reply("Текущий запрос не сформирован.")
async def default(message: types.Message): message_text = text(emojize('Я не знаю, что с этим делать :astonished:'), italic('\nЯ просто напомню,'), 'что есть', '/help') await message.reply(message_text)
# Done! Send media group await message.reply_media_group(media=media) # @dp.message_handler() # async def echo_message(msg: types.Message): # await bot.send_message(msg.from_user.id, msg.text) help_message = text("Это урок по клавиатурам.", "Доступные команды:\n", "/start - приветствие", "\nШаблоны клавиатур:", "/hi1 - авто размер", "/hi2 - скрыть после нажатия", "/hi3 - больше кнопок", "/hi4 - кнопки в ряд", "/hi5 - больше рядов", "/hi6 - запрос локации и номера телефона", "/hi7 - все методы" "/rm - убрать шаблоны", "\nИнлайн клавиатуры:", "/1 - первая кнопка", "/2 - сразу много кнопок", sep="\n") @dp.message_handler(commands=['help']) async def process_help_command(message: types.Message): await message.reply(help_message) if __name__ == '__main__':
def updated_captcha_session(train_order: TrainOrder): msg = text(':ok: Updated captcha, everything is fine :ok', text(bold('Information:', train_order)), sep='\n') return emojize(msg)
async def start_command(message: types.Message): answer = text('Привет!\nЭто поисковик по фильмам. Используй', bold('/help'), 'чтобы узнать больше') await message.reply(answer)
def successful_ticket_order(train_order: TrainOrder) -> str: msg = text(text('Ticket order was successful! :tada: :tada:'), text(bold('Information:'), train_order), sep='\n') return emojize(msg)
async def process_description(message: Message, state: FSMContext): description = message.text async with state.proxy() as data: data['description'] = description db = SessionLocal() tuning = create_tuning(db, message, data) db.close() await message.answer(fmt.text( fmt.text(fmt.hunderline("Фирма лодки:"), data['boat']), fmt.text(fmt.hunderline("Фирма паруса:"), data['sail_firm']), fmt.text(fmt.hunderline("Модель паруса:"), data['sail_model']), fmt.text(fmt.hunderline("Место:"), data['place']), fmt.text(fmt.hunderline("Ветер:"), data['wind'], 'kt'), fmt.text(fmt.hunderline("Порывы:"), data['gusts'], 'kt'), fmt.text(fmt.hunderline("Высота волн:"), data['wave_height'], 'm'), fmt.text(fmt.hunderline("Длина волн:"), data['wave_length']), fmt.text(fmt.hunderline("Вес экипажа:"), data['crew_weight'], 'kg'), fmt.text(fmt.hunderline("Завал:"), data['mast_rake'], 'm'), fmt.text(fmt.hunderline("Пребенд:"), data['prebend'], 'mm'), fmt.text(fmt.hunderline("Натяжение на штаге:"), data['tension']), fmt.text(fmt.hunderline("Дырка степса:"), data['mast_step']), fmt.text(fmt.hunderline("Упор:"), data['chocks']), fmt.text(fmt.hunderline("Длина краспиц:"), data['spreraders_leng'], 'mm'), fmt.text(fmt.hunderline("Качество завала:"), data['quality']), fmt.text(fmt.hunderline("Описание:"), data['description']), sep="\n"), parse_mode="HTML", reply_markup=tuning_inline_kb(tuning.id)) await message.answer( 'Настройка записана. Просмотр, изменение и удаление настройки выполняется в команде /show.' 'Для продолжения работы с ботом введите /help.') await state.finish()
async def send_weather_value(call: types.CallbackQuery): weather_list = mods.weather() await call.message.answer(fmt.text( fmt.text('Погода в Жлобине'), fmt.text('Вчера в это время: ' + weather_list[0]), fmt.text('Сейчас: ' + weather_list[1]), fmt.text('Ощущается как : ' + weather_list[2]), fmt.text('Ветер: ' + weather_list[3]), fmt.text('Влажность: ' + weather_list[4]), fmt.text('Давление: ' + weather_list[5]), fmt.text('Световой день: ' + weather_list[6]), fmt.text(weather_list[7]), fmt.text(weather_list[8]), fmt.text(weather_list[9]), sep='\n'), parse_mode='HTML')
async def start(message: types.Message): msg = text(bold('''Данный бот был создан как "предложка" статей для телеграм канала Termux Su Сам бот имеет много полезных функций, но лишь некоторые из них вы будете использовать на практике'''), '/create - создает пост', '/help - помощь. Как неожиданно', sep='\n') await message.reply(msg, parse_mode=ParseMode.MARKDOWN, reply_markup=kb.clean_kb)
async def actions_handler(message: types.Message): # Регистрация пользователя if not db.subscriber_exists( message.from_user.id) and act.registrationStarted( message.from_user.id): logging.info( "actions_handler()::setCourseAndGroup mode \'{0}\' command sent from user {1}" .format(message.text, message.from_user.full_name)) userInput = message.text.split('.') try: course = int(userInput[0]) group = int(userInput[1]) except (ValueError, IndexError): course = -1 group = -1 if not check_course_group(course, group): await message.answer("Неверные данные! Попробуйте ещё раз:\n/start" ) act.stopReg(message.from_user.id) else: db.add_subscriber(message.from_user.id, 0, course, group) act.stopReg(message.from_user.id) await message.answer( "Вы успешно зарегистрировались!\n Используйте /help для просмотра списка команд." ) # Поиск по названию elif act.searchStarted(message.from_user.id): logging.info( "actions_handler()::search mode \'{0}\' command sent from user {1}" .format(message.text, message.from_user.full_name)) if not len(message.text): await message.answer("Задан пустой запрос.") else: dbResponse = db.search_by_name(message.text) results = act.generateSearchPage(dbResponse, message.from_user.id) # print(results) if results: await message.answer(f"Найдено результатов: {len(results)}") results = "\n".join(results[0:4]) results += "\n Страница {0}/{1}".format( act.search_pages_position(message.from_user.id), act.search_pages_count(message.from_user.id)) if act.search_pages_count(message.from_user.id) == 0: await message.answer("Ничего не найдено!") else: if act.search_pages_count(message.from_user.id) == 1: kb = types.InlineKeyboardMarkup() else: kb = act.searchKeyboardBegin() msg = await message.answer(results, reply_markup=kb) act.stopSearch(message.from_user.id) # Отправка файла пользователю elif message.text.startswith("/download"): logging.info( "actions_handler()::sendFile mode \'{0}\' command sent from user {1}" .format(message.text, message.from_user.full_name)) try: user_id = message.from_user.id num_id = int(message.text[9:]) file_id = db.get_file(num_id) await bot.send_document(user_id, file_id) except (ValueError, IndexError): await message.answer("Неверные данные! Попробуйте ещё раз.") # /files elif act.isFilesMode(message.from_user.id): # print(act.statements[message.from_user.id]) # Вывод файлов/папок 0 уровень[выбор семестра] if act.filesLevel(message.from_user.id) == 0 or ( (act.filesLevel(message.from_user.id) == 1 or act.filesLevel(message.from_user.id) == 2) and message.text == '⤴️На уровень выше'): logging.info( "actions_handler()::FilesStore mode(level0) \'{0}\' command sent from user {1}({2})" .format(message.text, message.from_user.full_name, message.from_user.id)) # print("l0 start ", act.statements[message.from_user.id]) act.reset(message.from_user.id) act.startFilesMode(message.from_user.id) semesters_kb = act.semestersKeyboard() await message.answer(text(bold("Выберите семестр:")), reply_markup=semesters_kb, parse_mode=ParseMode.MARKDOWN_V2) # print("l0 end ", act.statements[message.from_user.id]) # Вывод файлов/папок 1 уровень[вывод доступных предметов в семестре] elif act.filesLevel(message.from_user.id) == 1 or ( act.filesLevel(message.from_user.id) == 3 and message.text == '⤴️На уровень выше'): logging.info( "actions_handler()::FilesStore mode(level1) \'{0}\' command sent from user {1}({2})" .format(message.text, message.from_user.full_name, message.from_user.id)) if message.text == '⤴️На уровень выше': act.statements[message.from_user.id]["filesLevel"] = 1 act.statements[message.from_user.id]["currentDiscipline"] = "" if act.semester(message.from_user.id) == 0: try: act.statements[message.from_user.id]["semester"] = int( message.text[0]) except ValueError: act.reset(message.from_user.id) await message.answer("Неверные данные!") disciplines_list = db.get_disciplines( message.from_user.id, act.semester(message.from_user.id)) # print("l1 ", act.statements[message.from_user.id]) if disciplines_list: kb = act.generateDisciplinesKeyboard(disciplines_list) act.fLevelUp(message.from_user.id) await message.answer(text(bold("Выберите желаемый предмет:")), reply_markup=kb, parse_mode=ParseMode.MARKDOWN_V2) else: act.reset(message.from_user.id) await message.answer("<Пусто>") # Вывод файлов/папок 2 уровень[вывод доступных подразделов для выбранного предмета] elif act.filesLevel(message.from_user.id) == 2 or ( act.filesLevel(message.from_user.id) == 4 and message.text == '⤴️На уровень выше'): logging.info( "actions_handler()::FilesStore mode(level2) \'{0}\' command sent from user {1}({2})" .format(message.text, message.from_user.full_name, message.from_user.id)) if message.text == '⤴️На уровень выше': act.statements[message.from_user.id]["filesLevel"] = 2 act.statements[message.from_user.id]["currentFolder"] = "" if not act.currentDiscipline( message.from_user.id ) and message.text != '⤴️На уровень выше': act.statements[ message.from_user.id]["currentDiscipline"] = message.text folders_list = db.get_folders_by_discipline( message.from_user.id, act.semester(message.from_user.id), act.currentDiscipline(message.from_user.id)) # print("l2 ", act.statements[message.from_user.id]) if folders_list: kb = act.generateFoldersKeyboard(folders_list) act.fLevelUp(message.from_user.id) await message.answer(text(bold("Выберите желаемый раздел:")), reply_markup=kb, parse_mode=ParseMode.MARKDOWN_V2) else: act.reset(message.from_user.id) await message.answer("<Пусто>") # Вывод файлов/папок 3 уровень[вывод файлов из папки] elif act.filesLevel(message.from_user.id) == 3 or ( act.filesLevel(message.from_user.id) == 5 and message.text == '⤴️На уровень выше'): logging.info( "actions_handler()::FilesStore mode(level3) \'{0}\' command sent from user {1}({2})" .format(message.text, message.from_user.full_name, message.from_user.id)) if message.text == '⤴️На уровень выше': act.statements[message.from_user.id]["filesLevel"] = 3 if not act.currentFolder(message.from_user.id): act.statements[ message.from_user.id]["currentFolder"] = message.text[2:] files_list = db.get_files_from_folder( message.from_user.id, act.semester(message.from_user.id), act.currentDiscipline(message.from_user.id), act.currentFolder(message.from_user.id)) # print("l3 ", act.statements[message.from_user.id]) if files_list: kb = act.generateFilesKeyboard(files_list) act.fLevelUp(message.from_user.id) await message.answer(text(bold("Выберите желаемый файл:")), reply_markup=kb, parse_mode=ParseMode.MARKDOWN_V2) else: act.reset(message.from_user.id) await message.answer("<Пусто>") # Вывод файлов/папок 4 уровень[страница с информацией о файле] elif act.filesLevel(message.from_user.id) == 4: logging.info( "actions_handler()::FilesStore mode(level4) \'{0}\' command sent from user {1}({2})" .format(message.text, message.from_user.full_name, message.from_user.id)) file_record = db.get_file_record( message.from_user.id, act.semester(message.from_user.id), act.currentDiscipline(message.from_user.id), act.currentFolder(message.from_user.id), message.text[2:]) if file_record: file_page = act.generateFilePage2(file_record) kb = act.FolderLevelUpKeyboard() act.fLevelUp(message.from_user.id) file_id = db.get_file(file_record[7]) await message.answer(file_page, reply_markup=kb) await bot.send_document(message.from_user.id, file_id) else: act.reset(message.from_user.id) await message.answer("<Пусто>") # Выбор пути для загрузки elif act.isUploadMode(message.from_user.id): logging.info( "actions_handler()::Upload mode \'{0}\' command sent from user {1}({2})" .format(message.text, message.from_user.full_name, message.from_user.id)) if act.semester( message.from_user.id) == 0 and message.text[0] in ('1', '2'): act.statements[message.from_user.id]["semester"] = int( message.text[0]) disciplines_list = db.get_disciplines( message.from_user.id, act.semester(message.from_user.id)) if disciplines_list: kb = act.generateDisciplinesKeyboard(disciplines_list, False) await message.answer(text(bold("Выберите желаемый предмет:")), reply_markup=kb, parse_mode=ParseMode.MARKDOWN_V2) else: act.reset(message.from_user.id) await message.answer("Не удалось получить список дисциплин!") elif act.currentDiscipline(message.from_user.id) == "": act.statements[ message.from_user.id]["currentDiscipline"] = message.text folders_list = db.get_folders_by_discipline( message.from_user.id, act.semester(message.from_user.id), act.currentDiscipline(message.from_user.id)) if folders_list: kb = act.generateFoldersKeyboard(folders_list, False) await message.answer(text(bold("Выберите желаемый раздел:")), reply_markup=kb, parse_mode=ParseMode.MARKDOWN_V2) else: act.reset(message.from_user.id) await message.answer("Не удалось получить список разделов!") elif act.currentFolder(message.from_user.id) == "": act.statements[ message.from_user.id]["currentFolder"] = message.text[2:] if (act.semester(message.from_user.id) != 0) and (act.currentDiscipline(message.from_user.id) != "") and (db.folder_exists( act.currentFolder(message.from_user.id))): await message.answer( "Файл будет загружен в \n{0} семестр\\{1}\\{2}\\".format( act.semester(message.from_user.id), act.currentDiscipline(message.from_user.id), act.currentFolder(message.from_user.id))) await message.answer("Ожидание отправки...") else: act.reset(message.from_user.id) await message.answer("Не найдена указанная папка!") # Выбор пути для удаления elif act.isDeleteMode(message.from_user.id): logging.info( "actions_handler()::Delete mode \'{0}\' command sent from user {1}({2})" .format(message.text, message.from_user.full_name, message.from_user.id)) if act.semester( message.from_user.id) == 0 and message.text[0] in ('1', '2'): act.statements[message.from_user.id]["semester"] = int( message.text[0]) disciplines_list = db.get_disciplines( message.from_user.id, act.semester(message.from_user.id)) # print(act.semester(message.from_user.id), disciplines_list) if disciplines_list: kb = act.generateDisciplinesKeyboard(disciplines_list, False) await message.answer(text(bold("Выберите желаемый предмет:")), reply_markup=kb, parse_mode=ParseMode.MARKDOWN_V2) else: act.reset(message.from_user.id) await message.answer("Не удалось получить список дисциплин!") elif act.currentDiscipline(message.from_user.id) == "": act.statements[ message.from_user.id]["currentDiscipline"] = message.text folders_list = db.get_folders_by_discipline( message.from_user.id, act.semester(message.from_user.id), act.currentDiscipline(message.from_user.id)) if folders_list: kb = act.generateFoldersKeyboard(folders_list, False) await message.answer(text(bold("Выберите желаемый раздел:")), reply_markup=kb, parse_mode=ParseMode.MARKDOWN_V2) else: act.reset(message.from_user.id) await message.answer("Не удалось получить список разделов!") elif act.currentFolder(message.from_user.id) == "": act.statements[ message.from_user.id]["currentFolder"] = message.text[2:] files_list = db.get_files_from_folder( message.from_user.id, act.semester(message.from_user.id), act.currentDiscipline(message.from_user.id), act.currentFolder(message.from_user.id)) if files_list: kb = act.generateFilesKeyboard(files_list, False) await message.answer(text(bold("Выберите желаемый файл:")), reply_markup=kb, parse_mode=ParseMode.MARKDOWN_V2) else: act.reset(message.from_user.id) await message.answer("Не удалось получить список файлов!") else: fname = message.text[2:] file_record = db.get_file_record( message.from_user.id, act.semester(message.from_user.id), act.currentDiscipline(message.from_user.id), act.currentFolder(message.from_user.id), fname) if file_record: db.delete_file(message.from_user.id, act.semester(message.from_user.id), act.currentDiscipline(message.from_user.id), act.currentFolder(message.from_user.id), fname) await message.answer( "Успешно удалено: \n{0} семестр\\{1}\\{2}\\{3}".format( act.semester(message.from_user.id), act.currentDiscipline(message.from_user.id), act.currentFolder(message.from_user.id), fname)) act.reset(message.from_user.id) else: act.reset(message.from_user.id) await message.answer("Файл не найден!") # /mkdir elif act.isMkdirMode(message.from_user.id): logging.info( "actions_handler()::Mkdir mode \'{0}\' command sent from user {1}({2})" .format(message.text, message.from_user.full_name, message.from_user.id)) if act.semester( message.from_user.id) == 0 and message.text[0] in ('1', '2'): act.statements[message.from_user.id]["semester"] = int( message.text[0]) disciplines_list = db.get_disciplines( message.from_user.id, act.semester(message.from_user.id)) # print(act.semester(message.from_user.id), disciplines_list) if disciplines_list: kb = act.generateDisciplinesKeyboard(disciplines_list, False) await message.answer(text(bold("Выберите желаемый предмет:")), reply_markup=kb, parse_mode=ParseMode.MARKDOWN_V2) else: act.reset(message.from_user.id) await message.answer("Не удалось получить список дисциплин!") elif act.currentDiscipline(message.from_user.id) == "": act.statements[ message.from_user.id]["currentDiscipline"] = message.text folders_list = db.get_folders_by_discipline( message.from_user.id, act.semester(message.from_user.id), act.currentDiscipline(message.from_user.id)) if folders_list: await message.answer(text( bold("Введите имя для новой папки: ")), parse_mode=ParseMode.MARKDOWN_V2) else: act.reset(message.from_user.id) await message.answer("Не удалось получить список разделов!") else: new_dir = message.text if db.folder_exists(new_dir): act.reset(message.from_user.id) await message.answer( "Папка \"{0}\" уже существует!".format(new_dir)) else: db.make_dir(message.from_user.id, act.semester(message.from_user.id), act.currentDiscipline(message.from_user.id), new_dir) await message.answer( "Успешно создано: \n{0} семестр\\{1}\\{2}\\".format( act.semester(message.from_user.id), act.currentDiscipline(message.from_user.id), new_dir)) report = f"New dir {new_dir} created by: {message.from_user.full_name}({message.from_user.id})" await bot.send_message(AGENT_ID, report) act.reset(message.from_user.id) # /rmdir elif act.isRmdirMode(message.from_user.id): logging.info( "actions_handler()::Mkdir mode \'{0}\' command sent from user {1}({2})" .format(message.text, message.from_user.full_name, message.from_user.id)) if act.semester( message.from_user.id) == 0 and message.text[0] in ('1', '2'): act.statements[message.from_user.id]["semester"] = int( message.text[0]) disciplines_list = db.get_disciplines( message.from_user.id, act.semester(message.from_user.id)) # print(act.semester(message.from_user.id), disciplines_list) if disciplines_list: kb = act.generateDisciplinesKeyboard(disciplines_list, False) await message.answer(text(bold("Выберите желаемый предмет:")), reply_markup=kb, parse_mode=ParseMode.MARKDOWN_V2) else: act.reset(message.from_user.id) await message.answer("Не удалось получить список дисциплин!") elif act.currentDiscipline(message.from_user.id) == "": act.statements[ message.from_user.id]["currentDiscipline"] = message.text folders_list = db.get_folders_by_discipline( message.from_user.id, act.semester(message.from_user.id), act.currentDiscipline(message.from_user.id)) if folders_list: kb = act.generateFoldersKeyboard(folders_list, False) await message.answer(text(bold("Выберите желаемый раздел:")), reply_markup=kb, parse_mode=ParseMode.MARKDOWN_V2) else: act.reset(message.from_user.id) await message.answer("Не удалось получить список разделов!") else: dir_to_remove = message.text[2:] if not db.folder_exists(dir_to_remove): act.reset(message.from_user.id) await message.answer( "Папка \"{0}\" не найдена!".format(dir_to_remove)) else: db.delete_dir(message.from_user.id, act.semester(message.from_user.id), act.currentDiscipline(message.from_user.id), dir_to_remove) await message.answer( "Успешно удалено: \n{0} семестр\\{1}\\{2}\\".format( act.semester(message.from_user.id), act.currentDiscipline(message.from_user.id), dir_to_remove)) report = f"Dir {dir_to_remove} is deleted by: {message.from_user.full_name}({message.from_user.id})" await bot.send_message(AGENT_ID, report) act.reset(message.from_user.id) else: logging.info( "actions_handler():: UNKNOWN \'{0}\' command sent from user {1}". format(message.text, message.from_user.full_name)) await message.answer("Неизвестная команда!")
async def status_report(message: types.Message, chat: Chat): if message.get_command() == '/wsr': start_dt = message.date + relativedelta( weekday=WE(-1), hour=0, minute=0, second=0, microsecond=0) end_dt = message.date + relativedelta(weekday=WE, hour=0, minute=0, second=0, microsecond=0) \ - relativedelta(days=1) else: start_dt = message.date + relativedelta( day=1, hour=0, minute=0, second=0, microsecond=0) end_dt = message.date + relativedelta(months=1, day=1, hour=0, minute=0, second=0, microsecond=0, days=-1) grid = generate_grid(start_dt, end_dt) grid = [[[i[0], i[1]] for i in week] for week in grid] async with OrmSession() as session: select_stmt = select(Project) \ .where( Project.chat_id == chat.id ) \ .order_by(Project.id) projects_result = await session.execute(select_stmt) project = projects_result.scalars().first() from_period = PeriodBucket.new(project.period_bucket_mode, start_dt) todo_lists = await project.get_since(session, from_period, with_log_messages=True) message_content = [] for todo_list in todo_lists: bucket = PeriodBucket.get_by_key(todo_list.period_bucket_key) for todo_item in todo_list.items: message_content.append( text(':spiral_calendar_pad:', str(bucket), ':pushpin:', todo_item.text)) for log_message in todo_item.notes: message_content.append( text(':paperclip:', log_message.text)) message_content.append(text('')) if bucket.start(): for week in grid: for i in week: if i[1].date() == bucket.start().date(): i[0] = i[0].replace('white', 'purple') import io file = io.StringIO(emojize(text(*message_content, sep='\n'))) for week in grid: for i in week: if i[1].date() == datetime.now().date(): if 'white' in i[0] or 'black' in i[0]: i[0] = i[0].replace('circle', 'large_square') else: i[0] = i[0].replace('circle', 'square') grid = [[i[0] for i in week] for week in grid] await message.answer_document( file, caption=emojize( text(text( f'Отчет о проделанной работе с {start_dt.date()} по {end_dt.date()}' ), text(''), text('Пн Вт Ср Чт Пт Сб Вс'), *[text(*week, sep='') for week in grid], sep='\n')))
from aiogram import Bot, Dispatcher, types from aiogram.types import InlineKeyboardMarkup, InlineKeyboardButton from aiogram.utils import executor from aiogram.utils.markdown import text from STEP.config import TOKEN bot = Bot(token=TOKEN) dp = Dispatcher(bot) init_list = [] # В этот список записываем инициалы start_text = text( "Приветствую.\nЭто бот для добавления инициалов и их вывода.", "\nДля добавления или показа инициалов воспользуйтесь кнопками ниже:") # Инлайн кнопки btn_add_fn = InlineKeyboardButton("Добавить инициал имени", callback_data='btnf') # fn - first name btn_add_ln = InlineKeyboardButton("Добавить инициал фамилии", callback_data='btnl') # ln - last name btn_show = InlineKeyboardButton("Показать инициалы", callback_data='btns') # Функция для маркапа инлайн кнопки. Чтобы не прописывать "InlineKeyboardMarkup" или создавать овер дохера экземпляров def markuping(button): markup = InlineKeyboardMarkup().add(button) return markup # Команда "Старт" @dp.message_handler(commands='start')
async def create_tomorrow_todo_list(message: types.Message, chat: Chat): dt = message.date async with OrmSession() as session: parsed_todo_items = get_bulleted_items_list_from_message(message) if parsed_todo_items: select_stmt = select(Project) \ .where( Project.chat_id == chat.id ) \ .order_by(Project.id) projects_result = await session.execute(select_stmt) project = projects_result.scalars().first() bucket = PeriodBucket.new(project.period_bucket_mode, dt).get_next() new_todo_list = await project.create_new_for_period_with_items_or_append_to_existing( session, bucket, dt, parsed_todo_items) await session.commit() if project.period_bucket_mode == PeriodBucketModes.daily: reply_message_text = text( text('Я запишу, что вы запланировали:') if new_todo_list else text('К тому, что вы уже запланировали я добавлю:'), text(''), *[ text(':inbox_tray: ', parsed_item) for parsed_item in parsed_todo_items ], text(''), text( 'Завтра я напомню об этом. Чтобы посмотреть планы в любой момент, можно набрать /planned' ), sep='\n') else: if project.period_bucket_mode == PeriodBucketModes.weekly: period_bucket_word = 'на следующую неделю' elif project.period_bucket_mode == PeriodBucketModes.monthly: period_bucket_word = 'на следующий месяц' elif project.period_bucket_mode == PeriodBucketModes.yearly: period_bucket_word = 'на следующий год' else: period_bucket_word = '' reply_message_text = text( (text('Я запишу ваши планы на ', period_bucket_word, ':', sep='') if new_todo_list else text('К вашим планам', period_bucket_word, 'я добавлю:')) if period_bucket_word else (text('Я запишу ваши планы') if new_todo_list else text('К вашим планам я добавлю:')), text(''), *[ text(':inbox_tray: ', parsed_item) for parsed_item in parsed_todo_items ], text(''), text( 'Завтра я напомню об этом. Чтобы посмотреть планы в любой момент, можно набрать /planned' ), sep='\n') await message.reply( emojize(reply_message_text), disable_web_page_preview=True, )
from aiogram import Bot, Dispatcher, executor, types from aiogram.utils.markdown import text from key_board import kb_variki, kb_film, kb_exhibition from bot import Helper API_TOKEN = '1626805312:AAE2uthUy5NTzMoi0vCxkvDECGHPobPmb5c' logging.basicConfig(level=logging.INFO) bot = Bot(token=API_TOKEN) dp = Dispatcher(bot) help_message = text( "Доступные команды:\n", "/variki - какие варики", sep="\n" ) helper = Helper() @dp.message_handler(commands=['help', 'start']) async def process_help_command(message: types.Message): await message.reply(help_message) @dp.message_handler(commands=['variki']) async def process_variki(message: types.Message): await message.reply("Здорово!\n Какие варики конкретно интересуют, братишка?", reply_markup=kb_variki)
async def unknown_message(msg: types.Message): message_text = text('What the f**k is this?') await msg.reply(message_text)
async def any_text_message2(message: types.Message): await message.answer(f"Привет, <b>{fmt.quote_html(message.text)}</b>", parse_mode=types.ParseMode.HTML) # А можно и так: await message.answer(fmt.text("Привет,", fmt.hbold(message.text)), parse_mode=types.ParseMode.HTML)
async def process_help_command(msg: types.Message): await msg.reply(text(emojize(HELP_TEXT)), parse_mode=ParseMode.HTML)
async def process_git(message: types.Message, state: FSMContext): username = message.text.lower() try: user_id = message.chat.id except: await message.answer("Error with user_id") return user_locale = await Database.get_user_locale(user_id) if not user_locale: async with state.proxy() as data: user_locale = data['locale'] git_pattern = re.compile("^[a-z\d](?:[a-z\d]|-(?=[a-z\d])){0,38}$") if git_pattern.match(username) is None or not await validate_username( username): await message.answer(Localize.IncorrectName[user_locale]) return # TODO: rewrite if await Database.get_telegram_from_git(username): if await Database.get_telegram_from_git(username) != user_id: await message.answer(Localize.UsedName[user_locale]) return await state.finish() markup = types.ReplyKeyboardMarkup(resize_keyboard=True, selective=True) if user_locale == 'en': markup.add("Today's list", "Rules") markup.add("My GitHub", "Change GitHub Profile") markup.add("Contact Us") else: markup.add("Список на сегодня", "Правила") markup.add("Мой GitHub", "Изменить профиль GitHub") markup.add("Обратная связь") # only update username if user already exists if await Database.get_git_from_telegram(user_id): await Database.update_username(user_id, username) await message.answer( Localize.YourGithub[user_locale].format(username=username), reply_markup=markup) return await Database.add_to_db(user_id, username, data['locale']) await message.answer( Localize.Registered[user_locale].format(username=username)) if user_locale == 'en': await message.answer(md.text( md.text('Now you are participating! Use ', md.bold("Rules"), ' button to find out more.', sep='')), reply_markup=markup, parse_mode=ParseMode.MARKDOWN) else: await message.answer(md.text( md.text('Теперь ты полноценный участник! Воспользуйся кнопкой ', md.bold("Правила"), ', чтобы узнать подробнее.', sep='')), reply_markup=markup, parse_mode=ParseMode.MARKDOWN) now = datetime.datetime.now() # don't send if time is between 11:45 and 12 if now.hour > 11 and now.hour < 12 and now.minutes > 50: await message.answer( Localize.WaitLittle[user_locale].format(minutes=60 - now.minutes)) else: # make a list for him otherwise await pipeline_for_user(user_id)