discord_sdr/discord_sdr.sp
2025-12-06 20:03:07 +01:00

107 lines
2.6 KiB
SourcePawn

#include <sdkhooks>
#include <sdktools>
#include <sourcemod>
#include <steampawn>
#include <discord>
#pragma newdecls required
#pragma semicolon 1
char sPublicIP[64];
int PublicSDRIP[4];
bool SDR_IP_Set = false;
ConVar g_cWebhook = null;
#define MSG_SDR "The SDR IP for {SERVER_NAME} is: `{SDR_INFO}` You can use `connect {SDR_INFO}` in the console!"
public Plugin myinfo =
{
name = "List SDR Info",
author = "Spaenny",
description = "Adds a command to list SDR info and post to Discord.",
version = "1.0.0",
url = "https://spaenny.tf"
};
public void OnPluginStart()
{
RegConsoleCmd("sm_sdr", Command_SDR, "List SDR Info");
g_cWebhook = CreateConVar("discord_sdrinfo_webhook", "sdrinfo", "Config key from configs/discord.cfg.");
AutoExecConfig(true, "discord_sdrinfo");
}
public void OnConfigsExecuted()
{
int decSDRIP = SteamPawn_GetSDRFakeIP();
if (decSDRIP == 0)
{
LogMessage("SDR IP is not set");
return;
}
SDR_IP_Set = true;
PublicSDRIP[0] = (decSDRIP >> 24) & 0xFF;
PublicSDRIP[1] = (decSDRIP >> 16) & 0xFF;
PublicSDRIP[2] = (decSDRIP >> 8) & 0xFF;
PublicSDRIP[3] = decSDRIP & 0xFF;
int SDRPort = SteamPawn_GetSDRFakePort(0);
Format(sPublicIP, sizeof(sPublicIP), "%u.%u.%u.%u:%d",
PublicSDRIP[0], PublicSDRIP[1], PublicSDRIP[2], PublicSDRIP[3], SDRPort);
// Build the Discord message
char sMSG[512];
Format(sMSG, sizeof(sMSG), "%s", MSG_SDR);
// Replace SDR IP
ReplaceString(sMSG, sizeof(sMSG), "{SDR_INFO}", sPublicIP);
// Replace Server Name
char sServerName[128];
GetConVarString(FindConVar("hostname"), sServerName, sizeof(sServerName));
ReplaceString(sMSG, sizeof(sMSG), "{SERVER_NAME}", sServerName);
LogMessage("SDR IP: %s", sPublicIP);
SendMessage(sMSG);
}
public Action Command_SDR(int client, int args)
{
if (!SDR_IP_Set)
{
PrintToChat(client, "SDR does not seem to be on for this server.");
return Plugin_Handled;
}
PrintToChat(client, "SDR IP: %s", sPublicIP);
char password[64];
ConVar cv = FindConVar("sv_password");
if (cv != null)
{
cv.GetString(password, sizeof(password));
}
else
{
password[0] = '\0';
}
PrintToChat(client, "Connect Command: connect %s; password %s", sPublicIP, password);
return Plugin_Handled;
}
// Helper function: send a message to Discord
void SendMessage(const char[] sMessage)
{
if (g_cWebhook != null)
{
char sWebhook[64];
g_cWebhook.GetString(sWebhook, sizeof(sWebhook));
Discord_SendMessage(sWebhook, sMessage);
}
}