chore(release): 0.4.0
[risinglegends.git] / src / server / chat-commands / give-permission.ts
1 import { Socket } from 'socket.io';
2 import { Permission, PermissionGuard, Player } from '../../shared/player';
3 import { ChatCommand } from './base';
4 import { givePlayerPermission } from '../admin';
5 import { findPlayerByUsername } from '../player';
6 import { broadcastMessage, Message } from '../../shared/message';
7 import { renderChatMessage } from './../views/chat';
8
9 async function handler(rawCommand: string, sender: Socket, player: Player) {
10   if(player.permissions.includes('admin')) {
11     const pieces = rawCommand.split(' ');
12     const username = pieces[1];
13     const permission = pieces[2];
14
15     if(PermissionGuard(permission)) {
16       const recipient = await findPlayerByUsername(username);
17       if(player) {
18         await givePlayerPermission(recipient.id, permission as Permission);
19
20         const message: Message = broadcastMessage('server', `Granted ${permission} to ${recipient.username}`);
21         sender.emit('chat', renderChatMessage(message));
22       }
23       else {
24         const message: Message = broadcastMessage('server', `Cant find user [${username}]`);
25         sender.emit('chat', renderChatMessage(message));
26       }
27     }
28   }
29 }
30
31 export const setPermission = new ChatCommand('give-permission', new RegExp(/^give-permission (.*)+/), handler);