Пример #1
0
 def interactive_reminder(lang):
     return [
         interactive_media.InteractiveMediaGroup([
             interactive_media.InteractiveMedia(
                 "hours",
                 interactive_media.InteractiveMediaSelect(
                     HOURS, i18n.t(MEDIA + '.hour', locale=lang),
                     i18n.t(MEDIA + '.hour', locale=lang))),
             interactive_media.InteractiveMedia(
                 "minutes",
                 interactive_media.InteractiveMediaSelect(
                     MINUTES, i18n.t(MEDIA + '.minute', locale=lang),
                     i18n.t(MEDIA + '.minute', locale=lang))),
         ])
     ]
Пример #2
0
 def sender(count=10):
     i = 0
     while i < count:
         i += 1
         if i % 2 == 0:
             d.messaging.send_message(private_peer(966246115),
                                      "Simple text")
         else:
             d.messaging.send_message(
                 private_peer(966246115), "Interactive media %d" % i, [
                     interactive_media.InteractiveMediaGroup([
                         interactive_media.InteractiveMedia(
                             1,
                             interactive_media.InteractiveMediaButton(
                                 "Test", "OK"),
                             interactive_media.InteractiveMediaConfirm(
                                 "Confirm text", "Confirm title")),
                         interactive_media.InteractiveMedia(
                             1,
                             interactive_media.InteractiveMediaSelect(
                                 "Some select", 'nope', {
                                     'yeah': "Yeah!",
                                     "nope": "Nope!",
                                     "maybe": "Maybe"
                                 }))
                     ], "Group title", "Group description")
                 ])
         time.sleep(2)
Пример #3
0
def get_scheduled_jobs_list(jobs):

    return [
        interactive_media.InteractiveMediaGroup([
            interactive_media.InteractiveMedia(
                "scheduled_job_list",
                interactive_media.InteractiveMediaSelect(
                    jobs, label="Список отсроченных гайдов"))
        ])
    ]
Пример #4
0
def quarters_select(lang):
    actions = {}
    for i in range(1, 5):
        actions[str(i)] = "Q{}".format(str(i))
    return [interactive_media.InteractiveMediaGroup([
            interactive_media.InteractiveMedia(
                "quarters",
                interactive_media.InteractiveMediaSelect(actions, i18n.t(PHRASES + '.quarter', locale=lang),
                                                         i18n.t(PHRASES + '.quarter', locale=lang))
            )
        ]
    )]
Пример #5
0
def months_select(lang):
    actions = {}
    for month, value in MONTHS.items():
        actions[month] = i18n.t("{0}.{1}".format(MONTHS_I18N, month), locale=lang)

    return [interactive_media.InteractiveMediaGroup([
            interactive_media.InteractiveMedia(
                "months",
                interactive_media.InteractiveMediaSelect(actions, i18n.t(PHRASES + '.month', locale=lang))
            )
        ]
    )]
Пример #6
0
def get_guides_layout(guides: list):
    interactive_media_list = {}
    for guide in guides:
        interactive_media_list[str(guide.get_id())] = guide.name

    return [
        interactive_media.InteractiveMediaGroup([
            interactive_media.InteractiveMedia(
                "get_guide",
                interactive_media.InteractiveMediaSelect(
                    interactive_media_list, label="Выбери гайд"))
        ])
    ]
Пример #7
0
def get_events_list(uid: int):
    events = {}

    for event in Event.select().where(Event.owner == uid).order_by(Event.name):
        events[str(event.get_id())] = f"{event.name}"

    return [interactive_media.InteractiveMediaGroup(
        [interactive_media.InteractiveMedia(
            "event_list",
            interactive_media.InteractiveMediaSelect(
                events,
                label="Список событий"
            )
        ),
            interactive_media.InteractiveMedia(
                "cancel",
                interactive_media.InteractiveMediaButton("cancel", "В главное меню")
            )
        ]
    )]
Пример #8
0
def get_spends_list(uid: int):
    costs = {}

    for cost in BalanceChange.select().where(
            BalanceChange.owner == uid).order_by(BalanceChange.name):
        costs[str(cost.get_id())] = f"{cost.name}"

    return [
        interactive_media.InteractiveMediaGroup([
            interactive_media.InteractiveMedia(
                "cost_list",
                interactive_media.InteractiveMediaSelect(costs,
                                                         label="Список трат")),
            interactive_media.InteractiveMedia(
                "cancel",
                interactive_media.InteractiveMediaButton(
                    "cancel", "В главное меню")),
            interactive_media.InteractiveMedia(
                "delete_all",
                interactive_media.InteractiveMediaButton(
                    "delete_all", "Удалить ВСЕ траты"))
        ])
    ]
Пример #9
0
    def on_msg(self, *params):
        user = self.get_user(params[0].sender_uid)
        message = str(params[0].message.textMessage.text)
        if user:
            state = user[3]
        else:
            self.create_user(params[0].sender_uid)
            state = 'menu'

        if message == '/start':
            self.set_state(user[0], 'menu')
            themes = self.get_themes()
            self.bot.messaging.send_message(
                params[0].peer, '\U0001F44B Привет!\n'
                'Я — бот, который поможет тебе освоиться в нашем дружном коллективе!\n'
                'Нажми на одну из тем, чтобы посмотреть подробную информацию по ней.',
                [
                    interactive_media.InteractiveMediaGroup([
                        interactive_media.InteractiveMedia(
                            i,
                            interactive_media.InteractiveMediaButton(
                                'view_theme_' + themes[i][0], themes[i][1]),
                            'primary') for i in range(len(themes))
                    ]),
                    interactive_media.InteractiveMediaGroup([
                        interactive_media.InteractiveMedia(
                            len(themes) + 1,
                            interactive_media.InteractiveMediaButton(
                                'themes_manager',
                                'Панель управления базой знаний')),
                        interactive_media.InteractiveMedia(
                            len(themes) + 2,
                            interactive_media.InteractiveMediaButton(
                                'schedule_manager',
                                'Менеджер отложенных сообщений')),
                        interactive_media.InteractiveMedia(
                            len(themes) + 2,
                            interactive_media.InteractiveMediaButton(
                                'make_notice', 'Сделать объявление'))
                    ])
                ])
        elif state == 'add_theme':
            if len(message.strip().split()) >= 2:
                name = message.strip().split()[-1]
                label = ' '.join(message.strip().split()[:-1])
                if name not in [i[0] for i in self.get_themes()]:
                    self.add_theme(name, label)
                    themes = {}
                    for i in self.get_themes():
                        themes['theme_' + str(i[0])] = str(i[1])
                    self.bot.messaging.send_message(
                        self.bot.users.get_user_peer_by_id(user[0]),
                        '\U00002705 Тема *%s* создана.' % label, [
                            interactive_media.InteractiveMediaGroup([
                                interactive_media.InteractiveMedia(
                                    101,
                                    interactive_media.InteractiveMediaSelect(
                                        themes, 'Выбери тему для настройки')),
                                interactive_media.InteractiveMedia(
                                    102,
                                    interactive_media.InteractiveMediaButton(
                                        'add_theme', 'Добавить тему'),
                                    'primary'),
                                interactive_media.InteractiveMedia(
                                    103,
                                    interactive_media.InteractiveMediaButton(
                                        'back_to_menu', 'Назад в меню'))
                            ])
                        ])
                    self.set_state(user[0], 'menu')
                else:
                    self.bot.messaging.send_message(
                        self.bot.users.get_user_peer_by_id(user[0]),
                        'Такой идентификатор уже существует.\n'
                        'Попробуй еще раз, но с чем-то *уникальным.*')
            else:
                self.bot.messaging.send_message(
                    self.bot.users.get_user_peer_by_id(user[0]),
                    'Мне нужно несколько слов через пробел.\n'
                    'Попробуй еще раз.')
        elif state.startswith('add_question_'):
            try:
                theme = state[13:]
                question, answer = message.strip().split('\n\n')
                self.add_question(theme, question, answer)
                self.bot.messaging.send_message(
                    self.bot.users.get_user_peer_by_id(user[0]),
                    '\U00002705 Вопрос добавлен.', [
                        interactive_media.InteractiveMediaGroup([
                            interactive_media.InteractiveMedia(
                                114,
                                interactive_media.InteractiveMediaButton(
                                    'theme_%s' % theme, 'К списку вопросов'),
                                'primary')
                        ])
                    ])
            except ValueError:
                self.bot.messaging.send_message(
                    self.bot.users.get_user_peer_by_id(user[0]),
                    'Я тебя не понял. Мне нужен вопрос и ответ именно в таком формате:\n'
                    'Вопрос\n\n'
                    'Ответ')
        elif state.startswith('edit_question_'):
            question_id = state[14:].split('_')[0]
            theme = '_'.join(state[14:].split('_')[1:])
            try:
                question, answer = message.strip().split('\n\n')
                self.edit_question(theme, question_id, question, answer)
                self.bot.messaging.send_message(
                    self.bot.users.get_user_peer_by_id(user[0]),
                    '\U00002705 Вопрос отредактирован.', [
                        interactive_media.InteractiveMediaGroup([
                            interactive_media.InteractiveMedia(
                                114,
                                interactive_media.InteractiveMediaButton(
                                    'theme_%s' % theme, 'К списку вопросов'),
                                'primary')
                        ])
                    ])
            except ValueError:
                self.bot.messaging.send_message(
                    self.bot.users.get_user_peer_by_id(user[0]),
                    'Я тебя не понял. Мне нужен вопрос и ответ именно в таком формате:\n'
                    'Вопрос\n\n'
                    'Ответ')

        elif state.startswith('theme_'):
            theme = state[6:]
            questions = self.get_questions(theme)
            questions_ids = [int(i[0]) for i in questions]
            try:
                question_id = int(message.strip())
                if question_id not in questions_ids:
                    raise ValueError
                else:
                    self.set_state(
                        user[0],
                        'question_%s_%s' % (str(question_id), str(theme)))
                    question = questions[questions_ids.index(question_id)]
                    self.bot.messaging.send_message(
                        self.bot.users.get_user_peer_by_id(user[0]),
                        'Вопрос *%s*\n\n'
                        '%s' % (str(question[1]), str(question[2])), [
                            interactive_media.InteractiveMediaGroup([
                                interactive_media.InteractiveMedia(
                                    115,
                                    interactive_media.InteractiveMediaButton(
                                        'edit_question_%s_%s' %
                                        (str(question[0]), theme),
                                        'Редактировать'), 'primary'),
                                interactive_media.InteractiveMedia(
                                    116,
                                    interactive_media.InteractiveMediaButton(
                                        'delete_question_%s_%s' %
                                        (str(question[0]), theme), 'Удалить'),
                                    'danger'),
                                interactive_media.InteractiveMedia(
                                    117,
                                    interactive_media.InteractiveMediaButton(
                                        'theme_%s' % theme, 'Назад'))
                            ])
                        ])
            except ValueError:
                self.bot.messaging.send_message(
                    self.bot.users.get_user_peer_by_id(user[0]),
                    'Кажется, нет вопроса с таким номером.')
        elif state.startswith('view_theme_'):
            theme = state[11:]
            try:
                question_id = int(message.strip())
                answer = self.get_question(theme, question_id)
                self.bot.messaging.send_message(
                    self.bot.users.get_user_peer_by_id(user[0]), '*%s*\n\n'
                    '%s' % (str(answer[1]), str(answer[2])), [
                        interactive_media.InteractiveMediaGroup([
                            interactive_media.InteractiveMedia(
                                117,
                                interactive_media.InteractiveMediaButton(
                                    'view_theme_%s' % theme, 'Назад'))
                        ])
                    ])
            except ValueError:
                self.bot.messaging.send_message(
                    self.bot.users.get_user_peer_by_id(user[0]),
                    'Кажется, нет вопроса с таким номером. Попробуй еще раз.')
        elif state == 'make_notice':
            msg = message.strip()
            self.make_notice(user[0], msg)
            self.bot.messaging.send_message(
                self.bot.users.get_user_peer_by_id(user[0]),
                '\U00002705 Объявление успешно отправлено всем пользователям.')
        elif state == 'delete_pending_msg':
            try:
                msg = int(message.strip())
                cur = self.con.cursor()
                schedule = cur.execute('SELECT * FROM schedule').fetchall()
                schedule_ids = [int(i[0]) for i in schedule]
                if msg not in schedule_ids:
                    self.bot.messaging.send_message(
                        self.bot.users.get_user_peer_by_id(user[0]),
                        'Сообщения с таким номером нет. Попробуй еще раз.')
                else:
                    self.delete_schedule(msg)
                    self.bot.messaging.send_message(
                        self.bot.users.get_user_peer_by_id(user[0]),
                        '\U00002705 Отложенное сообщение успешно удалено.', [
                            interactive_media.InteractiveMediaGroup([
                                interactive_media.InteractiveMedia(
                                    117,
                                    interactive_media.InteractiveMediaButton(
                                        'schedule_manager',
                                        'Назад в менеджер'), 'primary')
                            ])
                        ])
            except ValueError:
                self.bot.messaging.send_message(
                    self.bot.users.get_user_peer_by_id(user[0]),
                    'Сообщения с таким номером нет. Попробуй еще раз.')
        elif state == 'add_pending_msg':
            try:
                question_id, theme, minutes = message.strip().split()
                self.add_schedule(theme, question_id, minutes)
                self.bot.messaging.send_message(
                    self.bot.users.get_user_peer_by_id(user[0]),
                    '\U00002705 Отложенное сообщение создано.', [
                        interactive_media.InteractiveMediaGroup([
                            interactive_media.InteractiveMedia(
                                123,
                                interactive_media.InteractiveMediaButton(
                                    'schedule_manager', 'Назад в менеджер'),
                                'primary')
                        ])
                    ])
            except ValueError:
                self.bot.messaging.send_message(
                    self.bot.users.get_user_peer_by_id(user[0]),
                    'Я тебя не понял. Пришли сообщение, соблюдая формат.', [
                        interactive_media.InteractiveMediaGroup([
                            interactive_media.InteractiveMedia(
                                124,
                                interactive_media.InteractiveMediaButton(
                                    'schedule_manager', 'Отмена'))
                        ])
                    ])
Пример #10
0
 def on_click(self, *params):
     user = self.get_user(params[0].uid)
     value = params[0].value
     if value == 'themes_manager':
         self.set_state(user[0], 'themes_manager')
         themes = {}
         for i in self.get_themes():
             themes['theme_' + str(i[0])] = str(i[1])
         self.bot.messaging.send_message(
             self.bot.users.get_user_peer_by_id(user[0]),
             '\U0001F916 Это панель управления.\n'
             'Здесь ты можешь управлять темами и вопросами, а также редактировать ответы на них.',
             [
                 interactive_media.InteractiveMediaGroup([
                     interactive_media.InteractiveMedia(
                         101,
                         interactive_media.InteractiveMediaSelect(
                             themes, 'Выбери тему для настройки')),
                     interactive_media.InteractiveMedia(
                         102,
                         interactive_media.InteractiveMediaButton(
                             'add_theme', 'Добавить тему'), 'primary'),
                     interactive_media.InteractiveMedia(
                         103,
                         interactive_media.InteractiveMediaButton(
                             'back_to_menu', 'Назад в меню'))
                 ])
             ])
     elif value == 'add_theme':
         self.set_state(user[0], 'add_theme')
         self.bot.messaging.send_message(
             self.bot.users.get_user_peer_by_id(user[0]),
             'Пришли мне название темы и ее сокращение на английском через пробел.\n'
             'Например: График работы schedule\n'
             '*График работы* станет названием, а *schedule* — уникальным идентификатором.'
         )
     elif value.startswith('theme_'):
         self.set_state(user[0], value)
         theme = value[6:]
         theme_label = [i[1] for i in self.get_themes() if i[0] == theme][0]
         questions = self.get_questions(theme)
         self.bot.messaging.send_message(
             self.bot.users.get_user_peer_by_id(user[0]),
             'Вопросы в теме *%s*\n\n'
             '%s' % (theme_label, '\n'.join([
                 str(questions[i][0]) + '. ' + str(questions[i][1])
                 for i in range(len(questions))
             ])), [
                 interactive_media.InteractiveMediaGroup([
                     interactive_media.InteractiveMedia(
                         111,
                         interactive_media.InteractiveMediaButton(
                             'add_question_%s' % theme, 'Добавить вопрос'),
                         'primary'),
                     interactive_media.InteractiveMedia(
                         112,
                         interactive_media.InteractiveMediaButton(
                             'delete_theme_%s' % theme, 'Удалить тему'),
                         'danger'),
                     interactive_media.InteractiveMedia(
                         113,
                         interactive_media.InteractiveMediaButton(
                             'themes_manager', 'Назад'))
                 ])
             ])
         if len(questions) > 0:
             self.bot.messaging.send_message(
                 self.bot.users.get_user_peer_by_id(user[0]),
                 'Пришли мне номер вопроса для его просмотра и редактирования.'
             )
     elif value.startswith('add_question_'):
         self.set_state(user[0], value)
         self.bot.messaging.send_message(
             self.bot.users.get_user_peer_by_id(user[0]),
             '*Добавление вопроса*\n'
             'Пришли через пустую строку вопрос и ответ на него.\n'
             'Например:\n'
             'Как подключиться к Wi-Fi?\n\n'
             'Для подключения к Wi-Fi введите пароль 12345678.')
     elif value.startswith('delete_question_'):
         question_id = value[16:].split('_')[0]
         theme = '_'.join(value[16:].split('_')[1:])
         self.delete_question(theme, question_id)
         self.bot.messaging.send_message(
             self.bot.users.get_user_peer_by_id(user[0]),
             '\U00002705 Вопрос удален.', [
                 interactive_media.InteractiveMediaGroup([
                     interactive_media.InteractiveMedia(
                         115,
                         interactive_media.InteractiveMediaButton(
                             'theme_%s' % theme, 'К списку вопросов'),
                         'primary')
                 ])
             ])
     elif value.startswith('edit_question_'):
         question_id = value[14:].split('_')[0]
         theme = '_'.join(value[14:].split('_')[1:])
         self.set_state(user[0], value)
         self.set_state_info(
             user[0],
             json.dumps({
                 'theme': theme,
                 'question_id': int(question_id)
             }))
         self.bot.messaging.send_message(
             self.bot.users.get_user_peer_by_id(user[0]),
             '*Редактирование вопроса*\n'
             'Пришли через пустую строку новый вопрос и ответ.\n'
             'Например:\n'
             'Как подключиться к Wi-Fi?\n\n'
             'Для подключения к Wi-Fi введите пароль 12345678.', [
                 interactive_media.InteractiveMediaGroup([
                     interactive_media.InteractiveMedia(
                         115,
                         interactive_media.InteractiveMediaButton(
                             'theme_%s' % theme, 'Отмена'))
                 ])
             ])
     elif value == 'back_to_menu':
         self.set_state(user[0], 'menu')
         themes = self.get_themes()
         self.bot.messaging.send_message(
             self.bot.users.get_user_peer_by_id(user[0]),
             'Нажми на одну из тем, чтобы посмотреть подробную информацию по ней.',
             [
                 interactive_media.InteractiveMediaGroup([
                     interactive_media.InteractiveMedia(
                         i,
                         interactive_media.InteractiveMediaButton(
                             'view_theme_' + themes[i][0], themes[i][1]),
                         'primary') for i in range(len(themes))
                 ]),
                 interactive_media.InteractiveMediaGroup([
                     interactive_media.InteractiveMedia(
                         len(themes) + 1,
                         interactive_media.InteractiveMediaButton(
                             'themes_manager',
                             'Панель управления базой знаний')),
                     interactive_media.InteractiveMedia(
                         len(themes) + 2,
                         interactive_media.InteractiveMediaButton(
                             'schedule_manager',
                             'Менеджер отложенных сообщений')),
                     interactive_media.InteractiveMedia(
                         len(themes) + 2,
                         interactive_media.InteractiveMediaButton(
                             'make_notice', 'Сделать объявление'))
                 ])
             ])
     elif value.startswith('view_theme_'):
         theme = value[11:]
         self.set_state(user[0], value)
         theme_label = [i[1] for i in self.get_themes() if i[0] == theme][0]
         questions = self.get_questions(theme)
         self.bot.messaging.send_message(
             self.bot.users.get_user_peer_by_id(user[0]), 'Тема *%s*\n\n'
             '%s' % (theme_label, '\n'.join([
                 str(questions[i][0]) + '. ' + str(questions[i][1])
                 for i in range(len(questions))
             ])), [
                 interactive_media.InteractiveMediaGroup([
                     interactive_media.InteractiveMedia(
                         103,
                         interactive_media.InteractiveMediaButton(
                             'back_to_menu', 'Назад в меню'))
                 ])
             ])
         if len(questions) > 0:
             self.bot.messaging.send_message(
                 self.bot.users.get_user_peer_by_id(user[0]),
                 'Пришли мне номер вопроса, чтобы узнать ответ на него.')
     elif value.startswith('delete_theme_'):
         theme = value[13:]
         self.delete_theme(theme)
         self.bot.messaging.send_message(
             self.bot.users.get_user_peer_by_id(user[0]),
             '\U00002705 Тема *%s* удалена.' % theme, [
                 interactive_media.InteractiveMediaGroup([
                     interactive_media.InteractiveMedia(
                         117,
                         interactive_media.InteractiveMediaButton(
                             'themes_manager', 'Назад в панель управления'))
                 ])
             ])
     elif value == 'schedule_manager':
         cur = self.con.cursor()
         schedule = cur.execute('SELECT * FROM schedule').fetchall()
         themes = {}
         for i in self.get_themes():
             themes[str(i[0])] = str(i[1])
         self.bot.messaging.send_message(
             self.bot.users.get_user_peer_by_id(user[0]),
             '*Отложенные сообщения*\n\n'
             '%s' % '\n'.join([
                 str(i[0]) + '. Гайд №' + str(i[2]) + ' из темы ' +
                 themes[str(i[1])] + ' (через ' + str(i[3]) + ' мин)'
                 for i in schedule
             ]), [
                 interactive_media.InteractiveMediaGroup([
                     interactive_media.InteractiveMedia(
                         121,
                         interactive_media.InteractiveMediaButton(
                             'add_pending_msg',
                             'Добавить отложенное сообщение'), 'primary'),
                     interactive_media.InteractiveMedia(
                         122,
                         interactive_media.InteractiveMediaButton(
                             'delete_pending_msg',
                             'Удалить отложенное сообщение'), 'danger'),
                     interactive_media.InteractiveMedia(
                         120,
                         interactive_media.InteractiveMediaButton(
                             'back_to_menu', 'Назад'))
                 ])
             ])
     elif value == 'make_notice':
         self.set_state(user[0], value)
         self.bot.messaging.send_message(
             self.bot.users.get_user_peer_by_id(user[0]),
             'Пришли мне текст уведомления.\n'
             'Оно будет мгновенно отправлено всем пользователям бота.', [
                 interactive_media.InteractiveMediaGroup([
                     interactive_media.InteractiveMedia(
                         118,
                         interactive_media.InteractiveMediaButton(
                             'back_to_menu', 'Отмена'), 'primary')
                 ])
             ])
     elif value == 'delete_pending_msg':
         self.set_state(user[0], value)
         self.bot.messaging.send_message(
             self.bot.users.get_user_peer_by_id(user[0]),
             'Пришли мне номер сообщения, которое необходимо удалить.', [
                 interactive_media.InteractiveMediaGroup([
                     interactive_media.InteractiveMedia(
                         122,
                         interactive_media.InteractiveMediaButton(
                             'schedule_manager', 'Назад'))
                 ])
             ])
     elif value == 'add_pending_msg':
         self.set_state(user[0], value)
         self.bot.messaging.send_message(
             self.bot.users.get_user_peer_by_id(user[0]),
             'Пришли мне через пробел номер гайда, идентификатор темы и время *в минутах*'
             'после регистрации пользователя,'
             'через которое придет сообщение.\n\n'
             'Например: 1 office 13\n'
             'Гайд №1 из темы с идентификатором office придет через 13 минут после регистрации пользователя.',
         )
         self.bot.messaging.send_message(
             self.bot.users.get_user_peer_by_id(user[0]),
             'На всякий случай держи названия тем:\n'
             '%s' % '\n'.join(
                 [str(i[1]) + ' — ' + str(i[0])
                  for i in self.get_themes()]))