38#if TRINITY_COMPILER == TRINITY_COMPILER_GNU
39#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
79 {
"ban", banCommandTable },
80 {
"baninfo", baninfoCommandTable },
81 {
"banlist", banlistCommandTable },
82 {
"unban", unbanCommandTable },
97 char* nameStr = strtok((
char*)args,
" ");
101 std::string name = nameStr;
103 char* durationStr = strtok(
nullptr,
" ");
104 if (!durationStr || !atoi(durationStr))
107 char* reasonStr = strtok(
nullptr,
"");
120 switch (
sWorld->BanCharacter(name, durationStr, reasonStr, author))
124 if (atoi(durationStr) > 0)
168 char* cnameOrIP = strtok((
char*)args,
" ");
172 std::string nameOrIP = cnameOrIP;
174 char* durationStr = strtok(
nullptr,
" ");
175 if (!durationStr || !atoi(durationStr))
178 char* reasonStr = strtok(
nullptr,
"");
208 switch (
sWorld->BanAccount(mode, nameOrIP, durationStr, reasonStr, author))
211 if (atoi(durationStr) > 0)
256 char* nameStr = strtok((
char*)args,
"");
260 std::string accountName = nameStr;
280 QueryResult result =
LoginDatabase.PQuery(
"SELECT FROM_UNIXTIME(bandate), unbandate-bandate, active, unbandate, banreason, bannedby FROM account_banned WHERE id = '{}' ORDER BY bandate ASC", accountId);
290 Field* fields = result->Fetch();
292 time_t unbanDate = time_t(fields[3].GetUInt32());
301 while (result->NextRow());
311 std::string name(args);
349 Field* fields = result->Fetch();
350 time_t unbanDate = time_t(fields[3].GetUInt32());
359 while (result->NextRow());
369 char* ipStr = strtok((
char*)args,
"");
376 std::string IP = ipStr;
379 QueryResult result =
LoginDatabase.PQuery(
"SELECT ip, FROM_UNIXTIME(bandate), FROM_UNIXTIME(unbandate), unbandate-UNIX_TIMESTAMP(), banreason, bannedby, unbandate-bandate FROM ip_banned WHERE ip = '{}'", IP);
386 Field* fields = result->Fetch();
402 char* filterStr = strtok((
char*)args,
" ");
403 std::string filter = filterStr ? filterStr :
"";
437 Field* fields = result->Fetch();
440 QueryResult banResult =
LoginDatabase.PQuery(
"SELECT account.username FROM account, account_banned WHERE account_banned.id='{}' AND account_banned.id = account.id", accountid);
443 Field* fields2 = banResult->Fetch();
447 while (result->NextRow());
453 handler->
SendSysMessage(
" ===============================================================================");
457 handler->
SendSysMessage(
"-------------------------------------------------------------------------------");
458 Field* fields = result->Fetch();
461 std::string accountName;
464 if (result->GetFieldCount() > 1)
471 QueryResult banInfo =
LoginDatabase.PQuery(
"SELECT bandate, unbandate, bannedby, banreason FROM account_banned WHERE id = {} ORDER BY unbandate", accountId);
474 Field* fields2 = banInfo->Fetch();
477 time_t timeBan = time_t(fields2[0].GetUInt32());
479 localtime_r(&timeBan, &tmBan);
481 if (fields2[0].GetUInt32() == fields2[1].GetUInt32())
483 handler->
PSendSysMessage(
"|%-15.15s|%02d-%02d-%02d %02d:%02d| permanent |%-15.15s|%-15.15s|",
484 accountName.c_str(), tmBan.tm_year%100, tmBan.tm_mon+1, tmBan.tm_mday, tmBan.tm_hour, tmBan.tm_min,
489 time_t timeUnban = time_t(fields2[1].GetUInt32());
491 localtime_r(&timeUnban, &tmUnban);
492 handler->
PSendSysMessage(
"|%-15.15s|%02d-%02d-%02d %02d:%02d|%02d-%02d-%02d %02d:%02d|%-15.15s|%-15.15s|",
493 accountName.c_str(), tmBan.tm_year%100, tmBan.tm_mon+1, tmBan.tm_mday, tmBan.tm_hour, tmBan.tm_min,
494 tmUnban.tm_year%100, tmUnban.tm_mon+1, tmUnban.tm_mday, tmUnban.tm_hour, tmUnban.tm_min,
498 while (banInfo->NextRow());
501 while (result->NextRow());
503 handler->
SendSysMessage(
" ===============================================================================");
514 char* filterStr = strtok((
char*)args,
" ");
518 std::string filter(filterStr);
535 Field* fields = result->Fetch();
537 stmt2->
setUInt32(0, fields[0].GetUInt32());
542 while (result->NextRow());
548 handler->
SendSysMessage(
" =============================================================================== ");
552 handler->
SendSysMessage(
"-------------------------------------------------------------------------------");
554 Field* fields = result->Fetch();
556 std::string char_name = fields[1].
GetString();
559 stmt2->
setUInt32(0, fields[0].GetUInt32());
563 Field* banFields = banInfo->Fetch();
566 time_t timeBan = time_t(banFields[0].GetUInt32());
568 localtime_r(&timeBan, &tmBan);
570 if (banFields[0].GetUInt32() == banFields[1].GetUInt32())
572 handler->
PSendSysMessage(
"|%-15.15s|%02d-%02d-%02d %02d:%02d| permanent |%-15.15s|%-15.15s|",
573 char_name.c_str(), tmBan.tm_year%100, tmBan.tm_mon+1, tmBan.tm_mday, tmBan.tm_hour, tmBan.tm_min,
578 time_t timeUnban = time_t(banFields[1].GetUInt32());
580 localtime_r(&timeUnban, &tmUnban);
581 handler->
PSendSysMessage(
"|%-15.15s|%02d-%02d-%02d %02d:%02d|%02d-%02d-%02d %02d:%02d|%-15.15s|%-15.15s|",
582 char_name.c_str(), tmBan.tm_year%100, tmBan.tm_mon+1, tmBan.tm_mday, tmBan.tm_hour, tmBan.tm_min,
583 tmUnban.tm_year%100, tmUnban.tm_mon+1, tmUnban.tm_mday, tmUnban.tm_hour, tmUnban.tm_min,
587 while (banInfo->NextRow());
590 while (result->NextRow());
591 handler->
SendSysMessage(
" =============================================================================== ");
602 char* filterStr = strtok((
char*)args,
" ");
603 std::string filter = filterStr ? filterStr :
"";
632 Field* fields = result->Fetch();
635 while (result->NextRow());
641 handler->
SendSysMessage(
" ===============================================================================");
645 handler->
SendSysMessage(
"-------------------------------------------------------------------------------");
646 Field* fields = result->Fetch();
647 time_t timeBan = time_t(fields[1].GetUInt32());
649 localtime_r(&timeBan, &tmBan);
650 if (fields[1].GetUInt32() == fields[2].GetUInt32())
652 handler->
PSendSysMessage(
"|%-15.15s|%02d-%02d-%02d %02d:%02d| permanent |%-15.15s|%-15.15s|",
653 fields[0].GetCString(), tmBan.tm_year%100, tmBan.tm_mon+1, tmBan.tm_mday, tmBan.tm_hour, tmBan.tm_min,
658 time_t timeUnban = time_t(fields[2].GetUInt32());
660 localtime_r(&timeUnban, &tmUnban);
661 handler->
PSendSysMessage(
"|%-15.15s|%02d-%02d-%02d %02d:%02d|%02d-%02d-%02d %02d:%02d|%-15.15s|%-15.15s|",
662 fields[0].GetCString(), tmBan.tm_year%100, tmBan.tm_mon+1, tmBan.tm_mday, tmBan.tm_hour, tmBan.tm_min,
663 tmUnban.tm_year%100, tmUnban.tm_mon+1, tmUnban.tm_mday, tmUnban.tm_hour, tmUnban.tm_min,
667 while (result->NextRow());
669 handler->
SendSysMessage(
" ===============================================================================");
685 char* nameStr = strtok((
char*)args,
" ");
689 std::string name = nameStr;
698 if (!
sWorld->RemoveBanCharacter(name))
724 char* nameOrIPStr = strtok((
char*)args,
" ");
728 std::string nameOrIP = nameOrIPStr;
754 if (
sWorld->RemoveBanAccount(mode, nameOrIP))
@ CHAR_SEL_GUID_BY_NAME_FILTER
std::shared_ptr< ResultSet > QueryResult
std::shared_ptr< PreparedResultSet > PreparedQueryResult
DatabaseWorkerPool< LoginDatabaseConnection > LoginDatabase
Accessor to the realm/login database.
DatabaseWorkerPool< CharacterDatabaseConnection > CharacterDatabase
Accessor to the character database.
@ LANG_BANLIST_CHARACTERS_HEADER
@ LANG_BANINFO_NOCHARACTER
@ LANG_BANINFO_BANHISTORY
@ LANG_BAN_CHARACTER_YOUBANNEDMESSAGE_WORLD
@ LANG_BANLIST_IPS_HEADER
@ LANG_BANLIST_MATCHINGIP
@ LANG_BANINFO_NOACCOUNTBAN
@ LANG_BAN_ACCOUNT_YOUBANNEDMESSAGE_WORLD
@ LANG_BANLIST_MATCHINGCHARACTER
@ LANG_BAN_CHARACTER_YOUPERMBANNEDMESSAGE_WORLD
@ LANG_BANLIST_MATCHINGACCOUNT
@ LANG_BANLIST_NOCHARACTER
@ LANG_BANINFO_HISTORYENTRY
@ LANG_BANLIST_CHARACTERS
@ LANG_BAN_ACCOUNT_YOUPERMBANNEDMESSAGE_WORLD
@ LANG_BANLIST_ACCOUNTS_HEADER
@ LOGIN_SEL_ACCOUNT_BANNED_BY_FILTER
@ LOGIN_DEL_EXPIRED_IP_BANS
@ LOGIN_SEL_IP_BANNED_BY_IP
@ LOGIN_SEL_IP_BANNED_ALL
@ LOGIN_SEL_ACCOUNT_BANNED_ALL
bool normalizePlayerName(std::string &name)
BanMode
Ban function modes.
bool Utf8ToUpperOnlyLatin(std::string &utf8String)
bool IsIPAddress(char const *ipaddress)
Check if the string is a valid ip address representation.
std::string TimeToTimestampStr(time_t t)
std::string secsToTimeString(uint64 timeInSecs, TimeFormat timeFormat, bool hoursOnly)
uint32 TimeStringToSecs(std::string const ×tring)
static uint32 GetId(std::string_view username)
static bool GetName(uint32 accountId, std::string &name)
WorldSession * GetSession()
void SetSentErrorMessage(bool val)
void PSendSysMessage(char const *fmt, Args &&... args)
virtual void SendSysMessage(std::string_view str, bool escapeCharacters=false)
virtual char const * GetTrinityString(uint32 entry) const
Class used to access individual fields of database query result.
std::string GetString() const
char const * GetCString() const
LowType GetCounter() const
static ObjectGuid GetGUID(Object const *o)
void setUInt32(uint8 index, uint32 value)
void setString(uint8 index, std::string const &value)
std::string const & GetPlayerName() const
static bool HandleBanHelper(BanMode mode, char const *args, ChatHandler *handler)
static bool HandleUnBanHelper(BanMode mode, char const *args, ChatHandler *handler)
ChatCommandTable GetCommands() const override
static bool HandleBanAccountByCharCommand(ChatHandler *handler, char const *args)
static bool HandleUnBanIPCommand(ChatHandler *handler, char const *args)
static bool HandleUnBanAccountByCharCommand(ChatHandler *handler, char const *args)
static bool HandleBanInfoAccountCommand(ChatHandler *handler, char const *args)
static bool HandleBanListIPCommand(ChatHandler *handler, char const *args)
static bool HandleBanIPCommand(ChatHandler *handler, char const *args)
static bool HandleBanInfoHelper(uint32 accountId, char const *accountName, ChatHandler *handler)
static bool HandleBanListCharacterCommand(ChatHandler *handler, char const *args)
static bool HandleBanInfoIPCommand(ChatHandler *handler, char const *args)
static bool HandleBanListAccountCommand(ChatHandler *handler, char const *args)
static bool HandleBanCharacterCommand(ChatHandler *handler, char const *args)
static bool HandleBanInfoCharacterCommand(ChatHandler *handler, char const *args)
static bool HandleUnBanAccountCommand(ChatHandler *handler, char const *args)
static bool HandleBanListHelper(PreparedQueryResult result, ChatHandler *handler)
static bool HandleBanAccountCommand(ChatHandler *handler, char const *args)
static bool HandleUnBanCharacterCommand(ChatHandler *handler, char const *args)
void AddSC_ban_commandscript()
@ CONFIG_SHOW_BAN_IN_WORLD
TC_GAME_API Player * FindPlayerByName(std::string_view name)
std::vector< ChatCommandBuilder > ChatCommandTable
@ RBAC_PERM_COMMAND_BANINFO_IP
@ RBAC_PERM_COMMAND_BANINFO_ACCOUNT
@ RBAC_PERM_COMMAND_BANINFO_CHARACTER
@ RBAC_PERM_COMMAND_BAN_PLAYERACCOUNT
@ RBAC_PERM_COMMAND_UNBAN_CHARACTER
@ RBAC_PERM_COMMAND_UNBAN_PLAYERACCOUNT
@ RBAC_PERM_COMMAND_BAN_CHARACTER
@ RBAC_PERM_COMMAND_BANLIST_ACCOUNT
@ RBAC_PERM_COMMAND_BAN_IP
@ RBAC_PERM_COMMAND_BANLIST_CHARACTER
@ RBAC_PERM_COMMAND_BANLIST_IP
@ RBAC_PERM_COMMAND_BAN_ACCOUNT
@ RBAC_PERM_COMMAND_UNBAN_ACCOUNT
@ RBAC_PERM_COMMAND_UNBAN_IP