pokepurple/addons/twitcher/chat/twitch_command_help.gd
Mario Steele c11a4ebbc2 Initial Commit
Initial commit of Code Base.
2025-06-12 14:31:14 -05:00

83 lines
3.1 KiB
GDScript

@icon("res://addons/twitcher/assets/command-icon.svg")
extends TwitchCommand
class_name TwitchCommandHelp
## Used to determine the Sender User if empty and to send the message back
@export var twitch_api: TwitchAPI
## Sender User that will send the answers on the command. Can be empty then the current user will be used
@export var sender_user: TwitchUser
var _current_user: TwitchUser
func _ready() -> void:
if command == "": command = "help"
command_received.connect(_on_command_receive)
if twitch_api == null: twitch_api = TwitchAPI.instance
if twitch_api == null:
push_error("Command is missing TwitchAPI to answer!")
return
var response: TwitchGetUsers.Response = await twitch_api.get_users(TwitchGetUsers.Opt.new())
_current_user = response.data[0]
if sender_user == null: sender_user = _current_user
func _on_command_receive(from_username: String, info: TwitchCommandInfo, args: PackedStringArray) -> void:
if info.original_message is TwitchChatMessage:
var help_message: String = _generate_help_message(args, false)
var chat_message: TwitchChatMessage = info.original_message as TwitchChatMessage
var message_body: TwitchSendChatMessage.Body = TwitchSendChatMessage.Body.new()
message_body.broadcaster_id = chat_message.broadcaster_user_id
message_body.sender_id = sender_user.id
message_body.message = help_message
message_body.reply_parent_message_id = chat_message.message_id
twitch_api.send_chat_message(message_body)
else:
var help_message: String = _generate_help_message(args, true)
var message: Dictionary = info.original_message
if message["to_user_id"] != _current_user.id:
push_error("Can't answer the whisper message receiver is not the user that will be used as sender!")
return
var message_body: TwitchSendWhisper.Body = TwitchSendWhisper.Body.new()
message_body.message = help_message
twitch_api.send_whisper(message_body, message["to_user_id"], message["from_user_id"])
func _generate_help_message(args: Array[String], whisper_only: bool) -> String:
var message: String = ""
var show_details: bool = not args.is_empty()
for command in TwitchCommand.ALL_COMMANDS:
if command == self: continue
var should_be_added: bool = command.where == TwitchCommand.WhereFlag.ANYWHERE \
|| command.where == TwitchCommand.WhereFlag.WHISPER && whisper_only \
|| command.where == TwitchCommand.WhereFlag.CHAT && not whisper_only
if not args.is_empty():
should_be_added = should_be_added && _is_command_in_args(command, args)
if should_be_added:
if show_details:
message += "[%s%s - %s] " % [command.command_prefixes[0], command.command, command.description]
else:
message += "%s%s, " % [command.command_prefixes[0], command.command]
if message == "":
return "No commands registered"
elif not show_details:
message = message.trim_suffix(", ")
message = "List of all Commands: %s | You can use '!help COMMAND' for details!" % message
return message
func _is_command_in_args(command: TwitchCommand, args: Array[String]) -> bool:
for arg in args:
if command.command == arg:
return true
if command.aliases.has(arg):
return true
return false