mirror of
https://git.ugnet.gay/CrossTalk/azul.git
synced 2026-05-27 22:59:49 +00:00
106 lines
3.6 KiB
Python
106 lines
3.6 KiB
Python
from core import db
|
|
from core.conn import Conn
|
|
import settings
|
|
|
|
# TODO: INS-ize this
|
|
def main(id: str, action: str, *args: str) -> None:
|
|
memberships_to_add = []
|
|
conn = Conn(settings.DB)
|
|
with conn.session() as sess:
|
|
circle = sess.query(db.Circle).filter(db.Circle.chat_id == id).one_or_none()
|
|
if circle is None:
|
|
print('Circle {} does not exist'.format(id))
|
|
return
|
|
if action.lower() == 'role':
|
|
if len(args) < 2:
|
|
print('Insufficient arguments for action role')
|
|
return
|
|
email = args[0]
|
|
role = args[1]
|
|
|
|
user = sess.query(db.User).filter(db.User.email == email).one_or_none()
|
|
if user is None:
|
|
print('role: User {} does not exist'.format(email))
|
|
return
|
|
m = sess.query(db.CircleMembership).filter(db.CircleMembership.chat_id == circle.chat_id, db.CircleMembership.member_id == user.id).one_or_none()
|
|
if m is None:
|
|
print('role: User {} not a member of this circle'.format(user.email))
|
|
return
|
|
|
|
if m.state != 3:
|
|
print('role: User {}\'s role in this circle is not set to accepted'.format(user.email))
|
|
return
|
|
elif m.role == 1:
|
|
print('role: User {} is an owner of this circle and cannot be set to any other role. Use "owner" to transfer their ownership to someone else'.format(user.email))
|
|
return
|
|
if role not in ('2','3'):
|
|
if role == '1':
|
|
print('role: Cannot set user {}\'s circle role to owner with this command. Use "owner" to perform this action'.format(user.email))
|
|
else:
|
|
print('role: Role specified is not valid. Accepted values are 2 (co-owner) and 3 (member)')
|
|
return
|
|
|
|
m.role = int(role)
|
|
memberships_to_add.append(m)
|
|
elif action.lower() == 'owner':
|
|
if len(args) < 1:
|
|
print('Insufficient arguments for action owner')
|
|
return
|
|
email = args[0]
|
|
|
|
user = sess.query(db.User).filter(db.User.email == email).one_or_none()
|
|
if user is None:
|
|
print('owner: User {} does not exist'.format(email))
|
|
return
|
|
m = sess.query(db.CircleMembership).filter(db.CircleMembership.chat_id == circle.chat_id, db.CircleMembership.member_id == user.id).one_or_none()
|
|
if m is None:
|
|
print('role: User {} not a member in this circle'.format(user.email))
|
|
return
|
|
|
|
if m.state != 3:
|
|
print('owner: User {}\'s role in circle is not set to accepted'.format(user.email))
|
|
return
|
|
if m.role == 1:
|
|
print('owner: User {} is already owner'.format(user.email))
|
|
return
|
|
|
|
m_owner = sess.query(db.CircleMembership).filter(db.CircleMembership.chat_id == circle.chat_id, db.CircleMembership.role == 1).one_or_none()
|
|
if m_owner is not None:
|
|
m_owner.role = 3
|
|
m.role = 1
|
|
memberships_to_add.append(m)
|
|
if m_owner is not None:
|
|
memberships_to_add.append(m_owner)
|
|
elif action.lower() == 'remove':
|
|
if len(args) < 1:
|
|
print('Insufficient arguments for action remove')
|
|
return
|
|
email = args[0]
|
|
|
|
user = sess.query(db.User).filter(db.User.email == email).one_or_none()
|
|
if user is None:
|
|
print('remove: User {} does not exist'.format(email))
|
|
return
|
|
m = sess.query(db.CircleMembership).filter(db.CircleMembership.chat_id == circle.chat_id, db.CircleMembership.member_id == user.id).one_or_none()
|
|
if m is None or m.state == 0:
|
|
print('remove: User {} not a member in this circle'.format(user.email))
|
|
return
|
|
if m.role == 1:
|
|
print('remove: User {} is an owner and cannot be removed from circle'.format(user.email))
|
|
return
|
|
|
|
m.role = 3
|
|
m.state = 0
|
|
memberships_to_add.append(m)
|
|
else:
|
|
print('Invalid action')
|
|
|
|
if memberships_to_add:
|
|
sess.add_all(memberships_to_add)
|
|
sess.flush()
|
|
print('Action successfully performed')
|
|
|
|
if __name__ == '__main__':
|
|
import funcli
|
|
funcli.main()
|