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_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 set_phone(self, bot, update, user_data): user = user_data['user'] data = get_settings_file(SETTINGS_FILE) price = data['price'] try: phone_number = update.message.contact.phone_number except AttributeError: phone_number = update.message.text phone_number = "".join(re.findall('\d+', phone_number)) if len(phone_number) == 12: user_data['phone'] = phone_number else: bot.send_message(chat_id=user.chat_id, text='Введен некорректный номер, попробуйте еще.') return BalanceMenu.States.PHONE buttons = [[KeyboardButton('Подтвердить')], [KeyboardButton('Назад')]] reply_markup = ReplyKeyboardMarkup(buttons, resize_keyboard=True) bot.send_message(chat_id=user.chat_id, reply_markup=reply_markup, text="Дней: {0}\n" "Стоимость: {1} грн\n\n" "Вы подтверждаете заказ?".format( user_data["count_days"], user_data["count_days"] * price)) bot.send_message(chat_id=user.chat_id, text="Нажмите клавишу 'Подтвердить'") return BalanceMenu.States.CONFIRMATION
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_count_days(self, bot, update, user_data): user = user_data['user'] data = get_settings_file(SETTINGS_FILE) price = data['price'] try: count_days = int(update.message.text) if count_days <= 0: raise ValueError except ValueError: bot.send_message(chat_id=user.chat_id, text='Введите целое число больше нуля.') return BalanceMenu.States.COUNT_DAYS user_data['count_days'] = count_days user_data['final_price'] = count_days * price if user.balance > 0: buttons = [[ KeyboardButton("Оплатить с карты"), KeyboardButton("Оплатить часть с баланса") ], [KeyboardButton("Назад")]] reply_markup = ReplyKeyboardMarkup(buttons, resize_keyboard=True) bot.send_message( chat_id=user.chat_id, text= f"К оплате {user_data['final_price']} грн. Выберите способ оплаты. У вас на счету {user.balance} грн.", reply_markup=reply_markup) return BalanceMenu.States.CHOOSE else: self.confirmation(bot, update, user_data) return BalanceMenu.States.CONFIRMATION
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 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 get_chat_link(self, bot, update, user_data): user = user_data['user'] data = get_settings_file(SETTINGS_FILE) chat_link = data['chat_link'] bot.send_message(text=f"Ссылка на чат {chat_link}", chat_id=user.chat_id) return StartMenu.States.ACTION
def autopublish_message(self, bot, job): data = get_settings_file(SETTINGS_FILE) group_id = data['autopublish']['group_id'] text_message = data['autopublish']['text'] try: bot.send_message(chat_id=group_id, text=text_message) except TelegramError as e: self.logger.error(e)
def goodbye(bot, update): data = get_settings_file(SETTINGS_FILE) message = update.message group_id = data['autopublish']['group_id'] left_user = message.left_chat_member user = DBSession.query(User).filter(User.chat_id == left_user.id).first() user.active = False add_to_db(user, session=DBSession) bot.delete_message(chat_id=group_id, message_id=message.message_id)
def entry(self, bot, update, user_data, args=None): self.delete_interface(user_data) tuser = update.effective_user user = DBSession.query(User).filter(User.chat_id == tuser.id).first() data = get_settings_file(SETTINGS_FILE) silent_days = timedelta_from_str(data['silence_mode']) if user is None: user = User() user.join_date = date.today() user.expiration_date = user.join_date + silent_days user.chat_id = tuser.id user.name = tuser.full_name user.username = tuser.username user.active = True if args and args != [] and len(args) == 1: referal_id = args[0] if len(referal_id) and referal_id.isdigit(): if referal_id != user.chat_id and not user.parent_referal_id: parent_user = DBSession.query(User).filter( User.chat_id == referal_id).first() parent_user.referal_count += 1 user.parent_referal_id = referal_id if not add_to_db([user, parent_user], session=DBSession): return self.conv_fallback(user_data) else: self.logger.warning("Referal link is not valid.") else: if not add_to_db(user, session=DBSession): return self.conv_fallback(user_data) else: user.chat_id = tuser.id user.name = tuser.full_name user.username = tuser.username user.active = True if not add_to_db(user, session=DBSession): return self.conv_fallback(user_data) user_data['user'] = user _ = user_data['_'] = generate_underscore(user) buttons = [[KeyboardButton('Баланс')], [KeyboardButton('Пригласить партнера')], [KeyboardButton('Чат')]] reply_markup = ReplyKeyboardMarkup(buttons, resize_keyboard=True) bot.send_message(text='Главное меню', chat_id=user.chat_id, reply_markup=reply_markup) return StartMenu.States.ACTION
def entry_interval_reminders(self, bot, update, user_data): user = user_data['user'] reply_markup = ReplyKeyboardMarkup([[KeyboardButton("Назад")]], resize_keyboard=True) data = get_settings_file(SETTINGS_FILE) bot.send_message( chat_id=user.chat_id, text=f"Сейчас установлен срок в {data['reminders']['term']} " + "Введите через запятую дни когда должно приходить оповещение об днях оплаты. Числа не должны быть больше чем срок. \nНапример, 15,10,5, 1", reply_markup=reply_markup) return RemindersMenu.States.SET_INTERVAL
def entry_set_silence_mode(self, bot, update, user_data): user = user_data['user'] data = get_settings_file(SETTINGS_FILE) days = data['silence_mode'] reply_markup = ReplyKeyboardMarkup([[KeyboardButton("Назад")]], resize_keyboard=True) bot.send_message( text=f'Сейчас тихий период установлен на {days} дней.' + ' Чтобы изменить, введите новое кол-во дней.', chat_id=user.chat_id, reply_markup=reply_markup) return AdminMenu.States.SILENCE_MODE
def entry_set_price(self, bot, update, user_data): user = user_data['user'] data = get_settings_file(SETTINGS_FILE) reply_markup = ReplyKeyboardMarkup([[KeyboardButton("Назад")]], resize_keyboard=True) bot.send_message( text=f"Сейчас цена за 1 день доступа к чату = {data['price']} грн." 'Чтобы изменить, введите новую цену(целое число).', chat_id=user.chat_id, reply_markup=reply_markup) return AdminMenu.States.SET_PRICE
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 entry_count_days(self, bot, update, user_data): user = user_data['user'] data = get_settings_file(SETTINGS_FILE) if user.balance > 0.0: self.balance_check(bot, update, user_data) buttons = [[KeyboardButton('Назад')]] reply_markup = ReplyKeyboardMarkup(buttons, resize_keyboard=True) bot.send_message( chat_id=user.chat_id, text="Введите количество дней, которое хотите оплатить.\n" f"Цена за один день: {data['price']} грн", reply_markup=reply_markup) return BalanceMenu.States.COUNT_DAYS
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 change_chat_link(self, bot, update, user_data): user = user_data['user'] data = get_settings_file(SETTINGS_FILE) link = update.message.text args = user_data['args'] group_id = args['group_id'] args['link'] = link bot.send_message( chat_id=user.chat_id, text=f"Следующие изменения: ID = {group_id}" + "\n" \ +f"Ссылка : {link}" ) buttons = [[KeyboardButton("Да")], [KeyboardButton("Нет")]] reply_markup = ReplyKeyboardMarkup(buttons, resize_keyboard=True) bot.send_message(chat_id=user.chat_id, text='Подтвердите изменения', reply_markup=reply_markup) return AdminMenu.States.CHANGE_LINK
def start_reminders(self, bot, update, user_data, job_queue): user = user_data['user'] data = get_settings_file(SETTINGS_FILE) if not 'reminders' in data and data['reminders']['term'] and data[ 'reminders']['interval']: bot.send_message( chat_id=user.chat_id, text='Приостановка сообщений об окончании подписки') for job in job_queue.get_jobs_by_name('reminders_job'): job.schedule_removal() return self.entry(bot, update, user_data) interval = data['reminders']['interval'] term = timedelta_from_str(data['reminders']['term']) if 0 in interval: bot.send_message( chat_id=user.chat_id, text= 'Уведемления отключены, смените интервал на число больше нуля.' ) for job in job_queue.get_jobs_by_name('reminders_job'): job.schedule_removal() return self.entry(bot, update, user_data) context = { 'message': data['reminders']['text'], 'interval': interval, 'term': term } for job in job_queue.get_jobs_by_name('reminders_job'): job.schedule_removal() # first = 5 - через 5 секунд після запуску job_queue.run_repeating(self.reminders_job, interval=10, first=5, context=context, name='reminders_job') return self.entry(bot, update, user_data)
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 kicked_users(bot, job): today = date.today() data = get_settings_file(SETTINGS_FILE) chat_id = data['autopublish']['group_id'] users = (DBSession.query(User) .filter(User.active == True) .filter(User.expiration_date == today) .all()) for user in users: try: bot.kick_chat_member( chat_id=chat_id, user_id=user.chat_id ) user.active = False add_to_db(user, DBSession) except (TelegramError, BadRequest) as e: logger.error(e) sleep(1)
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 ukrainian_payment_system(self, bot, update, user_data, job_queue): user = user_data['user'] data = get_settings_file(SETTINGS_FILE) final_price = user_data['final_price'] days = user_data['count_days'] description = f"Оплата за {days} в чате без мута" response = make_payment(final_price * 100, description) if not response: return self.conv_fallback(user_data) context = { "amount": final_price, "order_id": response['order_id'], "user_data": user_data, "update": update, "silence_mode": data['silence_mode'], "days": days, "group_id": data["autopublish"]["group_id"] } bot.send_message( chat_id=user.chat_id, text= f"Подтвердите оплату переходя по ссылке: {response['checkout_url']} " ) # запускаємо ф-цію, яка буде перевіряти чи оплата пройшла успішно for job in job_queue.get_jobs_by_name("checking_pay"): job.schedule_removal() job_queue.run_repeating(self.checking_pay, 3, name="checking_pay", context=context) return BalanceMenu.States.ACTION
def users_from_chat(bot=None, job=None): data = get_settings_file(SETTINGS_FILE) day, month, year = data['transition'].split('.') transition = date(int(year), int(month), int(day)) with client: entity = client.get_entity(data['chat_link']) users_in_chat = client.get_participants(entity) for user_chat in users_in_chat: user = DBSession.query(User).filter(User.chat_id == user_chat.id).first() if user is None: user = User() user.chat_id = user_chat.id user.name = user_chat.first_name user.username = user_chat.username user.active = True user.join_date = date.today() user.expiration_date = transition DBSession.add(user) DBSession.commit() logger.info(f"Added {user.username}") else: pass
def restricted_users(bot, job): today = date.today() data = get_settings_file(SETTINGS_FILE) chat_id = data['autopublish']['group_id'] silence_days = timedelta_from_str(data['silence_mode']) # Запит вибирає челіків, яких треба замутити, якщо дата бану - к-сть # днів муту і сьогодні співпадають users = (DBSession.query(User) .filter(User.active == True) .filter(User.expiration_date - silence_days == today) .all()) for user in users: # Поки що це не хай буде закомічене try: bot.restrict_chat_member( chat_id=chat_id, user_id=user.chat_id, can_send_messages=False, can_send_media_messages=False, can_send_other_messages=False, can_add_web_page_previews=False ) except BadRequest as e: logger.error(e)