mirror of
https://github.com/ChocoTaco1/TacoServer.git
synced 2026-03-26 14:59:09 +00:00
Discord bot connectivity
This commit is contained in:
parent
0b693d236b
commit
b386e32f5d
2 changed files with 286 additions and 0 deletions
282
Classic/scripts/autoexec/zzDiscordBot.cs
Normal file
282
Classic/scripts/autoexec/zzDiscordBot.cs
Normal file
|
|
@ -0,0 +1,282 @@
|
|||
//discordKill(); to kill bot connection
|
||||
//discordCon(); to force connect
|
||||
//sendToDiscord(%message, %channel); to send a message manually
|
||||
|
||||
//exec("scripts/autoexec/zzDiscordBot.cs");
|
||||
|
||||
$discordBot::AuthKey[0] = "";
|
||||
$discordBot::IP[0] = "";
|
||||
$discordBot::reconnectTimeout = 3 * 60000;
|
||||
$discordBot::AuthSet = 0;
|
||||
$discordBot::autoStart = 1;
|
||||
|
||||
|
||||
package discordPackage
|
||||
{
|
||||
|
||||
//function chatMessageAll( %sender, %msgString, %a1, %a2, %a3, %a4, %a5, %a6, %a7, %a8, %a9, %a10 )
|
||||
//{
|
||||
//parent::chatMessageAll( %sender, %msgString, %a1, %a2, %a3, %a4, %a5, %a6, %a7, %a8, %a9, %a10 );
|
||||
//if ( getsubstr(detag(%a2),0,1) !$= "/" ){
|
||||
//sendToDiscord(%sender.nameBase SPC %a2,1);
|
||||
//}
|
||||
//}
|
||||
|
||||
function messageAll(%msgType, %msgString, %a1, %a2, %a3, %a4, %a5, %a6, %a7, %a8, %a9, %a10, %a11, %a12, %a13)
|
||||
{
|
||||
parent::messageAll(%msgType, %msgString, %a1, %a2, %a3, %a4, %a5, %a6, %a7, %a8, %a9, %a10, %a11, %a12, %a13);
|
||||
%type = getTaggedString(%msgType);
|
||||
switch$(%type)
|
||||
{
|
||||
case "msgExplosionKill" or "msgSuicide" or "msgVehicleSpawnKill" or "msgVehicleCrash" or "msgVehicleKill" or "msgTurretSelfKill" or "msgTurretSelfKill" or "msgCTurretKill" or "msgTurretKill" or
|
||||
"msgSelfKill" or "msgOOBKill" or "msgCampKill" or "msgTeamKill" or "msgLavaKill" or "msgLightningKill" or "MsgRogueMineKill" or "MsgHeadshotKill" or "MsgRearshotKill" or "MsgLegitKill":
|
||||
%message = getTaggedString(%msgString);
|
||||
%message = strreplace(%message,"%1",getTaggedString(%a1));
|
||||
%message = strreplace(%message,"%2",getTaggedString(%a2));
|
||||
%message = strreplace(%message,"%3",getTaggedString(%a3));
|
||||
%message = strreplace(%message,"%4",getTaggedString(%a4));
|
||||
%message = strreplace(%message,"%5",getTaggedString(%a5));
|
||||
%message = strreplace(%message,"%6",getTaggedString(%a6));
|
||||
%message = strreplace(%message,"%7",getTaggedString(%a7));
|
||||
%message = strreplace(%message,"%8",getTaggedString(%a8));
|
||||
%message = stripChars(%message, "\cp\co\c0\c6\c7\c8\c9");
|
||||
sendToDiscord(%message,2);
|
||||
}
|
||||
}
|
||||
|
||||
function discordBotProcess(%type, %var1, %var2, %var3, %var4, %var5, %var6)
|
||||
{
|
||||
//echo(%type SPC %var1 SPC %var2 SPC %var3 SPC %var4 SPC %var5 SPC %var6);
|
||||
|
||||
switch$ (%type)
|
||||
{
|
||||
case "flagCap":
|
||||
%game = %var1;
|
||||
%player = %var2;
|
||||
%flag = %player.holdingFlag;
|
||||
%held = %game.formatTime(getSimTime() - %game.flagHeldTime[%flag], false);
|
||||
%msg = getTaggedString(%player.client.name) SPC "captured the" SPC getTaggedString(%game.getTeamName(%flag.team)) SPC "flag. (Held:" SPC %held @ ")";
|
||||
case "touchEnemyFlag":
|
||||
%game = %var1;
|
||||
%player = %var2;
|
||||
%flag = %var3;
|
||||
if(!%player.flagTossWait)
|
||||
{
|
||||
%grabspeed = mFloor(VectorLen(setWord(%player.getVelocity(), 2, 0)) * 3.6);
|
||||
if(%flag.isHome)
|
||||
%msg = getTaggedString(%player.client.name) SPC "took the" SPC getTaggedString(%game.getTeamName(%flag.team)) SPC "flag. (Speed:" SPC %grabspeed @ "Kph)";
|
||||
else if(!%flag.isHome)
|
||||
%msg = getTaggedString(%player.client.name) SPC "took the" SPC getTaggedString(%game.getTeamName(%flag.team)) SPC "flag in the field. (Speed:" SPC %grabspeed @ "Kph)";
|
||||
}
|
||||
case "droppedFlag":
|
||||
%game = %var1;
|
||||
%player = %var2;
|
||||
%flag = %player.holdingFlag;
|
||||
%held = %game.formatTime(getSimTime() - %game.flagHeldTime[%flag], false);
|
||||
%msg = getTaggedString(%player.client.name) SPC "dropped the" SPC getTaggedString(%game.getTeamName(%flag.team)) SPC "flag. (Held:" SPC %held @ ")";
|
||||
case "flagReturn":
|
||||
%game = %var1;
|
||||
%flag = %var2;
|
||||
%player = %var3;
|
||||
if(%player !$= "")
|
||||
%msg = getTaggedString(%player.client.name) SPC "returned the" SPC getTaggedString(%game.getTeamName(%flag.team)) SPC "flag.";
|
||||
else
|
||||
%msg = "The" SPC getTaggedString(%game.getTeamName(%flag.team)) SPC "flag was returned to base.";
|
||||
case "lakTouchFlag":
|
||||
%game = %var1;
|
||||
%player = %var2;
|
||||
%flag = %var3;
|
||||
if(!%player.client.flagDeny && %player.getState() !$= "Dead" && PlayingPlayers() > 1)
|
||||
%msg = getTaggedString(%player.client.name) SPC "has taken the flag.";
|
||||
case "lakMApoints":
|
||||
%sourceObject = %var1;
|
||||
%points = %var2;
|
||||
if(%points == 1)
|
||||
%s = "s";
|
||||
%hitType = %var3;
|
||||
%weapon = %var4;
|
||||
%distance = %var5;
|
||||
%vel = %var6;
|
||||
if(%points)
|
||||
%msg = getTaggedString(%sourceObject.client.name) SPC "receives" SPC %points @ %s SPC "points! [" @ %hitType SPC %weapon @ "] [Distance:" SPC %distance @ "] [Speed:" SPC %vel @ "]";
|
||||
}
|
||||
|
||||
if(%msg !$= "")
|
||||
{
|
||||
%msg = stripChars(%msg, "\cp\co\c0\c6\c7\c8\c9");
|
||||
sendToDiscord(%msg, 2);
|
||||
}
|
||||
}
|
||||
|
||||
function CTFGame::flagCap(%game, %player)
|
||||
{
|
||||
if(discord.lastState $= "Connected")
|
||||
discordBotProcess("flagCap", %game, %player, %var3, %var4, %var5, %var6);
|
||||
parent::flagCap(%game, %player);
|
||||
}
|
||||
|
||||
function CTFGame::playerTouchEnemyFlag(%game, %player, %flag)
|
||||
{
|
||||
if(discord.lastState $= "Connected")
|
||||
discordBotProcess("touchEnemyFlag", %game, %player, %flag, %var4, %var5, %var6);
|
||||
parent::playerTouchEnemyFlag(%game, %player, %flag);
|
||||
}
|
||||
|
||||
function CTFGame::playerDroppedFlag(%game, %player)
|
||||
{
|
||||
if(discord.lastState $= "Connected")
|
||||
discordBotProcess("droppedFlag", %game, %player, %var3, %var4, %var5, %var6);
|
||||
parent::playerDroppedFlag(%game, %player);
|
||||
}
|
||||
|
||||
function CTFGame::flagReturn(%game, %flag, %player)
|
||||
{
|
||||
parent::flagReturn(%game, %flag, %player);
|
||||
if(discord.lastState $= "Connected")
|
||||
discordBotProcess("flagReturn", %game, %flag, %player, %var4, %var5, %var6);
|
||||
}
|
||||
|
||||
function SCtFGame::flagCap(%game, %player)
|
||||
{
|
||||
if(discord.lastState $= "Connected")
|
||||
discordBotProcess("flagCap", %game, %player, %var3, %var4, %var5, %var6);
|
||||
parent::flagCap(%game, %player);
|
||||
}
|
||||
|
||||
function SCtFGame::playerTouchEnemyFlag(%game, %player, %flag)
|
||||
{
|
||||
if(discord.lastState $= "Connected")
|
||||
discordBotProcess("touchEnemyFlag", %game, %player, %flag, %var4, %var5, %var6);
|
||||
parent::playerTouchEnemyFlag(%game, %player, %flag);
|
||||
}
|
||||
|
||||
function SCtFGame::playerDroppedFlag(%game, %player)
|
||||
{
|
||||
if(discord.lastState $= "Connected")
|
||||
discordBotProcess("droppedFlag", %game, %player, %var3, %var4, %var5, %var6);
|
||||
parent::playerDroppedFlag(%game, %player);
|
||||
}
|
||||
|
||||
function SCtFGame::flagReturn(%game, %flag, %player)
|
||||
{
|
||||
parent::flagReturn(%game, %flag, %player);
|
||||
if(discord.lastState $= "Connected")
|
||||
discordBotProcess("flagReturn", %game, %flag, %player, %var4, %var5, %var6);
|
||||
}
|
||||
|
||||
function LakRabbitGame::playerTouchFlag(%game, %player, %flag)
|
||||
{
|
||||
if(discord.lastState $= "Connected")
|
||||
discordBotProcess("lakTouchFlag", %game, %player, %flag, %var4, %var5, %var6);
|
||||
parent::playerTouchFlag(%game, %player, %flag);
|
||||
}
|
||||
|
||||
// In LakRabbitGame.cs inside lakrabbit override
|
||||
// function Armor::damageObject(%data, %targetObject, %sourceObject, %position, %amount, %damageType, %momVec, %mineSC)
|
||||
// {
|
||||
// Armor::damageObject(%data, %targetObject, %sourceObject, %position, %amount, %damageType, %momVec, %mineSC);
|
||||
// if(discord.lastState $= "Connected")
|
||||
// discordBotProcess("lakMApoints", %sourceObject, %points, %hitType, %weapon, %distance, %vel);
|
||||
// }
|
||||
|
||||
function dtEventLog(%log, %save)
|
||||
{
|
||||
parent::dtEventLog(%log, %save);
|
||||
if(discord.lastState $= "Connected")
|
||||
sendToDiscord(%log, 1);
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
if(!isActivePackage(discordPackage))
|
||||
activatePackage(discordPackage);
|
||||
|
||||
function sendToDiscord(%msg,%channel)
|
||||
{
|
||||
if(isObject(discord) && %msg !$= "")
|
||||
{
|
||||
if(discord.lastState $= "Connected")
|
||||
{
|
||||
switch(%channel)
|
||||
{
|
||||
case 1:
|
||||
discord.send("MSG1" SPC %msg @ "\n");
|
||||
case 2:
|
||||
discord.send("MSG2" SPC %msg @ "\n");
|
||||
case 3:
|
||||
discord.send("MSG3" SPC %msg @ "\n");
|
||||
case 4:
|
||||
discord.send("MSG4" SPC %msg @ "\n");
|
||||
case 5:
|
||||
discord.send("MSG5" SPC %msg @ "\n");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function discordCon(){
|
||||
if(discord.lastState !$= "Connected"){
|
||||
if(isEventPending($discordBot::reconnectEvent))
|
||||
cancel($discordBot::reconnectEvent);
|
||||
if(isObject(discord))
|
||||
discord.delete();
|
||||
new TCPObject(discord);
|
||||
discord.lastState = "Connecting";
|
||||
discord.connect($discordBot::IP[$discordBot::AuthSet]);
|
||||
}
|
||||
}
|
||||
function discordKill(){
|
||||
if(isEventPending($discordBot::reconnectEvent))
|
||||
cancel($discordBot::reconnectEvent);
|
||||
discord.delete();
|
||||
}
|
||||
|
||||
function discord::onDNSFailed(%this){
|
||||
%this.lastState = "DNSFailed";
|
||||
error(%this.lastState);
|
||||
}
|
||||
|
||||
function discord::onConnectFailed(%this){
|
||||
%this.lastState = "ConnectFailed";
|
||||
error(%this.lastState);
|
||||
discord.delete();
|
||||
if(isEventPending($discordBot::reconnectEvent))
|
||||
cancel($discordBot::reconnectEvent);
|
||||
$discordBot::reconnectEvent = schedule($discordBot::reconnectTimeout,0,"discordCon");
|
||||
}
|
||||
|
||||
function discord::onDNSResolved(%this){
|
||||
%this.lastState = "DNSResolved";
|
||||
error(%this.lastState);
|
||||
}
|
||||
|
||||
function discord::onConnected(%this){
|
||||
%this.lastState = "Connected";
|
||||
error(%this.lastState);
|
||||
discord.send("AUTH" SPC $discordBot::AuthKey[$discordBot::AuthSet]);
|
||||
}
|
||||
|
||||
function discord::onDisconnect(%this){
|
||||
%this.lastState = "Disconnected";
|
||||
error(%this.lastState);
|
||||
discord.delete();
|
||||
if(isEventPending($discordBot::reconnectEvent))
|
||||
cancel($discordBot::reconnectEvent);
|
||||
$discordBot::reconnectEvent = schedule($discordBot::reconnectTimeout,0,"discordCon");
|
||||
}
|
||||
|
||||
function discord::onLine(%this, %line){
|
||||
%lineStrip = stripChars(%line,"\r\n");
|
||||
%cmd = getWord(%lineStrip,0);
|
||||
switch$(%cmd){
|
||||
case "Discord":
|
||||
//messageAll( 'MsgDiscord', '\c3Discord: \c4%1 %2',getWord(%lineStrip,1),getWords(%lineStrip,2,getWordCount(%lineStrip) -1));
|
||||
case "PING":
|
||||
discord.send("PONG");
|
||||
default:
|
||||
error("Bad Command");
|
||||
error( %line );
|
||||
}
|
||||
}
|
||||
if(!isObject(discord) && $discordBot::autoStart)
|
||||
discordCon();
|
||||
Loading…
Add table
Add a link
Reference in a new issue