* * Role Permissions: * modify (All) * modify.role (Change user roles) */
(rest string, user *users.UserRecord, room *rooms.Room, flags events.EventFlag)
| 18 | * modify.role (Change user roles) |
| 19 | */ |
| 20 | func Modify(rest string, user *users.UserRecord, room *rooms.Room, flags events.EventFlag) (bool, error) { |
| 21 | |
| 22 | args := util.SplitButRespectQuotes(rest) |
| 23 | |
| 24 | if len(args) < 3 { |
| 25 | infoOutput, _ := templates.Process("admincommands/help/command.modify", nil, user.UserId) |
| 26 | user.SendText(infoOutput) |
| 27 | return true, nil |
| 28 | } |
| 29 | |
| 30 | // modify role <username> <newrole> |
| 31 | if args[0] == `role` { |
| 32 | |
| 33 | if !user.HasRolePermission(`modify.role`) { |
| 34 | user.SendText(`you do not have <ansi fg="command">modify.role</ansi> permission`) |
| 35 | return true, nil |
| 36 | } |
| 37 | |
| 38 | searchUser := args[1] |
| 39 | newRole := args[2] |
| 40 | |
| 41 | if newRole != users.RoleAdmin && newRole != users.RoleUser && newRole != users.RoleMod { |
| 42 | user.SendText(`<ansi fg="alert-4">Invalid role. Valid roles: user, mod, admin</ansi>`) |
| 43 | return true, nil |
| 44 | } |
| 45 | |
| 46 | foundUsername := `` |
| 47 | foundCharacterName := `` |
| 48 | |
| 49 | for _, u := range users.GetAllActiveUsers() { |
| 50 | if strings.EqualFold(searchUser, u.Username) { |
| 51 | |
| 52 | if u.Role == users.RoleAdmin { |
| 53 | user.SendText(`<ansi fg="alert-4">Admin role cannot be removed this way.</ansi>`) |
| 54 | return true, nil |
| 55 | } |
| 56 | |
| 57 | if u.Role == newRole { |
| 58 | user.SendText(`<ansi fg="alert-4">That role is already set for this user.</ansi>`) |
| 59 | return true, nil |
| 60 | } |
| 61 | |
| 62 | foundCharacterName = u.Character.Name |
| 63 | foundUsername = u.Username |
| 64 | |
| 65 | u.Role = newRole |
| 66 | |
| 67 | users.SaveUser(*u) |
| 68 | |
| 69 | u.SendText(`<ansi fg="alert-3">Your role has been set to: ` + newRole + `</ansi>`) |
| 70 | break |
| 71 | } |
| 72 | } |
| 73 | |
| 74 | if len(foundUsername) == 0 { |
| 75 | users.SearchOfflineUsers(func(u *users.UserRecord) bool { |
| 76 | |
| 77 | if strings.EqualFold(searchUser, u.Username) { |
nothing calls this directly
no test coverage detected