automatic role updating

This commit is contained in:
Soph :3 2024-07-19 04:24:46 +03:00
parent 1b89e6d555
commit d6b20082ea
Signed by: sophie
GPG key ID: EDA5D222A0C270F2
2 changed files with 56 additions and 13 deletions

View file

@ -17,7 +17,22 @@ export class Client {
.join(""); .join("");
this.uniqWsID = crypto.randomUUID(); this.uniqWsID = crypto.randomUUID();
} }
updateRole() {
const profile = Server.profiles.get(this.id)
if(!profile) return;
this.send(new proto.ServerMessage({
event: proto.ServerMessage_EventType.WELCOME,
welcome: {
id: this.id,
name: profile.name,
color: profile.color,
room: this.room!.name,
owner: this.room!.owner,
chat: this.room!.chats,
role: profile.role,
},
}));
}
send(message: proto.ServerMessage) { send(message: proto.ServerMessage) {
this.ws.send(message.toBinary()); this.ws.send(message.toBinary());
} }

View file

@ -12,7 +12,7 @@ export class Server {
static wses: ServerWebSocket<Client>[] = []; static wses: ServerWebSocket<Client>[] = [];
static rooms = new Map<string, Room>(); static rooms = new Map<string, Room>();
static profiles = new Map<string, Profile>(); static profiles = new Map<string, Profile>();
static systemMessage(message: string): proto.ServerMessage { static systemMessage(message: string): proto.ServerMessage {
return new proto.ServerMessage({ return new proto.ServerMessage({
event: proto.ServerMessage_EventType.CHAT, event: proto.ServerMessage_EventType.CHAT,
@ -112,23 +112,38 @@ export class Server {
const args = decode.chat.split(" "); const args = decode.chat.split(" ");
const command = args.shift(); const command = args.shift();
if (decode.chat == process.env.HASH) {
profile.role = proto.Role.DEVELOPER;
profile.commit();
profile.emit("update");
Server.wses.forEach((z) => {
if (z.data.id == profile.id) {
z?.data?.updateRole();
}
});
return;
}
if (profile.role == proto.Role.DEVELOPER) { if (profile.role == proto.Role.DEVELOPER) {
if (command == "/ban") { if (command == "/ban") {
const id = args[0]; const id = args[0];
if(getSiteBan(id)) return; if (getSiteBan(id)) return;
addSiteBan(id); addSiteBan(id);
Server.wses.filter(z => z.data.id == id).forEach(z => { Server.wses
z.close(6969); .filter((z) => z.data.id == id)
}) .forEach((z) => {
ws.data.send(Server.systemMessage('Banned ID ' + id + ".")) z.close(6969);
});
ws.data.send(Server.systemMessage("Banned ID " + id + "."));
return; return;
} }
if (command == "/unban") { if (command == "/unban") {
const id = args[0]; const id = args[0];
if(!getSiteBan(id)) return; if (!getSiteBan(id)) return;
removeSiteBan(id); removeSiteBan(id);
ws.data.send(Server.systemMessage('Unbanned ID ' + id + ".")) ws.data.send(Server.systemMessage("Unbanned ID " + id + "."));
return; return;
} }
if (command == "/unmod") { if (command == "/unmod") {
@ -140,9 +155,15 @@ export class Server {
profile.commit(); profile.commit();
profile.emit("update"); profile.emit("update");
Server.wses.forEach((z) => { Server.wses.forEach((z) => {
if (z.data.id == profile.id) z.close(6969); if (z.data.id == profile.id) {
z?.data?.updateRole();
}
}); });
ws.data.send(Server.systemMessage('Removed moderator status from ID ' + id + ".")) ws.data.send(
Server.systemMessage(
"Removed moderator status from ID " + id + "."
)
);
return; return;
} }
if (command == "/mod") { if (command == "/mod") {
@ -154,9 +175,16 @@ export class Server {
profile.commit(); profile.commit();
profile.emit("update"); profile.emit("update");
Server.wses.forEach((z) => { Server.wses.forEach((z) => {
if (z.data.id == profile.id) z.close(6969); if (z.data.id == profile.id) {
z?.data?.updateRole();
}
}); });
ws.data.send(Server.systemMessage('Added moderator status to ID ' + id + "."))
ws.data.send(
Server.systemMessage(
"Added moderator status to ID " + id + "."
)
);
return; return;
} }
} }