def cron_unlock_users(): while True: User.objects(is_blocked=True).update(is_blocked=False) minute = 60 hour = 60 * minute day = 24 * hour time.sleep(2 * day)
def get(self, telegram_id=None): if telegram_id: user = User.objects(telegram_id=telegram_id) return json.loads(user.to_json()) else: users = User.objects() return json.loads(users.to_json())
def post(self): try: UserSchema().load(request.json) except ValidationError as e: return str(e) user = User(**request.json) user.save() return UserSchema().dump(user)
def cron_unlock_users(): """ Функция, которая предназначена для переодичной разблокировки заблокированных пользователей. 1. Обработка всех юзеров; 2. Два дня сон; 3. Обрабртка всех юзеров; 4. ... """ while True: User.objects(is_block=True).update(is_block=False) minute = 60 hour = 60 * minute day = 24 * hour time.sleep(2 * day)
def send_message(self): users = self._users.filter(is_blocked=False) blocked_ids = [] for u in users: try: bot.send_message(u.telegram_id, **self._message_data) except ApiException as e: if e.error_code == 403: blocked_ids.append(u.telegram_id) else: raise e time.sleep(0.1) User.objects(telegram_id=blocked_ids).update(is_blocked=True)
def post(self): try: NewsSchema().load(request.json) except ValidationError as e: return str(e) news = extra_models.News(**request.json) news.save() s = sending_news.Sender(User.objects(), text=news) s.send_message() return NewsSchema().dump(news)
def send_message(self): """ По созданному объекту делает рассылку юзерам. Во избежания блокировки перегрузки сервера собщениями, используем time.sleep() """ blocked_ids = [ ] # создаем список юзеров, которых отлавливаем в процессе отправки сообщения users = self._users.filter(is_block=False) for u in users: try: bot.send_message(u.telegram_id, **self._message_data) except ApiException as e: # print(dir(e)) # вначале проверим где именно лежит исключение 403, так как ApiException вляется # параметром ошбки. Для этого вызываем метод дир, который покажет все содержимое от ApiException if e.error_code == 403: blocked_ids.append(u.telegram_id) else: raise e time.sleep(0.1) User.objects(telegram_id__in=blocked_ids).update(is_block=True)
def post(self): try: NewsSchema().load(request.json) except ValidationError as e: return {'text': str(e)} news = News(**request.json) news.save() news.reload() show_news = f' {news.title}\n{news.body}' s = Sender(User.objects(), text=show_news) s.send_message() news.reload() return NewsSchema().dump(news)
def get(self, id=None): if id: return UserSchema().dump(User.objects.get(telegram_id=id)) else: return UserSchema().dump(User.objects(), many=True)
reply_markup=kb ) @bot.callback_query_handler(lambda c: json.loads(c.data)['tag'] == constants.NAME_TAG) def handle_change_name(call): telegram_id = json.loads(call.data)['id'] user = User.objects.get(telegram_id=telegram_id) user.modify(is_status_change=constants.FIRST_NAME) bot.send_message( call.message.chat.id, 'Напишите имя' ) @bot.message_handler(func=lambda message: User.get_status_change(message.chat.id) == constants.FIRST_NAME) def user_entering_name(message): first_name = f'{message.text}' user = User.objects.get(telegram_id=message.chat.id) user.modify(is_status_change=0, first_name=first_name) data = user.formatted_data() kb = inline_kb_from_dict(constants.SETTINGS_KB, user.telegram_id) bot.send_message(message.chat.id, data, reply_markup=kb) @bot.callback_query_handler(lambda c: json.loads(c.data)['tag'] == constants.PHONE_TAG) def handle_change_phone(call): telegram_id = json.loads(call.data)['id'] user = User.objects.get(telegram_id=telegram_id) user.modify(is_status_change=constants.PHONE) bot.send_message(
from shop.bot.sending_news import Sender from shop.models.shop_models import User s = Sender(User.objects(), text='Рассылка') s.send_message()
def delete(self, telegram_id): user = User.objects(telegram_id=telegram_id) user.delete() text = f'Пользователь удален' return text
def put(self, telegram_id): user = User.objects(telegram_id=telegram_id) user.update(**request.json) user.reload() return json.loads(user.to_json())