From 508bc0293c5ef25a60dddf4dbf0a1ccc563a8380 Mon Sep 17 00:00:00 2001 From: Nexd Date: Tue, 16 Jul 2019 04:02:00 +0200 Subject: [PATCH] Add files via upload --- dsm-1.0/configs/dsm/command_listener.ini | 3 + dsm-1.0/plugins/DSM.smx | Bin 0 -> 12931 bytes dsm-1.0/scripting/DSM.sp | 298 +++++++++++++++++++++++ dsm-1.0/scripting/dsm_natives.sp | 55 +++++ dsm-1.0/scripting/include/dsm.inc | 24 ++ 5 files changed, 380 insertions(+) create mode 100644 dsm-1.0/configs/dsm/command_listener.ini create mode 100644 dsm-1.0/plugins/DSM.smx create mode 100644 dsm-1.0/scripting/DSM.sp create mode 100644 dsm-1.0/scripting/dsm_natives.sp create mode 100644 dsm-1.0/scripting/include/dsm.inc diff --git a/dsm-1.0/configs/dsm/command_listener.ini b/dsm-1.0/configs/dsm/command_listener.ini new file mode 100644 index 0000000..98aea50 --- /dev/null +++ b/dsm-1.0/configs/dsm/command_listener.ini @@ -0,0 +1,3 @@ +"Command_Listener" +{ +} \ No newline at end of file diff --git a/dsm-1.0/plugins/DSM.smx b/dsm-1.0/plugins/DSM.smx new file mode 100644 index 0000000000000000000000000000000000000000..f77fc5fc309b849eda4b43169638c46c39e14d44 GIT binary patch literal 12931 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 moONXuo|3-xH!vl?j&eO)`H<|AWZ+ +#include +#include +#include + +#define PLUGIN_NEV "DSM" +#define PLUGIN_LERIAS "Discord Server Manager" +#define PLUGIN_AUTHOR "Nexd" +#define PLUGIN_VERSION "1.0" +#define PLUGIN_URL "https://github.com/KillStr3aK" +#pragma tabsize 0 + +enum +{ + c_DiscordName, + c_DiscordTag, + Cookie_Count +} + +enum +{ + Bot_Token, + Channel_ID, + AssignCommand, + UseSWGM, + Settings_Count +} + +bool m_Discord[MAXPLAYERS+1]; +int assignid[MAXPLAYERS+1]; +char assigncommand[32]; + +Handle Cookies[Cookie_Count] = INVALID_HANDLE; +Handle OnClientLinkedAccount = INVALID_HANDLE; + +ConVar DSM_Settings[Settings_Count]; +DiscordBot dbot; + +public Plugin myinfo = +{ + name = PLUGIN_NEV, + author = PLUGIN_AUTHOR, + description = PLUGIN_LERIAS, + version = PLUGIN_VERSION, + url = PLUGIN_URL +}; + +public void OnPluginStart() +{ + DSM_Settings[Bot_Token] = CreateConVar("dsm_token", "", "Bot token"); + DSM_Settings[Channel_ID] = CreateConVar("dsm_channel_id", "", "Text channel ID"); + DSM_Settings[AssignCommand] = CreateConVar("dsm_assign_command", "!link", "Command in discord to link the account. eg.( !link 12345 )"); + DSM_Settings[UseSWGM] = CreateConVar("dsm_use_swgm", "0", "1 - Use the same .ini as SWGM for the commands | 0 - Use a new ini (configs/dsm/command_listener.ini)"); + + Cookies[c_DiscordName] = RegClientCookie("dsm_discord_name", "discord username", CookieAccess_Private); + Cookies[c_DiscordTag] = RegClientCookie("dsm_discord_tag", "discord tag", CookieAccess_Private); + + AutoExecConfig(true, "discord_server_manager", "sourcemod"); + + RegConsoleCmd("sm_link", Command_Assign); + + for (int i = MaxClients; i > 0; --i) + { + if (!AreClientCookiesCached(i)) + { + continue; + } + + OnClientCookiesCached(i); + } + + LoadCommands(); +} + +public APLRes AskPluginLoad2(Handle myself, bool late, char[] error, int err_max) +{ + CreateNative("DSM_IsDiscordMember", Native_IsDiscordMember); + + OnClientLinkedAccount = CreateGlobalForward("DSM_OnClientLinkedAccount", ET_Ignore, Param_Cell); + + RegPluginLibrary("DSM"); + + return APLRes_Success; +} + +public void LoadCommands() +{ + KeyValues Kv = new KeyValues("Command_Listener"); + + char sBuffer[256]; + if(!DSM_Settings[UseSWGM].BoolValue) + BuildPath(Path_SM, sBuffer, sizeof(sBuffer), "configs/dsm/command_listener.ini"); + else + BuildPath(Path_SM, sBuffer, sizeof(sBuffer), "configs/swgm/command_listener.ini"); + + if (!FileToKeyValues(Kv, sBuffer)) SetFailState("Missing config file %s", sBuffer); + + if (Kv.GotoFirstSubKey()) + { + do + { + if (Kv.GetSectionName(sBuffer, sizeof(sBuffer))) + { + AddCommandListener(Check, sBuffer); + } + } + while (Kv.GotoNextKey()); + } + delete Kv; +} + +public Action Check(int client, const char[] command, int args) +{ + if(!IsValidClient(client)) + return Plugin_Continue; + + if(!IsDiscordMember(client)) + { + PrintToChat(client, "%s You have to link your \x0BDiscord \x01account first. Use \x04!link", PREFIX); + return Plugin_Stop; + } + + return Plugin_Continue; +} + +public void OnClientCookiesCached(int client) +{ + char DiscordName_Value[MAX_USERNAME_LENGTH]; + char DiscordTag_Value[MAX_TAG_LENGTH]; + GetClientCookie(client, Cookies[c_DiscordName], DiscordName_Value, sizeof(DiscordName_Value)); + GetClientCookie(client, Cookies[c_DiscordTag], DiscordTag_Value, sizeof(DiscordTag_Value)); + + if(!StrEqual(DiscordName_Value, empty) && !StrEqual(DiscordTag_Value, empty)){ + m_Discord[client] = true; + } else { + m_Discord[client] = false; + } +} + +public void OnClientPostAdminCheck(int client) +{ + assignid[client] = GetAssignID(); +} + +public Action Command_Assign(int client, int args) +{ + if(!m_Discord[client]) + { + if(!IsValidAssignID(assignid[client])) + { + PrintToChat(client, "%s We can't find your assign ID. Please reconnect!", PREFIX); //This could only happen if the plugin was reloaded + } else { + PrintToChat(client, "%s Use this command on our discord server: \x04%s \x0C%i", PREFIX, assigncommand, GetClientAssignID(client)); + } + } else { + PrintToChat(client, "%s You have already linked your discord account.", PREFIX); + } + + return Plugin_Handled; +} + +public void OnConfigsExecuted() +{ + if (dbot != view_as(INVALID_HANDLE)) + { + dbot.GetGuilds(GuildList, INVALID_FUNCTION); + } + + GetConVarString(DSM_Settings[AssignCommand], assigncommand, sizeof(assigncommand)); +} + +public void GuildList(DiscordBot bot, char[] id, char[] name, char[] icon, bool owner, int permissions, any data) +{ + dbot.GetGuildChannels(id, ChannelList, INVALID_FUNCTION); +} + +public void ChannelList(DiscordBot bot, char[] guild, DiscordChannel Channel, any data) +{ + if(Channel.IsText) { + char id[32]; + Channel.GetID(id, sizeof(id)); + + char sChannelID[64]; + DSM_Settings[Channel_ID].GetString(sChannelID, sizeof(sChannelID)); + + if(StrEqual(id, sChannelID)) + { + dbot.StopListening(); + + char name[32]; + Channel.GetName(name, sizeof(name)); + dbot.StartListeningToChannel(Channel, OnMessage); + } + } +} + +public void OnMessage(DiscordBot Bot, DiscordChannel Channel, DiscordMessage message) +{ + if (message.GetAuthor().IsBot()) + return; + + char sMessage[MAX_DISCORD_MESSAGE_LENGTH]; + char m_Author[MAX_USERNAME_LENGTH]; + char m_dTag[MAX_TAG_LENGTH]; + char ReplyTo[MAX_DISCORD_MESSAGE_LENGTH]; + char userid[32]; + char explodemessage[2][MAX_DISCORD_MESSAGE_LENGTH]; + + message.GetContent(sMessage, sizeof(sMessage)); + message.GetAuthor().GetUsername(m_Author, sizeof(m_Author)); + message.GetAuthor().GetDiscriminator(m_dTag, sizeof(m_dTag)); + message.GetAuthor().GetID(userid, sizeof(userid)); + + ExplodeString(sMessage, " ", explodemessage, sizeof(explodemessage), sizeof(explodemessage[])); + + if(!StrEqual(explodemessage[0], assigncommand)) + { + Format(ReplyTo, sizeof(ReplyTo), "<@%s> This channel is being used for account linking!\nUsage: %s ", userid, assigncommand); + dbot.SendMessage(Channel, ReplyTo); + return; + } + + if(!IsValidAssignID(StringToInt(explodemessage[1]))) { + Format(ReplyTo, sizeof(ReplyTo), "<@%s> This assign ID isn't valid!", userid); + dbot.SendMessage(Channel, ReplyTo); + return; + } + + if(StringToInt(explodemessage[1]) == assignid[GetClientFromAssignID(StringToInt(explodemessage[1]))]){ + SetClientCookie(GetClientFromAssignID(StringToInt(explodemessage[1])), Cookies[c_DiscordName], m_Author); + SetClientCookie(GetClientFromAssignID(StringToInt(explodemessage[1])), Cookies[c_DiscordName], m_dTag); + + PrintToChat(GetClientFromAssignID(StringToInt(explodemessage[1])), "%s You have linked your discord to this steam account. (\x04%s%s\x01)", PREFIX, m_Author, m_dTag); + m_Discord[GetClientFromAssignID(StringToInt(explodemessage[1]))] = true; + + Format(ReplyTo, sizeof(ReplyTo), "<@%s> You have linked your discord account! You can go back ingame.", userid); + dbot.SendMessage(Channel, ReplyTo); + + Call_StartForward(OnClientLinkedAccount); + Call_PushCell(GetClientFromAssignID(StringToInt(explodemessage[1]))); + Call_Finish(); + } +} + +public void OnAllPluginsLoaded() +{ + if(dbot != view_as(INVALID_HANDLE)) + return; + + char token[128]; + GetConVarString(DSM_Settings[Bot_Token], token, sizeof(token)); + dbot = new DiscordBot(token); +} + +stock int GetAssignID() +{ + return GetRandomInt(MIN_ASSIGN_ID, MAX_ASSIGN_ID); +} + +stock int GetClientAssignID(int client) +{ + return assignid[client]; +} + +stock bool IsValidAssignID(int id) +{ + if(id < MIN_ASSIGN_ID || id > MAX_ASSIGN_ID) + return false; + else + return true; +} + +stock bool IsDiscordMember(int client) +{ + return m_Discord[client]; +} + +stock int GetClientFromAssignID(int id) +{ + int client; + for (int i = 1; i <= MaxClients; ++i) + { + if(!IsValidClient(i)) + continue; + + if(assignid[i] == id) + client = i; + } + + return client; +} + +public int Native_IsDiscordMember(Handle myplugin, int argc) +{ + int client = GetNativeCell(1); + + return IsDiscordMember(client); +} \ No newline at end of file diff --git a/dsm-1.0/scripting/dsm_natives.sp b/dsm-1.0/scripting/dsm_natives.sp new file mode 100644 index 0000000..99a80d2 --- /dev/null +++ b/dsm-1.0/scripting/dsm_natives.sp @@ -0,0 +1,55 @@ +#include +#include + +#define PLUGIN_NEV "DSM Natives" +#define PLUGIN_LERIAS "Examples" +#define PLUGIN_AUTHOR "Nexd" +#define PLUGIN_VERSION "1.0" +#define PLUGIN_URL "https://github.com/KillStr3aK" +#pragma tabsize 0 + +public Plugin myinfo = +{ + name = PLUGIN_NEV, + author = PLUGIN_AUTHOR, + description = PLUGIN_LERIAS, + version = PLUGIN_VERSION, + url = PLUGIN_URL +}; + +public void OnPluginStart() +{ + RegConsoleCmd("sm_islinked", Command_IsLinked); +} + +public Action Command_IsLinked(int client, int args) +{ + if(!IsValidClient(client)) + return Plugin_Continue; + + if(args != 1) + { + PrintToChat(client, "%s Usage: !islinked name", PREFIX); + return Plugin_Handled; + } + + char arg1[MAX_NAME_LENGTH]; + char playername[MAX_NAME_LENGTH+1]; + + GetCmdArg(1, arg1, sizeof(arg1)); + int target = FindTarget(client, arg1, true); + GetClientName(target, playername, sizeof(playername)); + if(DSM_IsDiscordMember(client)) + PrintToChat(client, "%s %s has linked his account.", PREFIX, playername); + else + PrintToChat(client, "%s %s hasn't linked his account.", PREFIX, playername); + + return Plugin_Continue; +} + +public void DSM_OnClientLinkedAccount(int client) +{ + char playername[MAX_NAME_LENGTH+1]; + GetClientName(client, playername, sizeof(playername)); + PrintToChatAll("%s %s has linked his discord account!", PREFIX, playername); +} \ No newline at end of file diff --git a/dsm-1.0/scripting/include/dsm.inc b/dsm-1.0/scripting/include/dsm.inc new file mode 100644 index 0000000..6c05a8b --- /dev/null +++ b/dsm-1.0/scripting/include/dsm.inc @@ -0,0 +1,24 @@ +#if defined _dsm_included_ + #endinput +#endif +#define _dsm_included_ +#define empty "\0" +#define MAX_DISCORD_MESSAGE_LENGTH 2000 +#define MAX_USERNAME_LENGTH 32 +#define MAX_TAG_LENGTH 5 +#define MIN_ASSIGN_ID 12345 +#define MAX_ASSIGN_ID 54321 +#define PREFIX "\x01[\x07DSM\x01]" + +native bool DSM_IsDiscordMember(int client); + +forward void DSM_OnClientLinkedAccount(int client); + +stock bool IsValidClient(int client) +{ + if(client <= 0 ) return false; + if(client > MaxClients) return false; + if(!IsClientConnected(client)) return false; + if(IsFakeClient(client)) return false; + return IsClientInGame(client); +} \ No newline at end of file