async def broadcast(user_id, role_name, send_message, *args, **kwargs): session = db.Session() role = session.query(db.Role).get(role_name) if role: for user in role.users: if user.user_id != user_id: await send_message(user.user_id, *args, **kwargs)
def has_role(user_id, role_name): session = db.Session() user = (session.query( db.User).filter(db.User.user_id == user_id, db.User.roles.any(name=role_name)).one_or_none()) return user
def get_role(role_name: str, *, session: db.Session = None): session = session or db.Session() if not (role := session.query(db.Role).get(role_name)): role = db.Role(name=role_name) session.add(role) session.commit()
async def role(message: Message): user_id, role_name = message.get_args().split() session = db.Session() if user := session.query(db.User).get(user_id): auth.add_role(user, role_name, session=session) await message.answer(str(user)) if (auth.has_role(user.user_id, auth.CASHIER) and user.user_id != message.chat.id): await helpers.start(user.user_id)
async def delete(message: Message): user_id = message.get_args() session = db.Session() if user := session.query(db.User).get(user_id): session.delete(user) session.commit() await message.answer(f"deleted: {user_id}") await bot.obj.send_message( user.user_id, "Бувай!", reply_markup=kbd.remove, )
def sign_in(contact: Contact): session = db.Session() if SignMode.enabled() or not get_role(ADMIN, session=session).users: user = add_user(contact, session=session) if SignMode.one(): SignMode.set(SignMode.OFF) if user.phone_number in _admins: add_role(user, ADMIN, session=session) return user
async def users(message: Message): session = db.Session() users_repr = [str(u) for u in session.query(db.User)] text = "\n".join(users_repr) await message.answer(text)
raise ValueError(f"no user: {user_id}") @dispatcher.message_handler(commands=["receipt"]) @auth.require(auth.ADMIN) @helpers.error_handler async def receipt_(message: Message): args = message.get_args().split() if len(args) > 0: if not (receipt_id := await receipt.search_receipt(args[0])): return else: return if len(args) == 2: recipient = args[1] if recipient.startswith("+"): session = db.Session() if (user := session.query(db.User).filter( db.User.phone_number == recipient).scalar()): user_id = user.user_id else: return elif recipient.isnumeric(): user_id = int(recipient) else: return else: user_id = message.chat.id receipt_data = await receipt.get_receipt_data(receipt_id) receipt_qr, receipt_url, receipt_text = receipt_data await helpers.send_receipt(