예제 #1
0
파일: a.py 프로젝트: sanjarbagdaulet/test
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()
예제 #2
0
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
예제 #3
0
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)
예제 #5
0
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,
                )
예제 #6
0
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)
예제 #7
0
 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
예제 #8
0
async def unknown_message(msg: types.Message):
    answer = text(emojize('Я не знаю, что с этим делать :astonished:'),
                  italic('\nЯ просто напомню,'), 'что есть',
                  code('команда'), '/help')
    await msg.reply(answer, parse_mode=ParseMode.MARKDOWN)
예제 #9
0
async def answ(message: types.Message):
    await message.answer(fmt.text('Напиши', fmt.hbold('/start')),
                         parse_mode="HTML")
예제 #10
0
def failed_on_captcha(train_order: TrainOrder):
    msg = text(':warning: Blocked on captcha :warning:',
               text(bold('Information:'), train_order))
    return emojize(msg)
예제 #11
0








@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)
예제 #12
0
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)

예제 #13
0
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} секунд'
    ),
예제 #15
0
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("Текущий запрос не сформирован.")
예제 #16
0
async def default(message: types.Message):
    message_text = text(emojize('Я не знаю, что с этим делать :astonished:'),
                        italic('\nЯ просто напомню,'), 'что есть', '/help')
    await message.reply(message_text)
예제 #17
0
    # 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__':
예제 #18
0
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)
예제 #19
0
async def start_command(message: types.Message):
    answer = text('Привет!\nЭто поисковик по фильмам. Используй',
                  bold('/help'), 'чтобы узнать больше')
    await message.reply(answer)
예제 #20
0
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)
예제 #21
0
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()
예제 #22
0
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')
예제 #23
0
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)
예제 #24
0
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("Неизвестная команда!")
예제 #25
0
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')))
예제 #26
0
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')
예제 #27
0
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,
            )
예제 #28
0
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)
예제 #30
0
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)
예제 #31
0
async def process_help_command(msg: types.Message):
    await msg.reply(text(emojize(HELP_TEXT)), parse_mode=ParseMode.HTML)
예제 #32
0
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)