Exemple #1
0
    def set_grace_mode(self, bot, update, user_data):
        user = user_data['user']
        data = get_settings_file(SETTINGS_FILE)
        days = update.message.text

        if 'grace_mode' in data:
            try:
                data['grace_mode'] = str(timedelta(days=int(days)))
            except ValueError as e:
                self.logger.info(e)
                bot.send_message(chat_id=user.chat_id,
                                 text='Ошибка формата. Введите целое число.')
                return AdminMenu.States.SET_GRACE_MODE
            try:
                write_settings_file(data, SETTINGS_FILE)
                bot.send_message(
                    text='Теперь льготный период установлен на {} дней'.format(
                        int(days)),
                    chat_id=user.chat_id)
            except (TypeError, IOError) as e:
                self.logger.info(e)
                bot.send_message(chat_id=user.chat_id,
                                 text="Не удалось сохранить настройки :("
                                 "Попробуйте еще раз.")
        else:
            self.logger.error(
                "\nSettings for autopublish are not valid or aren't present. Check settings.json."
            )
            bot.send_message(chat_id=user.chat_id, text='Это меню пустое.')

        return self.entry(bot, update, user_data)
Exemple #2
0
    def set_price(self, bot, update, user_data, job_queue):
        user = user_data['user']
        data = get_settings_file(SETTINGS_FILE)
        price = update.message.text

        if 'price' in data:
            try:
                data['price'] = int(price)
            except ValueError:
                bot.send_message(chat_id=user.chat_id,
                                 text='Ошибка формата. Введите целое число.')
                return AdminMenu.States.SET_PRICE
            try:
                write_settings_file(data, SETTINGS_FILE)
                bot.send_message(
                    text=f'Теперь цена за 1 день доступа к чату = {price} грн',
                    chat_id=user.chat_id)
            except (TypeError, IOError) as e:
                self.logger.info(e)
                bot.send_message(chat_id=user.chat_id,
                                 text="Не удалось сохранить настройки :("
                                 "Попробуйте еще раз.")
        else:
            self.logger.error(
                "\nSettings for autopublish are not valid or aren't present. Check settings.json."
            )
            bot.send_message(chat_id=user.chat_id, text='Это меню пустое.')

        return self.entry(bot, update, user_data, job_queue)
Exemple #3
0
    def deactivate_autopublish(self, bot, update, user_data, job_queue):
        user = user_data['user']
        data = get_settings_file(SETTINGS_FILE)
        if 'autopublish' in data and data['autopublish']['active'] is False:
            bot.send_message(chat_id=user.chat_id,
                             text='Автопубликация уже выключена.')
            return AutopublishMenu.States.AUTOPUBLISH
        if data['autopublish']['time']:
            jobs = job_queue.get_jobs_by_name('autopublish')
            for job in jobs:
                job.schedule_removal()
            data['autopublish']['active'] = False

            try:
                write_settings_file(data, SETTINGS_FILE)
                bot.send_message(chat_id=user.chat_id,
                                 text='Автопубликация отключена успешно.')
                self.logger.debug('Отключили автопубликацию.')
            except (TypeError, IOError) as e:
                self.logger.error(e)
                bot.send_message(chat_id=user.chat_id,
                                 text='''Не удалось сохранить настройки :(
                                 Попробуйте еще раз.''')
        else:
            self.logger.error(
                "\nSettings for autopublish are not valid or aren't present. Check settings.json."
            )
            bot.send_message(chat_id=user.chat_id, text='Это меню пустое.')

        return self.entry(bot, update, user_data)
Exemple #4
0
    def set_silence_mode(self, bot, update, user_data, job_queue):
        user = user_data['user']
        data = get_settings_file(SETTINGS_FILE)
        text = update.message.text

        try:
            day = int(text)
            if day < 0:
                raise ValueError
            silence_days = timedelta(days=day)
        except ValueError:
            bot.send_message(chat_id=user.chat_id,
                             text="Введите целое положительное число или 0.")

            return AdminMenu.States.SILENCE_MODE

        if 'silence_mode' in data:
            data['silence_mode'] = str(silence_days)
            try:
                write_settings_file(data, SETTINGS_FILE)
                bot.send_message(
                    text=f'Теперь тихий период установлен на {day} дней',
                    chat_id=user.chat_id)
            except (TypeError, IOError) as e:
                self.logger.info(e)
                bot.send_message(chat_id=user.chat_id,
                                 text="Не удалось сохранить настройки :("
                                 "Попробуйте еще раз.")
        else:
            self.logger.error(
                "\nSettings for autopublish are not valid or aren't present. Check settings.json."
            )
            bot.send_message(chat_id=user.chat_id, text='Это меню пустое.')

        return self.entry(bot, update, user_data, job_queue)
Exemple #5
0
    def save_text_autopublish(self, bot, update, user_data):
        user = user_data['user']
        text = update.message.text

        data = get_settings_file(SETTINGS_FILE)
        if 'autopublish' in data and data['autopublish']['text']:
            data['autopublish']['text'] = text
            try:
                write_settings_file(data, SETTINGS_FILE)
                bot.send_message(chat_id=user.chat_id,
                                 text=f'Теперь публикация с текстом: "{text}"')
            except (TypeError, IOError) as e:
                self.logger.error(e)
                bot.send_message(chat_id=user.chat_id,
                                 text="Не удалось сохранить настройки :("
                                 "Попробуйте еще раз.")
                return self.entry_text_autopublish(bot, update, user_data)
        else:
            self.logger.error(
                "\nSettings for autopublish are not valid or aren't present. Check settings.json."
            )
            bot.send_message(chat_id=user.chat_id, text='Это меню пустое.')

        buttons = [[KeyboardButton("Да")], [KeyboardButton("Нет")]]
        reply_markup = ReplyKeyboardMarkup(buttons, resize_keyboard=True)

        bot.send_message(
            chat_id=user.chat_id,
            text=
            "Чтобы изменения вступили в силу необходимо перезапустить публикацию."
            "Перезапустить автопубликацию сейчас?",
            reply_markup=reply_markup)

        return AutopublishMenu.States.ANSWER
Exemple #6
0
    def save_interval_reminders(self, bot, update, user_data):
        user = user_data['user']
        data = get_settings_file(SETTINGS_FILE)
        text = update.message.text

        try:
            interval = sorted([int(i) for i in re.findall('\d+', text)],
                              reverse=True)
            if len(interval) == 0:
                raise ValueError
            if interval[0] > timedelta_from_str(
                    data['reminders']['term']).days:
                bot.send_message(
                    chat_id=user.chat_id,
                    text=
                    f"Число {interval[0]} больше чем установленный срок в {data['reminders']['term']}. "
                    "Введите числа в установленном формате")

                return RemindersMenu.States.SET_INTERVAL

        except ValueError:
            bot.send_message(chat_id=user.chat_id,
                             text='''
                                  Вы ввели букву или отсуствуют цифры в сообщении
                                  ''')
            return RemindersMenu.States.SET_INTERVAL

        if 'reminders' in data and data['reminders']['interval']:
            data['reminders']['interval'] = interval
            try:
                write_settings_file(data, SETTINGS_FILE)
                bot.send_message(
                    chat_id=user.chat_id,
                    text=
                    f'Теперь напоминание будет с интервалом {interval} дней до окончания подписки'
                )

            except (TypeError, IOError) as e:
                self.logger.error(e)
                bot.send_message(chat_id=user.chat_id,
                                 text='''Не удалось сохранить настройки :(
                                 Попробуйте еще раз.''')
        else:
            self.logger.error(
                "\nSettings for autopublish are not valid or aren't present. Check settings.json."
            )
            bot.send_message(chat_id=user.chat_id, text='Это меню пустое.')
        self.entry(bot, update, user_data)
        return RemindersMenu.States.ACTION
Exemple #7
0
    def save_days_autopublish(self, bot, update, user_data):
        user = user_data['user']
        text = update.message.text
        reply_markup = ReplyKeyboardMarkup([[KeyboardButton("Назад")]],
                                           resize_keyboard=True)
        try:
            day = int(text)
            if day > 31 or day <= 0:
                raise ValueError
            time_to_publish = timedelta(days=day)

        except ValueError:
            bot.send_message(
                chat_id=user.chat_id,
                text="Неверные данные! Введите число от 1 до 31(включительно):",
                reply_markup=reply_markup)
            return AutopublishMenu.States.SET_DAYS
        data = get_settings_file(SETTINGS_FILE)
        if 'autopublish' in data and data['autopublish']['time']:
            data['autopublish']['time'] = str(time_to_publish)
            try:
                write_settings_file(data, SETTINGS_FILE)
                bot.send_message(
                    chat_id=user.chat_id,
                    text=
                    f'Теперь публикация с периодом в {time_to_publish} дней')
            except (TypeError, IOError) as e:
                self.logger.error(e)
                bot.send_message(chat_id=user.chat_id,
                                 text="Не удалось сохранить настройки :("
                                 "Попробуйте еще раз.")
                return self.entry_days_autopublish(bot, update, user_data)
        else:
            self.logger.error(
                "\nSettings for autopublish are not valid or aren't present. Check settings.json."
            )
            bot.send_message(chat_id=user.chat_id, text='Это меню пустое.')

        buttons = [[KeyboardButton("Да")], [KeyboardButton("Нет")]]
        reply_markup = ReplyKeyboardMarkup(buttons, resize_keyboard=True)

        bot.send_message(
            chat_id=user.chat_id,
            text=
            "Чтобы изменения вступили в силу необходимо перезапустить публикацию."
            "Перезапустить автопубликацию сейчас?",
            reply_markup=reply_markup)

        return AutopublishMenu.States.ANSWER
Exemple #8
0
    def set_fondy_token(self, bot, update, user_data):
        user = user_data['user']
        data = get_settings_file(SETTINGS_FILE)
        token = update.message.text

        data['fondy_token'] = token
        try:
            write_settings_file(data, SETTINGS_FILE)
            bot.send_message(chat_id=user.chat_id, text=f"Токен установлен")
        except (TypeError, IOError) as e:
            logger.info(e)
            bot.send_message(chat_id=user.chat_id,
                             text='''Не удалось сохранить настройки :(
                                Попробуйте еще раз.''')

        self.entry_change_chat(bot, update, user_data)
        return AdminMenu.States.CHANGE_CHAT
Exemple #9
0
    def set_hello_message(self, bot, update, user_data, job_queue):
        user = user_data['user']
        data = get_settings_file(SETTINGS_FILE)
        data['hello_message'] = update.message.text
        try:
            write_settings_file(data, SETTINGS_FILE)
            bot.send_message(
                chat_id=user.chat_id,
                text=f"Теперь приветствие с сообщением  {data['hello_message']}"
            )
        except (TypeError, IOError) as e:
            logger.info(e)
            bot.send_message(chat_id=user.chat_id,
                             text="Не удалось сохранить настройки :("
                             "Попробуйте еще раз.")

        return self.entry(bot, update, user_data, job_queue)
Exemple #10
0
    def answer_yes(self, bot, update, user_data, job_queue):
        user = user_data['user']
        data = get_settings_file(SETTINGS_FILE)
        for job in job_queue.get_jobs_by_name('autopublish'):
            job.schedule_removal()

        data['autopublish']['active'] = False
        try:
            write_settings_file(data, SETTINGS_FILE)
            self.logger.debug('Включили автопубликацию')
        except (TypeError, IOError) as e:
            self.logger.error(e)
            bot.send_message(chat_id=user.chat_id,
                             text="Не удалось сохранить настройки :("
                             "Попробуйте еще раз.")

        self.activate_autopublish(bot, update, user_data, job_queue)
        return AutopublishMenu.States.AUTOPUBLISH
Exemple #11
0
    def answer_yes(self, bot, update, user_data, job_queue):
        user = user_data['user']
        args = user_data['args']
        link = args['link']
        group_id = args['group_id']

        data = get_settings_file(SETTINGS_FILE)
        data['chat_link'] = link
        data['autopublish']['group_id'] = group_id
        data['autopublish']['active'] = False
        try:
            write_settings_file(data, SETTINGS_FILE)
            bot.send_message(chat_id=user.chat_id,
                text=f"Теперь вступили в силу следующие изменения" \
                +f"Следующие изменения: ID = {group_id}" + "\n" \
                +f"Ссылка : {link}")
        except (TypeError, IOError) as e:
            logger.info(e)
            bot.send_message(chat_id=user.chat_id,
                             text='''Не удалось сохранить настройки :(
                                Попробуйте еще раз.''')

        for job in job_queue.get_jobs_by_name('autopublish'):
            job.schedule_removal()

        for job in job_queue.get_jobs_by_name('restricted_users'):
            job.schedule_removal()
        job_queue.run_repeating(restricted_users,
                                PERIOD,
                                first=1,
                                name="restricted_users")

        for job in job_queue.get_jobs_by_name('kicked_users'):
            job.schedule_removal()
        job_queue.run_repeating(kicked_users,
                                PERIOD,
                                first=1,
                                name="kicked_users")

        users_from_chat()

        self.entry_change_chat(bot, update, user_data)
        return AdminMenu.States.CHANGE_CHAT
Exemple #12
0
def welcome(bot, update):
    data = get_settings_file(SETTINGS_FILE)
    message = update.message
    group_id = data['autopublish']['group_id']
    new_users = message.new_chat_members
    previous_add_msg_id = data['previous_add_message']
    previous_msg_id = data['previous_welcome_message']
    if previous_msg_id is not None and previous_add_msg_id is not None :
        try:
            bot.delete_message(chat_id=group_id, message_id=previous_msg_id)
            bot.delete_message(chat_id=group_id, message_id=previous_add_msg_id)
            logger.debug(f'Delete {previous_msg_id}')
        except TelegramError as e:
            logger.error(f'{e} - wrong previous message id')

    for new_user in new_users:
        text = f"{data['hello_message']}, {new_user.first_name}" 
        logger.info(f'{new_user.first_name} joined to chat {group_id}({message.chat.title})')
        bot.send_message(chat_id=group_id, text=text, reply_to_message_id=message.message_id)
        data['previous_add_message'] = message.message_id
        data['previous_welcome_message'] = message.message_id + 1

        try:
            write_settings_file(data, SETTINGS_FILE)
            logger.debug('Попереднє повідомлення записано')
        except (TypeError, IOError) as e:
            logger.error(e)
        
        user = DBSession.query(User).filter(User.chat_id == new_user.id).first()
        if user is None:
            user = User()
            user.chat_id = new_user.id
            user.name = new_user.first_name
            user.username = new_user.username
            user.active = True
            user.join_date = date.today()
            user.expiration_date = (date.today()
                                    + timedelta_from_str(data['grace_mode'])
                                    + timedelta_from_str(data['silence_mode']))
            add_to_db(user, session=DBSession)
        else:
            user.active = True       
Exemple #13
0
    def activate_autopublish(self, bot, update, user_data, job_queue):
        user = user_data['user']
        data = get_settings_file(SETTINGS_FILE)
        if 'autopublish' in data and data['autopublish']['active'] is True:
            bot.send_message(chat_id=user.chat_id,
                             text='Автопубликация уже включена.')
            return AutopublishMenu.States.AUTOPUBLISH
        if data['autopublish']['time']:
            jobs = job_queue.get_jobs_by_name('autopublish')
            for job in jobs:
                job.schedule_removal()

            interval_str = data['autopublish']['time']
            interval = timedelta_from_str(interval_str)
            job_queue.run_repeating(self.autopublish_message,
                                    interval,
                                    first=1,
                                    name='autopublish')

            data['autopublish']['active'] = True
            text = data['autopublish']['text']
            try:
                write_settings_file(data, SETTINGS_FILE)
                bot.send_message(
                    chat_id=user.chat_id,
                    text=
                    f'Автопубликация включена c текстом "{text}" и интервалом {interval}'
                )
                self.logger.debug('Включили автопубликацию')
            except (TypeError, IOError) as e:
                self.logger.error(e)
                bot.send_message(chat_id=user.chat_id,
                                 text='''Не удалось сохранить настройки :(
                                 Попробуйте еще раз.''')
        else:
            self.logger.error(
                "\nSettings for autopublish are not valid or aren't present. Check settings.json."
            )
            bot.send_message(chat_id=user.chat_id, text='Это меню пустое.')

        return self.entry(bot, update, user_data)
Exemple #14
0
    def save_term_reminders(self, bot, update, user_data):
        user = user_data['user']
        text = update.message.text

        try:
            time = int(text)
            if 0 < time <= 31:
                term_date = timedelta(days=time)
            else:
                raise ValueError
        except ValueError:
            bot.send_message(chat_id=user.chat_id,
                             text='''
                                  Неверные данные! Число в интервале от 1 до 31(включительно):
                                  ''')
            return RemindersMenu.States.SET_TERM
        data = get_settings_file(SETTINGS_FILE)
        if 'reminders' in data and data['reminders']['term']:
            data['reminders']['term'] = str(term_date)
            try:
                write_settings_file(data, SETTINGS_FILE)
                bot.send_message(
                    chat_id=user.chat_id,
                    text=
                    f'Теперь напоминание будет приходить за {time} дней до окончания подписки'
                )

            except (TypeError, IOError) as e:
                self.logger.error(e)
                bot.send_message(chat_id=user.chat_id,
                                 text='''Не удалось сохранить настройки :(
                                 Попробуйте еще раз.''')
        else:
            self.logger.error(
                "\nSettings for autopublish are not valid or aren't present. Check settings.json."
            )
            bot.send_message(chat_id=user.chat_id, text='Это меню пустое.')
        self.entry(bot, update, user_data)
        return RemindersMenu.States.ACTION
Exemple #15
0
    def save_text_reminders(self, bot, update, user_data):
        user = user_data['user']
        text = update.message.text

        data = get_settings_file(SETTINGS_FILE)
        if 'reminders' in data and data['reminders']['text']:
            data['reminders']['text'] = text
            try:
                write_settings_file(data, SETTINGS_FILE)
                bot.send_message(chat_id=user.chat_id,
                                 text=f'Теперь уведомление с текстом {text}')
            except (TypeError, IOError) as e:
                self.logger.error(e)
                bot.send_message(chat_id=user.chat_id,
                                 text='''Не удалось сохранить настройки :(
                                 Попробуйте еще раз.''')
                return RemindersMenu.States.SET_TEXT
        else:
            self.logger.error(
                "\nSettings for autopublish are not valid or aren't present. Check settings.json."
            )
            bot.send_message(chat_id=user.chat_id, text='Это меню пустое.')
        self.entry(bot, update, user_data)
        return RemindersMenu.States.ACTION