aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorRblSb <msrblsb@gmail.com>2021-08-30 05:27:22 +0300
committerRblSb <msrblsb@gmail.com>2021-08-30 05:27:22 +0300
commitd21b5da50cf24de64581cfc78ce46533faad0e86 (patch)
tree870a883c1012deb88a7b3af0bae5b797060035a3 /src
parent6cb22fb04d83e0bc1046dd980736d97768928725 (diff)
/kick feature
Diffstat (limited to 'src')
-rw-r--r--src/Types.hx4
-rw-r--r--src/client/Main.hx23
-rw-r--r--src/server/Main.hx11
3 files changed, 38 insertions, 0 deletions
diff --git a/src/Types.hx b/src/Types.hx
index 6a15bba..3a3f437 100644
--- a/src/Types.hx
+++ b/src/Types.hx
@@ -142,6 +142,9 @@ typedef WsEvent = {
name:String,
time:Float
},
+ ?kickClient:{
+ name:String,
+ },
?addVideo:{
item:VideoItem,
atEnd:Bool
@@ -205,6 +208,7 @@ enum abstract WsEventType(String) {
// var AddClient;
// var RemoveClient;
var BanClient;
+ var KickClient;
var AddVideo;
var RemoveVideo;
var SkipVideo;
diff --git a/src/client/Main.hx b/src/client/Main.hx
index bfbe97e..eae0fc8 100644
--- a/src/client/Main.hx
+++ b/src/client/Main.hx
@@ -40,6 +40,7 @@ class Main {
final filters:Array<{regex:EReg, replace:String}> = [];
var personal = new Client("Unknown", 0);
var isConnected = false;
+ var disabledReconnection = false;
var ws:WebSocket;
final player:Player;
var onTimeGet:Timer;
@@ -127,6 +128,7 @@ class Main {
if (isConnected) serverMessage(2);
isConnected = false;
player.pause();
+ if (disabledReconnection) return;
Timer.delay(openWebSocket, 2000);
}
}
@@ -412,6 +414,9 @@ class Main {
if (personal.group.toInt() != oldGroup) onUserGroupChanged();
case BanClient: // server-only
+ case KickClient:
+ disabledReconnection = true;
+ ws.close();
case Message:
addMessage(data.message.clientName, data.message.text);
@@ -835,6 +840,7 @@ class Main {
switch (command) {
case "ban":
+ mergeRedundantArgs(args, 0, 2);
final name = args[0];
final time = parseSimpleDate(args[1]);
if (time < 0) return true;
@@ -847,6 +853,7 @@ class Main {
});
return true;
case "unban", "removeBan":
+ mergeRedundantArgs(args, 0, 1);
final name = args[0];
send({
type: BanClient,
@@ -856,6 +863,16 @@ class Main {
}
});
return true;
+ case "kick":
+ mergeRedundantArgs(args, 0, 1);
+ final name = args[0];
+ send({
+ type: KickClient,
+ kickClient: {
+ name: name
+ }
+ });
+ return true;
case "clear":
send({type: ClearChat});
return true;
@@ -906,6 +923,12 @@ class Main {
return Std.parseInt(block);
}
+ function mergeRedundantArgs(args:Array<String>, pos:Int, newLength:Int):Void {
+ final count = args.length - (newLength - 1);
+ if (count < 2) return;
+ args.insert(pos, args.splice(pos, count).join(" "));
+ }
+
public function blinkTabWithTitle(title:String):Void {
if (!document.hidden) return;
if (onBlinkTab != null) onBlinkTab.stop();
diff --git a/src/server/Main.hx b/src/server/Main.hx
index 42abaa9..b038f01 100644
--- a/src/server/Main.hx
+++ b/src/server/Main.hx
@@ -474,6 +474,17 @@ class Main {
serverMessage(client, '${bannedClient.name} ($ip) has been banned.');
sendClientList();
+ case KickClient:
+ if (!checkPermission(client, BanClientPerm)) return;
+ final name = data.kickClient.name;
+ final kickedClient = clients.getByName(name);
+ if (kickedClient == null) return;
+ if (client.name != name && kickedClient.isAdmin) {
+ serverMessage(client, "adminsCannotBeBannedError");
+ return;
+ }
+ send(kickedClient, {type: KickClient});
+
case Login:
final name = data.login.clientName.trim();
final lcName = name.toLowerCase();
send patches to the email below
yukais@pinapelz.com
include the subject [PATCH repo_name]
pinapelz.com
homepage