bugfix, classes now replace the cmd_data and sender_data with classes
This commit is contained in:
parent
b0ac64182f
commit
70f363bfe7
@ -52,7 +52,7 @@ enum WhereFlag {
|
|||||||
|
|
||||||
func _init():
|
func _init():
|
||||||
websocket.verify_ssl = true
|
websocket.verify_ssl = true
|
||||||
user_regex.compile("(?<=!)[\\w]*(?=Q)")
|
user_regex.compile("(?<=!)[\\w]*(?=@)")
|
||||||
|
|
||||||
func _ready() -> void:
|
func _ready() -> void:
|
||||||
websocket.connect("data_received", self, "data_received")
|
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()
|
var func_ref = FuncRef.new()
|
||||||
func_ref.set_instance(instance)
|
func_ref.set_instance(instance)
|
||||||
func_ref.set_function(instance_func)
|
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.
|
# Removes a single command or alias.
|
||||||
func remove_command(cmd_name : String) -> void:
|
func remove_command(cmd_name : String) -> void:
|
||||||
@ -137,7 +137,7 @@ func purge_command(cmd_name : String) -> void:
|
|||||||
if(to_remove):
|
if(to_remove):
|
||||||
var remove_queue = []
|
var remove_queue = []
|
||||||
for command in commands.keys():
|
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)
|
remove_queue.append(command)
|
||||||
for queued in remove_queue:
|
for queued in remove_queue:
|
||||||
commands.erase(queued)
|
commands.erase(queued)
|
||||||
@ -165,50 +165,47 @@ func handle_message(message : String, tags : Dictionary) -> void:
|
|||||||
print_debug("Authentication successful.")
|
print_debug("Authentication successful.")
|
||||||
emit_signal("login_attempt", true)
|
emit_signal("login_attempt", true)
|
||||||
"PRIVMSG":
|
"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)
|
handle_command(sender_data, msg)
|
||||||
emit_signal("chat_message", sender_data, msg[3].right(1))
|
emit_signal("chat_message", sender_data, msg[3].right(1))
|
||||||
"WHISPER":
|
"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)
|
handle_command(sender_data, msg, true)
|
||||||
emit_signal("whisper_message", sender_data, msg[3].right(1))
|
emit_signal("whisper_message", sender_data, msg[3].right(1))
|
||||||
_:
|
_:
|
||||||
emit_signal("unhandled_message", message, tags)
|
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))):
|
if(command_prefixes.has(msg[3].substr(1, 1))):
|
||||||
var command : String = msg[3].right(2)
|
var command : String = msg[3].right(2)
|
||||||
var cmd_data = commands.get(command)
|
var cmd_data : CommandData = commands.get(command)
|
||||||
if(cmd_data):
|
if(cmd_data):
|
||||||
var args = "" if msg.size() < 5 else msg[4]
|
var args = "" if msg.size() < 5 else msg[4]
|
||||||
var arg_ary : PoolStringArray = PoolStringArray() if args == "" else args.split(" ")
|
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)
|
emit_signal("cmd_invalid_argcount", command, sender_data, cmd_data, arg_ary)
|
||||||
print_debug("Invalid argcount!")
|
print_debug("Invalid argcount!")
|
||||||
return
|
return
|
||||||
if(arg_ary.size() < cmd_data[3]):
|
if(cmd_data.permission_level != 0):
|
||||||
emit_signal("cmd_invalid_argcount", command, sender_data, cmd_data, arg_ary)
|
var user_perm_flags = get_perm_flag_from_tags(sender_data.tags)
|
||||||
print_debug("Invalid argcount!")
|
if(user_perm_flags & cmd_data.permission_level != cmd_data.permission_level):
|
||||||
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]):
|
|
||||||
emit_signal("cmd_no_permission", command, sender_data, cmd_data, arg_ary)
|
emit_signal("cmd_no_permission", command, sender_data, cmd_data, arg_ary)
|
||||||
print_debug("No Permission for command!")
|
print_debug("No Permission for command!")
|
||||||
return
|
return
|
||||||
if(arg_ary.size() == 0):
|
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:
|
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:
|
func get_perm_flag_from_tags(tags : Dictionary) -> int:
|
||||||
var flag = 0
|
var flag = 0
|
||||||
var entry = tags.get("badges")
|
var entry = tags.get("badges")
|
||||||
if(entry):
|
if(entry):
|
||||||
if(entry.has("vip/1")):
|
for badge in entry:
|
||||||
flag += PermissionFlag.VIP
|
if(badge.begins_with("vip")):
|
||||||
if(entry.has("broadcaster/1")):
|
flag += PermissionFlag.VIP
|
||||||
flag += PermissionFlag.STREAMER
|
if(badge.begins_with("broadcaster")):
|
||||||
|
flag += PermissionFlag.STREAMER
|
||||||
entry = tags.get("mod")
|
entry = tags.get("mod")
|
||||||
if(entry):
|
if(entry):
|
||||||
if(entry[0] == "1"):
|
if(entry[0] == "1"):
|
||||||
|
16
addons/gift/util/cmd_data.gd
Normal file
16
addons/gift/util/cmd_data.gd
Normal file
@ -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
|
||||||
|
|
11
addons/gift/util/sender_data.gd
Normal file
11
addons/gift/util/sender_data.gd
Normal file
@ -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
|
@ -9,13 +9,25 @@
|
|||||||
config_version=4
|
config_version=4
|
||||||
|
|
||||||
_global_script_classes=[ {
|
_global_script_classes=[ {
|
||||||
|
"base": "Reference",
|
||||||
|
"class": "CommandData",
|
||||||
|
"language": "GDScript",
|
||||||
|
"path": "res://addons/gift/util/cmd_data.gd"
|
||||||
|
}, {
|
||||||
"base": "Node",
|
"base": "Node",
|
||||||
"class": "Gift",
|
"class": "Gift",
|
||||||
"language": "GDScript",
|
"language": "GDScript",
|
||||||
"path": "res://addons/gift/gift_node.gd"
|
"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={
|
_global_script_class_icons={
|
||||||
"Gift": ""
|
"CommandData": "",
|
||||||
|
"Gift": "",
|
||||||
|
"SenderData": ""
|
||||||
}
|
}
|
||||||
|
|
||||||
[application]
|
[application]
|
||||||
|
Loading…
x
Reference in New Issue
Block a user