@@ -13,9 +13,9 @@ const numberOrString = z.string().transform((s) => {
1313
1414_commandsBase
1515 . createCommand ( {
16- trigger : "getrole " ,
16+ trigger : "getroles " ,
1717 scope : "private" ,
18- description : "Get role of userid " ,
18+ description : "Get roles of an user " ,
1919 args : [
2020 {
2121 key : "username" ,
@@ -33,24 +33,26 @@ _commandsBase
3333 }
3434
3535 try {
36- const { role } = await api . tg . permissions . getRole . query ( { userId } )
37- await context . reply ( fmt ( ( { b } ) => [ `Role:` , b `${ role } ` ] ) )
36+ const { roles } = await api . tg . permissions . getRoles . query ( { userId } )
37+ await context . reply (
38+ fmt ( ( { b } ) => ( roles ?. length ? [ `Roles:` , b `${ roles . join ( " " ) } ` ] : "This user has no roles" ) )
39+ )
3840 } catch ( err ) {
3941 await context . reply ( `There was an error: \n${ String ( err ) } ` )
4042 }
4143 } ,
4244 } )
4345 . createCommand ( {
44- trigger : "setrole " ,
46+ trigger : "addrole " ,
4547 scope : "private" ,
46- description : "Set role of username " ,
48+ description : "Add role to user " ,
4749 args : [
4850 {
4951 key : "username" ,
5052 type : numberOrString ,
5153 description : "The username or the user id of the user you want to update the role" ,
5254 } ,
53- { key : "role" , type : z . enum < Role [ ] > ( [ "direttivo" , "hr" , "admin" ] ) } ,
55+ { key : "role" , type : z . enum < Role [ ] > ( [ "owner" , "president" , " direttivo", "hr" , "admin" ] ) } ,
5456 ] ,
5557 permissions : {
5658 allowedRoles : [ "owner" , "direttivo" ] ,
@@ -65,16 +67,73 @@ _commandsBase
6567 }
6668
6769 try {
68- const { role : prev } = await api . tg . permissions . getRole . query ( { userId } )
69- await api . tg . permissions . setRole . query ( { userId, adderId : context . from . id , role : args . role } )
70+ const { roles, error } = await api . tg . permissions . addRole . mutate ( {
71+ userId,
72+ adderId : context . from . id ,
73+ role : args . role ,
74+ } )
75+
76+ if ( error ) {
77+ await context . reply ( fmt ( ( { n } ) => n `There was an error: ${ error } ` ) )
78+ return
79+ }
80+
81+ await context . reply (
82+ fmt (
83+ ( { b, n } ) => [ b `✅ Role added!` , n `${ b `Username:` } ${ args . username } ` , n `${ b `Updated roles:` } ${ roles } ` ] ,
84+ {
85+ sep : "\n" ,
86+ }
87+ )
88+ )
89+ await context . deleteMessage ( )
90+ } catch ( err ) {
91+ await context . reply ( `There was an error: \n${ String ( err ) } ` )
92+ }
93+ } ,
94+ } )
95+ . createCommand ( {
96+ trigger : "delrole" ,
97+ scope : "private" ,
98+ description : "Remove role from an user" ,
99+ args : [
100+ {
101+ key : "username" ,
102+ type : numberOrString ,
103+ description : "The username or the user id of the user you want to remove the role from" ,
104+ } ,
105+ { key : "role" , type : z . enum < Role [ ] > ( [ "owner" , "president" , "direttivo" , "hr" , "admin" ] ) } ,
106+ ] ,
107+ permissions : {
108+ allowedRoles : [ "owner" , "direttivo" ] ,
109+ } ,
110+ handler : async ( { context, args } ) => {
111+ const userId : number | null =
112+ typeof args . username === "string" ? await getTelegramId ( args . username . replaceAll ( "@" , "" ) ) : args . username
113+
114+ if ( userId === null ) {
115+ await context . reply ( "Not a valid userId or username not in our cache" )
116+ return
117+ }
118+
119+ try {
120+ const { roles, error } = await api . tg . permissions . removeRole . mutate ( {
121+ userId,
122+ removerId : context . from . id ,
123+ role : args . role ,
124+ } )
125+
126+ if ( error ) {
127+ await context . reply ( fmt ( ( { n } ) => n `There was an error: ${ error } ` ) )
128+ return
129+ }
130+
70131 await context . reply (
71132 fmt (
72- ( { b, n } ) => [
73- b `✅ Role set!` ,
74- n `${ b `Username:` } ${ args . username } ` ,
75- n `${ b `Role:` } ${ prev } -> ${ args . role } ` ,
76- ] ,
77- { sep : "\n" }
133+ ( { b, n } ) => [ b `✅ Role removed!` , n `${ b `Username:` } ${ args . username } ` , n `${ b `Updated roles:` } ${ roles } ` ] ,
134+ {
135+ sep : "\n" ,
136+ }
78137 )
79138 )
80139 await context . deleteMessage ( )
0 commit comments