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)
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)
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)
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)
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
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
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
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
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)
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
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
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
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)
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
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