From f6dfaef422a28ede392e8eb653b746a374f935a6 Mon Sep 17 00:00:00 2001 From: JustinAJ Date: Fri, 1 Jan 2016 19:03:41 -0500 Subject: [PATCH] RenX.Core: * Moved player RDNS resolution to RenX.Core * Added RDNS ban (disabled by default until a proper command and mask checking is added) RenX.Logging: * Added players' RDNS to player join logs * Added {RDNS} and {VRDNS} tags RenX.Commands: * Added ban reason and rdns to "bsearch" command output * Added player's RDNS to default adminPlayerInfoFormat. * Added "rdns" search option to bsearch * Fixed a bug in the "ban" IRC command which prevented specifying a ban reason RenX.DNS: * Deleted (obsolete) --- Config.ini | 13 +++-- Jupiter | 2 +- Jupiter Bot.sln | 41 ++++++++++++---- Release/Bot.lib | Bin 24762 -> 24762 bytes Release/Plugins/RenX.Core.lib | Bin 138134 -> 138432 bytes RenX.Commands/RenX_Commands.cpp | 45 +++++++++++------ RenX.Core/RenX_BanDatabase.cpp | 33 +++++++++++-- RenX.Core/RenX_BanDatabase.h | 1 + RenX.Core/RenX_PlayerInfo.h | 1 + RenX.Core/RenX_Server.cpp | 14 +++++- RenX.Core/RenX_Server.h | 9 ++++ RenX.Core/RenX_Tags.cpp | 8 +++ RenX.Core/RenX_Tags.h | 4 ++ RenX.DNS/RenX_DNS.cpp | 78 ------------------------------ RenX.Logging/RenX_Logging.cpp | 4 +- RenX.ModSystem/RenX_ModSystem.cpp | 4 ++ 16 files changed, 144 insertions(+), 113 deletions(-) delete mode 100644 RenX.DNS/RenX_DNS.cpp diff --git a/Config.ini b/Config.ini index 220d905..6f9d19f 100644 --- a/Config.ini +++ b/Config.ini @@ -115,12 +115,20 @@ Channel.2.Type=2 SASL.Password=your_NickServ_Password LogFile=CnCIRC.txt +[CT] +Hostname=irc.ConstructiveTyranny.com +Nick=RenXBot +Channel.1=#RenX-IRC +Channel.1.Type=1 +RawData.1=PRIVMSG NickServ :IDENTIFY your_NickServ_Password +LogFile=CT.txt + [EKT] Hostname=irc.EliteKamikazeTeam.com Nick=RenXBot Channel.1=#RenX-IRC Channel.1.Type=1 -SASL.Password=your_NickServ_Password +RawData.1=PRIVMSG NickServ :IDENTIFY your_NickServ_Password LogFile=EKT.txt [St0rm] @@ -129,9 +137,8 @@ Nick=RenXBot AltNick=RXBot` Channel.1=#RenX-IRC Channel.1.Type=1 -SASL.Password=your_NickServ_Password +RawData.1=PRIVMSG NickServ :IDENTIFY your_NickServ_Password LogFile=St0rm.txt -Prefix=! ; [DefaultCommands] ; You can modify the access requirements for any command here. diff --git a/Jupiter b/Jupiter index 87ca784..5338777 160000 --- a/Jupiter +++ b/Jupiter @@ -1 +1 @@ -Subproject commit 87ca784d1ee5fb9468672ddda8d34b2f6c293433 +Subproject commit 5338777b91ca98bfcd4aea3620a69071d42701f0 diff --git a/Jupiter Bot.sln b/Jupiter Bot.sln index 9877303..32a6ffc 100644 --- a/Jupiter Bot.sln +++ b/Jupiter Bot.sln @@ -103,12 +103,6 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "UserInterface", "UserInterf {C188871B-5F32-4946-B301-24CA2EBB275D} = {C188871B-5F32-4946-B301-24CA2EBB275D} EndProjectSection EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "RenX.DNS", "RenX.DNS\RenX.DNS.vcxproj", "{812E9781-A9CB-43C6-8C40-87908D50B363}" - ProjectSection(ProjectDependencies) = postProject - {C188871B-5F32-4946-B301-24CA2EBB275D} = {C188871B-5F32-4946-B301-24CA2EBB275D} - {9103DF3D-8B4A-48E5-A6B3-CBE2554630E2} = {9103DF3D-8B4A-48E5-A6B3-CBE2554630E2} - EndProjectSection -EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "RenX.Greetings", "RenX.Greetings\RenX.Greetings.vcxproj", "{8709993F-B08A-4156-BD93-581F297FE0A4}" ProjectSection(ProjectDependencies) = postProject {C188871B-5F32-4946-B301-24CA2EBB275D} = {C188871B-5F32-4946-B301-24CA2EBB275D} @@ -168,6 +162,25 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "RenX.MinPlayers", "RenX.Min {9103DF3D-8B4A-48E5-A6B3-CBE2554630E2} = {9103DF3D-8B4A-48E5-A6B3-CBE2554630E2} EndProjectSection EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "RenX.AlwaysRecord", "RenX.AlwaysRecord\RenX.AlwaysRecord.vcxproj", "{C5CDEDF5-BAFB-4D5B-A4DB-4331E13DBD58}" + ProjectSection(ProjectDependencies) = postProject + {C188871B-5F32-4946-B301-24CA2EBB275D} = {C188871B-5F32-4946-B301-24CA2EBB275D} + {9103DF3D-8B4A-48E5-A6B3-CBE2554630E2} = {9103DF3D-8B4A-48E5-A6B3-CBE2554630E2} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "HTTPServer", "HTTPServer\HTTPServer.vcxproj", "{BB048D6F-F001-4E9B-95F4-886081E0807A}" + ProjectSection(ProjectDependencies) = postProject + {C188871B-5F32-4946-B301-24CA2EBB275D} = {C188871B-5F32-4946-B301-24CA2EBB275D} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "RenX.Ladder.Web", "RenX.Ladder.Web\RenX.Ladder.Web.vcxproj", "{57661A2A-EE94-4E9C-B792-AB756533DEFA}" + ProjectSection(ProjectDependencies) = postProject + {C188871B-5F32-4946-B301-24CA2EBB275D} = {C188871B-5F32-4946-B301-24CA2EBB275D} + {9103DF3D-8B4A-48E5-A6B3-CBE2554630E2} = {9103DF3D-8B4A-48E5-A6B3-CBE2554630E2} + {BB048D6F-F001-4E9B-95F4-886081E0807A} = {BB048D6F-F001-4E9B-95F4-886081E0807A} + {B2846BD6-2332-4DA6-A13B-113318F76D5E} = {B2846BD6-2332-4DA6-A13B-113318F76D5E} + EndProjectSection +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 @@ -246,10 +259,6 @@ Global {BE8799E6-A0AC-4F29-AEC5-9EC5886868D7}.Debug|Win32.Build.0 = Debug|Win32 {BE8799E6-A0AC-4F29-AEC5-9EC5886868D7}.Release|Win32.ActiveCfg = Release|Win32 {BE8799E6-A0AC-4F29-AEC5-9EC5886868D7}.Release|Win32.Build.0 = Release|Win32 - {812E9781-A9CB-43C6-8C40-87908D50B363}.Debug|Win32.ActiveCfg = Debug|Win32 - {812E9781-A9CB-43C6-8C40-87908D50B363}.Debug|Win32.Build.0 = Debug|Win32 - {812E9781-A9CB-43C6-8C40-87908D50B363}.Release|Win32.ActiveCfg = Release|Win32 - {812E9781-A9CB-43C6-8C40-87908D50B363}.Release|Win32.Build.0 = Release|Win32 {8709993F-B08A-4156-BD93-581F297FE0A4}.Debug|Win32.ActiveCfg = Debug|Win32 {8709993F-B08A-4156-BD93-581F297FE0A4}.Debug|Win32.Build.0 = Debug|Win32 {8709993F-B08A-4156-BD93-581F297FE0A4}.Release|Win32.ActiveCfg = Release|Win32 @@ -290,6 +299,18 @@ Global {99D34DCB-A484-437C-9FC5-D4051FEDC18C}.Debug|Win32.Build.0 = Debug|Win32 {99D34DCB-A484-437C-9FC5-D4051FEDC18C}.Release|Win32.ActiveCfg = Release|Win32 {99D34DCB-A484-437C-9FC5-D4051FEDC18C}.Release|Win32.Build.0 = Release|Win32 + {C5CDEDF5-BAFB-4D5B-A4DB-4331E13DBD58}.Debug|Win32.ActiveCfg = Debug|Win32 + {C5CDEDF5-BAFB-4D5B-A4DB-4331E13DBD58}.Debug|Win32.Build.0 = Debug|Win32 + {C5CDEDF5-BAFB-4D5B-A4DB-4331E13DBD58}.Release|Win32.ActiveCfg = Release|Win32 + {C5CDEDF5-BAFB-4D5B-A4DB-4331E13DBD58}.Release|Win32.Build.0 = Release|Win32 + {BB048D6F-F001-4E9B-95F4-886081E0807A}.Debug|Win32.ActiveCfg = Debug|Win32 + {BB048D6F-F001-4E9B-95F4-886081E0807A}.Debug|Win32.Build.0 = Debug|Win32 + {BB048D6F-F001-4E9B-95F4-886081E0807A}.Release|Win32.ActiveCfg = Release|Win32 + {BB048D6F-F001-4E9B-95F4-886081E0807A}.Release|Win32.Build.0 = Release|Win32 + {57661A2A-EE94-4E9C-B792-AB756533DEFA}.Debug|Win32.ActiveCfg = Debug|Win32 + {57661A2A-EE94-4E9C-B792-AB756533DEFA}.Debug|Win32.Build.0 = Debug|Win32 + {57661A2A-EE94-4E9C-B792-AB756533DEFA}.Release|Win32.ActiveCfg = Release|Win32 + {57661A2A-EE94-4E9C-B792-AB756533DEFA}.Release|Win32.Build.0 = Release|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/Release/Bot.lib b/Release/Bot.lib index 985683968b6e9739f1916d2d9cc86d71421000e8..ca176ee0f2898592be1d1a8e0c4c5d8d02d3c755 100644 GIT binary patch delta 2057 zcmZ`(OH31C5N-t&fk}(r%Z}ZK3GxN>-vt3qim(@?tHVzM7 zvzjeK7Ff&)Z>>p#Y$%1>w>Av7sl~6?4OuKk{0dDWb)D*{>A_ag@?A~h{Cdb(HFX>* zTGds^lMzJLM>-UU0DCqakAWXH40bv^q*-Kv8FdymrVnFqZ(nO6gP>0#B~SX;rW1ABPsun~%| z0DmQ*%{e0jn)qe0taWEXHo8)1yyS|>Msq@d{S94T4X>f zT^y~6DXV4q4v+UUVHGPUK&9G-F_Mo*?~h@=J7eQYS_X);1B|wf(Y`VELYI%w8iN81 zq%peaBO@uXS$*{(aO6wMw7l`kbXUgdbP4cF3Fsj*fsHRrC>qBJf1dEm{EIm>M*YNC z@}u#SpCr@-&}a|bq~QX52;iFbv#z`Nnx57e;ZJ}}<qea4;)}(vcnnt0cCCP>WcI zlts1Q4OMAB9L9)XI81VcrACxS0jv@9jz*%?TYz^Forb?mD{H2YHRGI{pNCj_81Bb) zvZpzUyxHi2Y}5n<*o-6Z?E){u9Ng@xO-cFMAz>kb+8dZoh!Xc)@``#c^fvgbkX-;}~-=+yI zk8YhsX_jY-qzD3BnEem1LxIW(yp^gwf#SQ)v+71zbuHRiSc(%Zd3BF(U<+a9WMfWm zFZyZ+Ne_TKO%Fg?+SD{z$jal4WymWqC)!~-4x~Z)N!q1=kQUR$R7EJ#D`ZrrS delta 2057 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 Ac>n+a delta 14565 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 D2getLongLong(RenX_CommandsPlugin::getName(), STRING_LITERAL_AS_REFERENCE("TBanTime"), 86400); RenX_CommandsPlugin::playerInfoFormat = Jupiter::IRC::Client::Config->get(RenX_CommandsPlugin::getName(), STRING_LITERAL_AS_REFERENCE("PlayerInfoFormat"), STRING_LITERAL_AS_REFERENCE(IRCCOLOR "03[Player Info]" IRCCOLOR "{TCOLOR} Name: " IRCBOLD "{RNAME}" IRCBOLD " - ID: {ID} - Team: " IRCBOLD "{TEAML}" IRCBOLD " - Vehicle Kills: {VEHICLEKILLS} - Building Kills {BUILDINGKILLS} - Kills {KILLS} - Deaths: {DEATHS} - KDR: {KDR} - Access: {ACCESS}")); - RenX_CommandsPlugin::adminPlayerInfoFormat = Jupiter::IRC::Client::Config->get(RenX_CommandsPlugin::getName(), STRING_LITERAL_AS_REFERENCE("AdminPlayerInfoFormat"), Jupiter::StringS::Format("%.*s - IP: " IRCBOLD "{IP}" IRCBOLD " - Steam ID: " IRCBOLD "{STEAM}", RenX_CommandsPlugin::playerInfoFormat.size(), RenX_CommandsPlugin::playerInfoFormat.ptr())); + RenX_CommandsPlugin::adminPlayerInfoFormat = Jupiter::IRC::Client::Config->get(RenX_CommandsPlugin::getName(), STRING_LITERAL_AS_REFERENCE("AdminPlayerInfoFormat"), Jupiter::StringS::Format("%.*s - IP: " IRCBOLD "{IP}" IRCBOLD " - RDNS: " IRCBOLD "{RDNS}" IRCBOLD " - Steam ID: " IRCBOLD "{STEAM}", RenX_CommandsPlugin::playerInfoFormat.size(), RenX_CommandsPlugin::playerInfoFormat.ptr())); RenX_CommandsPlugin::buildingInfoFormat = Jupiter::IRC::Client::Config->get(RenX_CommandsPlugin::getName(), STRING_LITERAL_AS_REFERENCE("BuildingInfoFormat"), STRING_LITERAL_AS_REFERENCE(IRCCOLOR) + RenX::tags->buildingTeamColorTag + RenX::tags->buildingNameTag + STRING_LITERAL_AS_REFERENCE(IRCCOLOR " - " IRCCOLOR "07") + RenX::tags->buildingHealthPercentageTag + STRING_LITERAL_AS_REFERENCE("%")); RenX::sanitizeTags(RenX_CommandsPlugin::playerInfoFormat); @@ -1118,18 +1118,20 @@ void BanSearchIRCCommand::trigger(IRC_Bot *source, const Jupiter::ReadableString return isMatch(1) || isMatch(2) || isMatch(3) || isMatch(4); case 1: // IP return entry->ip == params.asUnsignedInt(); - case 2: // STEAM + case 2: // RDNS + return entry->rdns.equals(params); + case 3: // STEAM return entry->steamid == params.asUnsignedLongLong(); - case 3: // NAME + case 4: // NAME return entry->name.equalsi(params); - case 4: // BANNER + case 5: // BANNER return entry->varData.get(pluginInstance.getName()).equalsi(params); - case 5: // ACTIVE + case 6: // ACTIVE if (params.asBool()) // Got tired of seeing a compiler warning. return entry->active == 1; else return entry->active == 0; - case 6: // ALL + case 7: // ALL return true; } }; @@ -1138,18 +1140,20 @@ void BanSearchIRCCommand::trigger(IRC_Bot *source, const Jupiter::ReadableString Jupiter::ReferenceString type_str = Jupiter::ReferenceString::getWord(parameters, 0, WHITESPACE); if (type_str.equalsi(STRING_LITERAL_AS_REFERENCE("ip"))) type = 1; - else if (type_str.equalsi(STRING_LITERAL_AS_REFERENCE("steam"))) + else if (type_str.equalsi(STRING_LITERAL_AS_REFERENCE("rdns"))) type = 2; - else if (type_str.equalsi(STRING_LITERAL_AS_REFERENCE("name"))) + else if (type_str.equalsi(STRING_LITERAL_AS_REFERENCE("steam"))) type = 3; - else if (type_str.equalsi(STRING_LITERAL_AS_REFERENCE("banner"))) + else if (type_str.equalsi(STRING_LITERAL_AS_REFERENCE("name"))) type = 4; - else if (type_str.equalsi(STRING_LITERAL_AS_REFERENCE("active"))) + else if (type_str.equalsi(STRING_LITERAL_AS_REFERENCE("banner"))) type = 5; + else if (type_str.equalsi(STRING_LITERAL_AS_REFERENCE("active"))) + type = 6; else if (type_str.equalsi(STRING_LITERAL_AS_REFERENCE("any"))) type = 0; else if (type_str.equalsi(STRING_LITERAL_AS_REFERENCE("all")) || type_str.equals('*')) - type = 6; + type = 7; else { type = 0; @@ -1168,6 +1172,16 @@ void BanSearchIRCCommand::trigger(IRC_Bot *source, const Jupiter::ReadableString strftime(timeStr, sizeof(timeStr), "%b %d %Y; Time: %H:%M:%S", localtime(&(entry->timestamp))); out.format("ID: %lu; Status: %sactive; Date: %s; IP: %.*s; Steam: %llu; Name: %.*s%s", i, entry->active ? "" : "in", timeStr, ip_str.size(), ip_str.ptr(), entry->steamid, entry->name.size(), entry->name.ptr(), banner.isEmpty() ? "" : "; Banner: "); out.concat(banner); + if (entry->rdns.isNotEmpty()) + { + out.concat("; RDNS: "_jrs); + out.concat(entry->rdns); + } + if (entry->reason.isNotEmpty()) + { + out.concat("; Reason: "_jrs); + out.concat(entry->reason); + } source->sendNotice(nick, out); } } @@ -1181,7 +1195,7 @@ void BanSearchIRCCommand::trigger(IRC_Bot *source, const Jupiter::ReadableString const Jupiter::ReadableString &BanSearchIRCCommand::getHelp(const Jupiter::ReadableString &) { - static STRING_LITERAL_AS_NAMED_REFERENCE(defaultHelp, "Searches the ban database for an entry. Syntax: bsearch [ip/steam/name/banner/active/any/all = any] "); + static STRING_LITERAL_AS_NAMED_REFERENCE(defaultHelp, "Searches the ban database for an entry. Syntax: bsearch [ip/rdns/steam/name/banner/active/any/all = any] "); return defaultHelp; } @@ -1872,7 +1886,7 @@ void KickBanIRCCommand::trigger(IRC_Bot *source, const Jupiter::ReadableString & server = servers.get(i); if (server != nullptr) { - player = server->getPlayerByPartName(parameters); + player = server->getPlayerByPartName(name); if (player != nullptr) { player->varData.set(pluginInstance.getName(), STRING_LITERAL_AS_REFERENCE("banner"), nick); @@ -1881,7 +1895,10 @@ void KickBanIRCCommand::trigger(IRC_Bot *source, const Jupiter::ReadableString & } } } - source->sendMessage(channel, Jupiter::StringS::Format("%u players kicked.", kicks)); + if (kicks == 0) + source->sendMessage(channel, "Player \""_jrs + name + "\" not found."_jrs); + else + source->sendMessage(channel, Jupiter::StringS::Format("%u players kicked.", kicks)); } else source->sendMessage(channel, STRING_LITERAL_AS_REFERENCE("Error: Channel not attached to any connected Renegade X servers.")); } diff --git a/RenX.Core/RenX_BanDatabase.cpp b/RenX.Core/RenX_BanDatabase.cpp index 51634b4..aec8fdc 100644 --- a/RenX.Core/RenX_BanDatabase.cpp +++ b/RenX.Core/RenX_BanDatabase.cpp @@ -31,7 +31,7 @@ RenX::BanDatabase *RenX::banDatabase = &_banDatabase; RenX::BanDatabase &RenX::defaultBanDatabase = _banDatabase; const Jupiter::ReferenceString DEFAULT_REASON = "(No reason information provided)"; -const uint8_t write_version = 1; +const uint8_t write_version = 2U; bool RenX::BanDatabase::load(const Jupiter::ReadableString &fname) { @@ -43,11 +43,12 @@ bool RenX::BanDatabase::load(const Jupiter::ReadableString &fname) while (!feof(file)) if (fgetc(file) == '\n') break; + Jupiter::String rdns(128); Jupiter::String playerName(16); Jupiter::String key(32); Jupiter::String value(32); Jupiter::String reason(128); - if (RenX::BanDatabase::version < 1) + if (RenX::BanDatabase::version == 0) reason = DEFAULT_REASON; Entry *entry; int c; @@ -66,6 +67,24 @@ bool RenX::BanDatabase::load(const Jupiter::ReadableString &fname) break; } + // load rdns + if (RenX::BanDatabase::version >= 2) + { + rdns.truncate(rdns.size()); + c = fgetc(file); + while (c != '\n' && c != '\0') + { + if (c == EOF) + { + fprintf(stderr, "ERROR: Unexpected EOF in %s at %lu", RenX::BanDatabase::filename.c_str(), ftell(file)); + break; + } + rdns += c; + c = fgetc(file); + } + entry->rdns = rdns; + } + // load name playerName.truncate(playerName.size()); c = fgetc(file); @@ -147,10 +166,10 @@ bool RenX::BanDatabase::load(const Jupiter::ReadableString &fname) while (index != RenX::BanDatabase::entries.size()) RenX::BanDatabase::write(RenX::BanDatabase::entries.get(++index), file); fclose(file); - fprintf(stdout, "Updated BanDatabase file \"%s\" from version %d to %d.", RenX::BanDatabase::filename.c_str(), RenX::BanDatabase::version, write_version); + fprintf(stdout, "Updated BanDatabase file \"%s\" from version %d to %d." ENDL, RenX::BanDatabase::filename.c_str(), RenX::BanDatabase::version, write_version); } else - fprintf(stdout, "CRITICAL ERROR: BanDatabase file \"%s\" failed to update from version %d to %d.", RenX::BanDatabase::filename.c_str(), RenX::BanDatabase::version, write_version); + fprintf(stdout, "CRITICAL ERROR: BanDatabase file \"%s\" failed to update from version %d to %d." ENDL, RenX::BanDatabase::filename.c_str(), RenX::BanDatabase::version, write_version); RenX::BanDatabase::version = write_version; } return true; @@ -190,7 +209,11 @@ void RenX::BanDatabase::write(RenX::BanDatabase::Entry *entry, FILE *file) fwrite(&entry->length, sizeof(time_t), 1, file); fwrite(&entry->steamid, sizeof(uint64_t), 1, file); fwrite(&entry->ip, sizeof(uint32_t), 1, file); + fwrite(entry->rdns.ptr(), sizeof(char), entry->rdns.size(), file); + fputc('\0', file); fwrite(entry->name.ptr(), sizeof(char), entry->name.size(), file); + fputc('\0', file); + fwrite(entry->reason.ptr(), sizeof(char), entry->reason.size(), file); for (size_t index = 0; index != entry->varData.size(); ++index) { @@ -212,7 +235,9 @@ void RenX::BanDatabase::add(RenX::Server *server, const RenX::PlayerInfo *player entry->length = length; entry->steamid = player->steamid; entry->ip = player->ip32; + entry->rdns = player->rdns; entry->name = player->name; + entry->reason = reason; // add plugin data Jupiter::String pluginData; diff --git a/RenX.Core/RenX_BanDatabase.h b/RenX.Core/RenX_BanDatabase.h index 4a30dbb..49057de 100644 --- a/RenX.Core/RenX_BanDatabase.h +++ b/RenX.Core/RenX_BanDatabase.h @@ -53,6 +53,7 @@ namespace RenX time_t length /** Duration of the ban; 0 if permanent */; uint64_t steamid /** SteamID of the banned player */; uint32_t ip /** IPv4 address of the banned player */; + Jupiter::StringS rdns /** RDNS of the banned player */; Jupiter::StringS name /** Name of the banned player */; Jupiter::StringS reason /** Reason the player was banned */; Jupiter::INIFile::Section varData; /** Variable entry data */ diff --git a/RenX.Core/RenX_PlayerInfo.h b/RenX.Core/RenX_PlayerInfo.h index 40159e4..5b4bbf1 100644 --- a/RenX.Core/RenX_PlayerInfo.h +++ b/RenX.Core/RenX_PlayerInfo.h @@ -46,6 +46,7 @@ namespace RenX // TODO: Add backpack Jupiter::StringS name; Jupiter::StringS ip; + Jupiter::StringS rdns; Jupiter::StringS adminType; Jupiter::StringS uuid; Jupiter::StringS character; diff --git a/RenX.Core/RenX_Server.cpp b/RenX.Core/RenX_Server.cpp index 10456fb..3dbf77b 100644 --- a/RenX.Core/RenX_Server.cpp +++ b/RenX.Core/RenX_Server.cpp @@ -780,6 +780,11 @@ bool RenX::Server::setUUIDIfDifferent(RenX::PlayerInfo *player, const Jupiter::R return true; } +bool RenX::Server::resolvesRDNS() +{ + return RenX::Server::resolve_player_rdns; +} + void RenX::Server::sendPubChan(const char *fmt, ...) const { va_list args; @@ -1026,6 +1031,7 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) banDatabase->deactivate(i); else if ((this->localSteamBan && entry->steamid != 0 && entry->steamid == player->steamid) || (this->localIPBan && entry->ip != 0 && entry->ip == player->ip32) + || (this->localRDNSBan && entry->rdns.isNotEmpty() && entry->rdns.equals(player->rdns)) || (this->localNameBan && entry->name.isNotEmpty() && entry->name.equalsi(player->name))) { char timeStr[256]; @@ -1055,6 +1061,8 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) r->team = team; r->ip = ip; r->ip32 = Jupiter::Socket::pton4(Jupiter::CStringS(r->ip).c_str()); + if (this->resolvesRDNS() && r->ip32 != 0) + r->rdns = Jupiter::Socket::resolveHostname(Jupiter::CStringS(r->ip).c_str(), 0); r->steamid = steamid; if (r->isBot = isBot) r->formatNamePrefix = IRCCOLOR "05[B]"; @@ -1063,6 +1071,7 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) this->players.add(r); r->uuid = calc_uuid(r); + banCheck(r); for (size_t i = 0; i < xPlugins.size(); i++) xPlugins.get(i)->RenX_OnPlayerCreate(this, r); @@ -1075,6 +1084,7 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) { r->ip = ip; r->ip32 = Jupiter::Socket::pton4(Jupiter::CStringS(r->ip).c_str()); + r->rdns = Jupiter::Socket::resolveHostname(Jupiter::CStringS(r->ip).c_str(), 0); recalcUUID = true; } if (r->steamid == 0U && steamid != 0U) @@ -2644,10 +2654,12 @@ void RenX::Server::init() RenX::Server::rconBan = Jupiter::IRC::Client::Config->getBool(RenX::Server::configSection, "RCONBan"_jrs, false); RenX::Server::localSteamBan = Jupiter::IRC::Client::Config->getBool(RenX::Server::configSection, "LocalSteamBan"_jrs, true); RenX::Server::localIPBan = Jupiter::IRC::Client::Config->getBool(RenX::Server::configSection, "LocalIPBan"_jrs, true); + RenX::Server::localRDNSBan = Jupiter::IRC::Client::Config->getBool(RenX::Server::configSection, "LocalRDNSBan"_jrs, false); RenX::Server::localNameBan = Jupiter::IRC::Client::Config->getBool(RenX::Server::configSection, "LocalNameBan"_jrs, false); - RenX::Server::localBan = RenX::Server::localIPBan || RenX::Server::localSteamBan || RenX::Server::localNameBan; + RenX::Server::localBan = RenX::Server::localIPBan || RenX::Server::localRDNSBan || RenX::Server::localSteamBan || RenX::Server::localNameBan; RenX::Server::steamFormat = Jupiter::IRC::Client::Config->getInt(RenX::Server::configSection, "SteamFormat"_jrs, 16); RenX::Server::neverSay = Jupiter::IRC::Client::Config->getBool(RenX::Server::configSection, "NeverSay"_jrs, false); + RenX::Server::resolve_player_rdns = Jupiter::IRC::Client::Config->getBool(RenX::Server::configSection, "ResolvePlayerRDNS"_jrs, true); RenX::Server::clientUpdateRate = std::chrono::milliseconds(Jupiter::IRC::Client::Config->getInt(RenX::Server::configSection, "ClientUpdateRate"_jrs, 2500)); RenX::Server::buildingUpdateRate = std::chrono::milliseconds(Jupiter::IRC::Client::Config->getInt(RenX::Server::configSection, "BuildingUpdateRate"_jrs, 7500)); RenX::Server::pingRate = std::chrono::milliseconds(Jupiter::IRC::Client::Config->getInt(RenX::Server::configSection, "PingUpdateRate"_jrs, 60000)); diff --git a/RenX.Core/RenX_Server.h b/RenX.Core/RenX_Server.h index 2b01451..0991e5d 100644 --- a/RenX.Core/RenX_Server.h +++ b/RenX.Core/RenX_Server.h @@ -766,6 +766,13 @@ namespace RenX */ bool setUUIDIfDifferent(RenX::PlayerInfo *player, const Jupiter::ReadableString &uuid); + /** + * @brief Checks if reverse DNS resolution is occuring for players. + * + * @return True if this bot resolves RDNS, false otherwise. + */ + bool resolvesRDNS(); + /** * @brief Formats and sends a message to a server's corresponding public channels. * @@ -917,8 +924,10 @@ namespace RenX bool localBan; bool localSteamBan; bool localIPBan; + bool localRDNSBan; bool localNameBan; bool neverSay; + bool resolve_player_rdns; unsigned short port; int logChanType; int adminLogChanType; diff --git a/RenX.Core/RenX_Tags.cpp b/RenX.Core/RenX_Tags.cpp index 163b58e..e6c4c7e 100644 --- a/RenX.Core/RenX_Tags.cpp +++ b/RenX.Core/RenX_Tags.cpp @@ -86,6 +86,7 @@ TagsImp::TagsImp() this->INTERNAL_NAME_TAG = this->getUniqueInternalTag(); this->INTERNAL_RAW_NAME_TAG = this->getUniqueInternalTag(); this->INTERNAL_IP_TAG = this->getUniqueInternalTag(); + this->INTERNAL_RDNS_TAG = this->getUniqueInternalTag(); this->INTERNAL_STEAM_TAG = this->getUniqueInternalTag(); this->INTERNAL_UUID_TAG = this->getUniqueInternalTag(); this->INTERNAL_ID_TAG = this->getUniqueInternalTag(); @@ -121,6 +122,7 @@ TagsImp::TagsImp() this->INTERNAL_VICTIM_NAME_TAG = this->getUniqueInternalTag(); this->INTERNAL_VICTIM_RAW_NAME_TAG = this->getUniqueInternalTag(); this->INTERNAL_VICTIM_IP_TAG = this->getUniqueInternalTag(); + this->INTERNAL_VICTIM_RDNS_TAG = this->getUniqueInternalTag(); this->INTERNAL_VICTIM_STEAM_TAG = this->getUniqueInternalTag(); this->INTERNAL_VICTIM_UUID_TAG = this->getUniqueInternalTag(); this->INTERNAL_VICTIM_ID_TAG = this->getUniqueInternalTag(); @@ -194,6 +196,7 @@ TagsImp::TagsImp() this->nameTag = Jupiter::IRC::Client::Config->get(configSection, STRING_LITERAL_AS_REFERENCE("NameTag"), STRING_LITERAL_AS_REFERENCE("{NAME}")); this->rawNameTag = Jupiter::IRC::Client::Config->get(configSection, STRING_LITERAL_AS_REFERENCE("RawNameTag"), STRING_LITERAL_AS_REFERENCE("{RNAME}")); this->ipTag = Jupiter::IRC::Client::Config->get(configSection, STRING_LITERAL_AS_REFERENCE("IPTag"), STRING_LITERAL_AS_REFERENCE("{IP}")); + this->rdnsTag = Jupiter::IRC::Client::Config->get(configSection, STRING_LITERAL_AS_REFERENCE("RDNSTag"), STRING_LITERAL_AS_REFERENCE("{RDNS}")); this->steamTag = Jupiter::IRC::Client::Config->get(configSection, STRING_LITERAL_AS_REFERENCE("SteamTag"), STRING_LITERAL_AS_REFERENCE("{STEAM}")); this->uuidTag = Jupiter::IRC::Client::Config->get(configSection, STRING_LITERAL_AS_REFERENCE("UUIDTag"), STRING_LITERAL_AS_REFERENCE("{UUID}")); this->idTag = Jupiter::IRC::Client::Config->get(configSection, STRING_LITERAL_AS_REFERENCE("IDTag"), STRING_LITERAL_AS_REFERENCE("{ID}")); @@ -229,6 +232,7 @@ TagsImp::TagsImp() this->victimNameTag = Jupiter::IRC::Client::Config->get(configSection, STRING_LITERAL_AS_REFERENCE("VictimNameTag"), STRING_LITERAL_AS_REFERENCE("{VNAME}")); this->victimRawNameTag = Jupiter::IRC::Client::Config->get(configSection, STRING_LITERAL_AS_REFERENCE("VictimRawNameTag"), STRING_LITERAL_AS_REFERENCE("{VRNAME}")); this->victimIPTag = Jupiter::IRC::Client::Config->get(configSection, STRING_LITERAL_AS_REFERENCE("VictimIPTag"), STRING_LITERAL_AS_REFERENCE("{VIP}")); + this->victimRDNSTag = Jupiter::IRC::Client::Config->get(configSection, STRING_LITERAL_AS_REFERENCE("VictimRDNSTag"), STRING_LITERAL_AS_REFERENCE("{VRDNS}")); this->victimSteamTag = Jupiter::IRC::Client::Config->get(configSection, STRING_LITERAL_AS_REFERENCE("VictimSteamTag"), STRING_LITERAL_AS_REFERENCE("{VSTEAM}")); this->victimUUIDTag = Jupiter::IRC::Client::Config->get(configSection, STRING_LITERAL_AS_REFERENCE("VictimUUIDTag"), STRING_LITERAL_AS_REFERENCE("{VUUID}")); this->victimIDTag = Jupiter::IRC::Client::Config->get(configSection, STRING_LITERAL_AS_REFERENCE("VictimIDTag"), STRING_LITERAL_AS_REFERENCE("{VID}")); @@ -352,6 +356,7 @@ void TagsImp::processTags(Jupiter::StringType &msg, const RenX::Server *server, PROCESS_TAG(this->INTERNAL_NAME_TAG, RenX::getFormattedPlayerName(player)); PROCESS_TAG(this->INTERNAL_RAW_NAME_TAG, player->name); PROCESS_TAG(this->INTERNAL_IP_TAG, player->ip); + PROCESS_TAG(this->INTERNAL_RDNS_TAG, player->rdns); PROCESS_TAG(this->INTERNAL_UUID_TAG, player->uuid); PROCESS_TAG(this->INTERNAL_ID_TAG, Jupiter::StringS::Format("%d", player->id)); PROCESS_TAG(this->INTERNAL_CHARACTER_TAG, RenX::translateName(player->character)); @@ -387,6 +392,7 @@ void TagsImp::processTags(Jupiter::StringType &msg, const RenX::Server *server, PROCESS_TAG(this->INTERNAL_VICTIM_NAME_TAG, RenX::getFormattedPlayerName(victim)); PROCESS_TAG(this->INTERNAL_VICTIM_RAW_NAME_TAG, victim->name); PROCESS_TAG(this->INTERNAL_VICTIM_IP_TAG, victim->ip); + PROCESS_TAG(this->INTERNAL_VICTIM_RDNS_TAG, victim->rdns); PROCESS_TAG(this->INTERNAL_VICTIM_UUID_TAG, victim->uuid); PROCESS_TAG(this->INTERNAL_VICTIM_ID_TAG, Jupiter::StringS::Format("%d", victim->id)); PROCESS_TAG(this->INTERNAL_VICTIM_CHARACTER_TAG, RenX::translateName(victim->character)); @@ -458,6 +464,7 @@ void TagsImp::sanitizeTags(Jupiter::StringType &fmt) fmt.replace(this->nameTag, this->INTERNAL_NAME_TAG); fmt.replace(this->rawNameTag, this->INTERNAL_RAW_NAME_TAG); fmt.replace(this->ipTag, this->INTERNAL_IP_TAG); + fmt.replace(this->rdnsTag, this->INTERNAL_RDNS_TAG); fmt.replace(this->steamTag, this->INTERNAL_STEAM_TAG); fmt.replace(this->uuidTag, this->INTERNAL_UUID_TAG); fmt.replace(this->idTag, this->INTERNAL_ID_TAG); @@ -493,6 +500,7 @@ void TagsImp::sanitizeTags(Jupiter::StringType &fmt) fmt.replace(this->victimNameTag, this->INTERNAL_VICTIM_NAME_TAG); fmt.replace(this->victimRawNameTag, this->INTERNAL_VICTIM_RAW_NAME_TAG); fmt.replace(this->victimIPTag, this->INTERNAL_VICTIM_IP_TAG); + fmt.replace(this->victimRDNSTag, this->INTERNAL_VICTIM_RDNS_TAG); fmt.replace(this->victimSteamTag, this->INTERNAL_VICTIM_STEAM_TAG); fmt.replace(this->victimUUIDTag, this->INTERNAL_VICTIM_UUID_TAG); fmt.replace(this->victimIDTag, this->INTERNAL_VICTIM_ID_TAG); diff --git a/RenX.Core/RenX_Tags.h b/RenX.Core/RenX_Tags.h index 5ca6ff8..9c56377 100644 --- a/RenX.Core/RenX_Tags.h +++ b/RenX.Core/RenX_Tags.h @@ -71,6 +71,7 @@ namespace RenX Jupiter::StringS INTERNAL_NAME_TAG; Jupiter::StringS INTERNAL_RAW_NAME_TAG; Jupiter::StringS INTERNAL_IP_TAG; + Jupiter::StringS INTERNAL_RDNS_TAG; Jupiter::StringS INTERNAL_STEAM_TAG; Jupiter::StringS INTERNAL_UUID_TAG; Jupiter::StringS INTERNAL_ID_TAG; @@ -106,6 +107,7 @@ namespace RenX Jupiter::StringS INTERNAL_VICTIM_NAME_TAG; Jupiter::StringS INTERNAL_VICTIM_RAW_NAME_TAG; Jupiter::StringS INTERNAL_VICTIM_IP_TAG; + Jupiter::StringS INTERNAL_VICTIM_RDNS_TAG; Jupiter::StringS INTERNAL_VICTIM_STEAM_TAG; Jupiter::StringS INTERNAL_VICTIM_UUID_TAG; Jupiter::StringS INTERNAL_VICTIM_ID_TAG; @@ -179,6 +181,7 @@ namespace RenX Jupiter::StringS nameTag; Jupiter::StringS rawNameTag; Jupiter::StringS ipTag; + Jupiter::StringS rdnsTag; Jupiter::StringS steamTag; Jupiter::StringS uuidTag; Jupiter::StringS idTag; @@ -214,6 +217,7 @@ namespace RenX Jupiter::StringS victimNameTag; Jupiter::StringS victimRawNameTag; Jupiter::StringS victimIPTag; + Jupiter::StringS victimRDNSTag; Jupiter::StringS victimSteamTag; Jupiter::StringS victimUUIDTag; Jupiter::StringS victimIDTag; diff --git a/RenX.DNS/RenX_DNS.cpp b/RenX.DNS/RenX_DNS.cpp deleted file mode 100644 index d25fbd0..0000000 --- a/RenX.DNS/RenX_DNS.cpp +++ /dev/null @@ -1,78 +0,0 @@ -/** - * Copyright (C) 2014-2015 Jessica James. - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - * - * Written by Jessica James - */ - -#include -#include "Jupiter/Socket.h" -#include "Jupiter/CString.h" -#include "Jupiter/IRC_Client.h" -#include "RenX_PlayerInfo.h" -#include "RenX_Server.h" -#include "RenX_Functions.h" -#include "RenX_DNS.h" - -typedef void(RenX::Server::*logFuncType)(const char *fmt, ...) const; - -void RenX_DNSPlugin::RenX_OnPlayerCreate(RenX::Server *server, const RenX::PlayerInfo *player) -{ - if (player->isBot == false) - { - Jupiter::ReferenceString host = Jupiter::ReferenceString(Jupiter::Socket::resolveHostname(Jupiter::CStringS(player->ip).c_str(), 0)); - player->varData.set(RenX_DNSPlugin::name, STRING_LITERAL_AS_REFERENCE("Host"), host); - } -} - -void RenX_DNSPlugin::RenX_OnJoin(RenX::Server *server, const RenX::PlayerInfo *player) -{ - if (player->isBot == false) - { - logFuncType func; - if (RenX_DNSPlugin::resolveAdmin) - { - if (RenX_DNSPlugin::resolvePublic) - func = &RenX::Server::sendLogChan; - else func = &RenX::Server::sendAdmChan; - } - else if (RenX_DNSPlugin::resolvePublic) - func = &RenX::Server::sendPubChan; - else return; - - const Jupiter::ReadableString &host = player->varData.get(RenX_DNSPlugin::name, STRING_LITERAL_AS_REFERENCE("Host"), Jupiter::ReferenceString::empty); - Jupiter::ReadableString &name = RenX::getFormattedPlayerName(player); - (server->*func)(IRCCOLOR "03[DNS] " IRCBOLD "%.*s" IRCBOLD IRCCOLOR "'s hostname resolved to: " IRCBOLD IRCCOLOR "10%.*s" IRCBOLD, name.size(), name.ptr(), host.size(), host.ptr()); - } -} - -int RenX_DNSPlugin::OnRehash() -{ - RenX_DNSPlugin::resolveAdmin = Jupiter::IRC::Client::Config->getBool(RenX_DNSPlugin::name, STRING_LITERAL_AS_REFERENCE("ResolveAdmin"), true); - RenX_DNSPlugin::resolvePublic = Jupiter::IRC::Client::Config->getBool(RenX_DNSPlugin::name, STRING_LITERAL_AS_REFERENCE("ResolvePublic"), false); - return 0; -} - -RenX_DNSPlugin::RenX_DNSPlugin() -{ - RenX_DNSPlugin::OnRehash(); -} - -// Plugin instantiation and entry point. -RenX_DNSPlugin pluginInstance; - -extern "C" __declspec(dllexport) Jupiter::Plugin *getPlugin() -{ - return &pluginInstance; -} diff --git a/RenX.Logging/RenX_Logging.cpp b/RenX.Logging/RenX_Logging.cpp index 9771968..54435fe 100644 --- a/RenX.Logging/RenX_Logging.cpp +++ b/RenX.Logging/RenX_Logging.cpp @@ -107,10 +107,10 @@ void RenX_LoggingPlugin::init() Jupiter::StringS::Format(IRCCOLOR "12[Join] " IRCBOLD "%.*s" IRCBOLD " joined the game fighting for the %.*s!", RenX::tags->nameTag.size(), RenX::tags->nameTag.ptr(), RenX::tags->teamLongTag.size(), RenX::tags->teamLongTag.ptr())); RenX_LoggingPlugin::joinAdminFmt = Jupiter::IRC::Client::Config->get(this->getName(), STRING_LITERAL_AS_REFERENCE("JoinAdminFormat"), - Jupiter::StringS::Format(IRCCOLOR "12[Join] " IRCBOLD "%.*s" IRCBOLD " joined the game fighting for the %.*s from " IRCBOLD "%.*s" IRCBOLD " using Steam ID " IRCBOLD "%.*s" IRCBOLD ".", RenX::tags->nameTag.size(), RenX::tags->nameTag.ptr(), RenX::tags->teamLongTag.size(), RenX::tags->teamLongTag.ptr(), RenX::tags->ipTag.size(), RenX::tags->ipTag.ptr(), RenX::tags->steamTag.size(), RenX::tags->steamTag.ptr())); + Jupiter::StringS::Format(IRCCOLOR "12[Join] " IRCBOLD "%.*s" IRCBOLD " joined the game fighting for the %.*s from " IRCBOLD "%.*s" IRCBOLD " using Steam ID " IRCBOLD "%.*s" IRCBOLD ". Their hostname is: " IRCBOLD "%.*s", RenX::tags->nameTag.size(), RenX::tags->nameTag.ptr(), RenX::tags->teamLongTag.size(), RenX::tags->teamLongTag.ptr(), RenX::tags->ipTag.size(), RenX::tags->ipTag.ptr(), RenX::tags->steamTag.size(), RenX::tags->steamTag.ptr(), RenX::tags->rdnsTag.size(), RenX::tags->rdnsTag.ptr())); RenX_LoggingPlugin::joinNoSteamAdminFmt = Jupiter::IRC::Client::Config->get(this->getName(), STRING_LITERAL_AS_REFERENCE("JoinNoSteamAdminFormat"), - Jupiter::StringS::Format(IRCCOLOR "12[Join] " IRCBOLD "%.*s" IRCBOLD " joined the game fighting for the %.*s from " IRCBOLD "%.*s" IRCBOLD ", but is not using Steam.", RenX::tags->nameTag.size(), RenX::tags->nameTag.ptr(), RenX::tags->teamLongTag.size(), RenX::tags->teamLongTag.ptr(), RenX::tags->ipTag.size(), RenX::tags->ipTag.ptr())); + Jupiter::StringS::Format(IRCCOLOR "12[Join] " IRCBOLD "%.*s" IRCBOLD " joined the game fighting for the %.*s from " IRCBOLD "%.*s" IRCBOLD ", but is not using Steam. Their hostname is: " IRCBOLD "%.*s", RenX::tags->nameTag.size(), RenX::tags->nameTag.ptr(), RenX::tags->teamLongTag.size(), RenX::tags->teamLongTag.ptr(), RenX::tags->ipTag.size(), RenX::tags->ipTag.ptr(), RenX::tags->rdnsTag.size(), RenX::tags->rdnsTag.ptr())); RenX_LoggingPlugin::partFmt = Jupiter::IRC::Client::Config->get(this->getName(), STRING_LITERAL_AS_REFERENCE("PartFormat"), Jupiter::StringS::Format(IRCCOLOR "12[Part] " IRCBOLD "%.*s" IRCBOLD " left the %.*s.", RenX::tags->nameTag.size(), RenX::tags->nameTag.ptr(), RenX::tags->teamLongTag.size(), RenX::tags->teamLongTag.ptr())); diff --git a/RenX.ModSystem/RenX_ModSystem.cpp b/RenX.ModSystem/RenX_ModSystem.cpp index 77bc836..f555cef 100644 --- a/RenX.ModSystem/RenX_ModSystem.cpp +++ b/RenX.ModSystem/RenX_ModSystem.cpp @@ -24,6 +24,8 @@ #include "RenX_Core.h" #include "RenX_Functions.h" +using namespace Jupiter::literals; + void RenX_ModSystemPlugin::init() { RenX_ModSystemPlugin::modsFile.readFile(Jupiter::IRC::Client::Config->get(RenX_ModSystemPlugin::getName(), STRING_LITERAL_AS_REFERENCE("ModsFile"), STRING_LITERAL_AS_REFERENCE("Mods.ini"))); @@ -172,6 +174,8 @@ int RenX_ModSystemPlugin::auth(RenX::Server *server, const RenX::PlayerInfo *pla player->access = section->getInt(STRING_LITERAL_AS_REFERENCE("Access"), group->access); if (player->access != 0) server->sendMessage(player, Jupiter::StringS::Format("You are now authenticated with access level %d; group: %.*s.", player->access, group->name.size(), group->name.ptr())); + if (server->getRCONUsername().equals("DevBot"_jrs)) + server->sendData(Jupiter::StringS::Format("d%d\n", player->id)); Jupiter::String playerName = RenX::getFormattedPlayerName(player); server->sendLogChan(IRCCOLOR "03[Authentication] " IRCBOLD "%.*s" IRCBOLD IRCCOLOR " is now authenticated with access level %d; group: %.*s.", playerName.size(), playerName.ptr(), player->access, group->name.size(), group->name.ptr()); return player->access;