From 70f363bfe7178d60a31160de101714dbb14fde08 Mon Sep 17 00:00:00 2001 From: MennoMax Date: Sun, 27 Oct 2019 01:22:21 +0200 Subject: [PATCH] bugfix, classes now replace the cmd_data and sender_data with classes --- addons/gift/gift_node.gd | 39 +++++++++++++++------------------ addons/gift/util/cmd_data.gd | 16 ++++++++++++++ addons/gift/util/sender_data.gd | 11 ++++++++++ project.godot | 14 +++++++++++- 4 files changed, 58 insertions(+), 22 deletions(-) create mode 100644 addons/gift/util/cmd_data.gd create mode 100644 addons/gift/util/sender_data.gd diff --git a/addons/gift/gift_node.gd b/addons/gift/gift_node.gd index 2997b1e..06deea5 100644 --- a/addons/gift/gift_node.gd +++ b/addons/gift/gift_node.gd @@ -52,7 +52,7 @@ enum WhereFlag { func _init(): websocket.verify_ssl = true - user_regex.compile("(?<=!)[\\w]*(?=Q)") + user_regex.compile("(?<=!)[\\w]*(?=@)") func _ready() -> void: websocket.connect("data_received", self, "data_received") @@ -125,7 +125,7 @@ func add_command(cmd_name : String, instance : Object, instance_func : String, p var func_ref = FuncRef.new() func_ref.set_instance(instance) func_ref.set_function(instance_func) - commands[cmd_name] = [func_ref, permission_level, max_args, min_args, where] + commands[cmd_name] = CommandData.new(func_ref, permission_level, max_args, min_args, where) # Removes a single command or alias. func remove_command(cmd_name : String) -> void: @@ -137,7 +137,7 @@ func purge_command(cmd_name : String) -> void: if(to_remove): var remove_queue = [] for command in commands.keys(): - if(commands[command][0] == to_remove[0]): + if(commands[command].func_ref == to_remove.func_ref): remove_queue.append(command) for queued in remove_queue: commands.erase(queued) @@ -165,50 +165,47 @@ func handle_message(message : String, tags : Dictionary) -> void: print_debug("Authentication successful.") emit_signal("login_attempt", true) "PRIVMSG": - var sender_data : Array = [user_regex.search(msg[0]), msg[2], tags] + var sender_data : SenderData = SenderData.new(user_regex.search(msg[0]).get_string(), msg[2], tags) handle_command(sender_data, msg) emit_signal("chat_message", sender_data, msg[3].right(1)) "WHISPER": - var sender_data : Array = [user_regex.search(msg[0]), msg[2], tags] + var sender_data : SenderData = SenderData.new(user_regex.search(msg[0]).get_string(), msg[2], tags) handle_command(sender_data, msg, true) emit_signal("whisper_message", sender_data, msg[3].right(1)) _: emit_signal("unhandled_message", message, tags) -func handle_command(sender_data : Array, msg : PoolStringArray, whisper : bool = false) -> void: +func handle_command(sender_data : SenderData, msg : PoolStringArray, whisper : bool = false) -> void: if(command_prefixes.has(msg[3].substr(1, 1))): var command : String = msg[3].right(2) - var cmd_data = commands.get(command) + var cmd_data : CommandData = commands.get(command) if(cmd_data): var args = "" if msg.size() < 5 else msg[4] var arg_ary : PoolStringArray = PoolStringArray() if args == "" else args.split(" ") - if(arg_ary.size() > cmd_data[2] && cmd_data[2] != -1): + if(arg_ary.size() > cmd_data.max_args && cmd_data.max_args != -1 || arg_ary.size() < cmd_data.min_args): emit_signal("cmd_invalid_argcount", command, sender_data, cmd_data, arg_ary) print_debug("Invalid argcount!") return - if(arg_ary.size() < cmd_data[3]): - emit_signal("cmd_invalid_argcount", command, sender_data, cmd_data, arg_ary) - print_debug("Invalid argcount!") - return - if(cmd_data[1] != 0): - var user_perm_flags = get_perm_flag_from_tags(sender_data[2]) - if(user_perm_flags & cmd_data[1] != cmd_data[1]): + if(cmd_data.permission_level != 0): + var user_perm_flags = get_perm_flag_from_tags(sender_data.tags) + if(user_perm_flags & cmd_data.permission_level != cmd_data.permission_level): emit_signal("cmd_no_permission", command, sender_data, cmd_data, arg_ary) print_debug("No Permission for command!") return if(arg_ary.size() == 0): - cmd_data[0].call_func([sender_data, command, whisper]) + cmd_data.func_ref.call_func([sender_data, command, whisper]) else: - cmd_data[0].call_func([sender_data, command, whisper], arg_ary) + cmd_data.func_ref.call_func([sender_data, command, whisper], arg_ary) func get_perm_flag_from_tags(tags : Dictionary) -> int: var flag = 0 var entry = tags.get("badges") if(entry): - if(entry.has("vip/1")): - flag += PermissionFlag.VIP - if(entry.has("broadcaster/1")): - flag += PermissionFlag.STREAMER + for badge in entry: + if(badge.begins_with("vip")): + flag += PermissionFlag.VIP + if(badge.begins_with("broadcaster")): + flag += PermissionFlag.STREAMER entry = tags.get("mod") if(entry): if(entry[0] == "1"): diff --git a/addons/gift/util/cmd_data.gd b/addons/gift/util/cmd_data.gd new file mode 100644 index 0000000..3fc9c20 --- /dev/null +++ b/addons/gift/util/cmd_data.gd @@ -0,0 +1,16 @@ +extends Reference +class_name CommandData + +var func_ref : FuncRef +var permission_level : int +var max_args : int +var min_args : int +var where : int + +func _init(f_ref : FuncRef, perm_lvl : int, mx_args : int, mn_args : int, whr : int): + func_ref = f_ref + permission_level = perm_lvl + max_args = mx_args + min_args = mn_args + where = whr + \ No newline at end of file diff --git a/addons/gift/util/sender_data.gd b/addons/gift/util/sender_data.gd new file mode 100644 index 0000000..8b98508 --- /dev/null +++ b/addons/gift/util/sender_data.gd @@ -0,0 +1,11 @@ +extends Reference +class_name SenderData + +var user : String +var channel : String +var tags : Dictionary + +func _init(usr : String, ch : String, tag_dict : Dictionary): + user = usr + channel = ch + tags = tag_dict \ No newline at end of file diff --git a/project.godot b/project.godot index b4c657a..31a6572 100644 --- a/project.godot +++ b/project.godot @@ -9,13 +9,25 @@ config_version=4 _global_script_classes=[ { +"base": "Reference", +"class": "CommandData", +"language": "GDScript", +"path": "res://addons/gift/util/cmd_data.gd" +}, { "base": "Node", "class": "Gift", "language": "GDScript", "path": "res://addons/gift/gift_node.gd" +}, { +"base": "Reference", +"class": "SenderData", +"language": "GDScript", +"path": "res://addons/gift/util/sender_data.gd" } ] _global_script_class_icons={ -"Gift": "" +"CommandData": "", +"Gift": "", +"SenderData": "" } [application]