AzerothCore 3.3.5a
OpenSource WoW Emulator
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
ban_commandscript Class Reference
Inheritance diagram for ban_commandscript:
CommandScript ScriptObject

Public Member Functions

 ban_commandscript ()
 
ChatCommandTable GetCommands () const override
 
- Public Member Functions inherited from ScriptObject
virtual bool IsDatabaseBound () const
 
virtual bool isAfterLoadScript () const
 
virtual void checkValidity ()
 
const std::string & GetName () const
 
uint16 GetTotalAvailableHooks ()
 

Static Public Member Functions

static bool HandleBanAccountCommand (ChatHandler *handler, char const *args)
 
static bool HandleBanCharacterCommand (ChatHandler *handler, char const *args)
 
static bool HandleBanAccountByCharCommand (ChatHandler *handler, char const *args)
 
static bool HandleBanIPCommand (ChatHandler *handler, char const *args)
 
static bool HandleBanHelper (BanMode mode, char const *args, ChatHandler *handler)
 
static bool HandleBanInfoAccountCommand (ChatHandler *handler, char const *args)
 
static bool HandleBanInfoHelper (uint32 accountId, char const *accountName, ChatHandler *handler)
 
static bool HandleBanInfoCharacterCommand (ChatHandler *handler, char const *args)
 
static bool HandleBanInfoIPCommand (ChatHandler *handler, char const *args)
 
static bool HandleBanListAccountCommand (ChatHandler *handler, char const *args)
 
static bool HandleBanListHelper (PreparedQueryResult result, ChatHandler *handler)
 
static bool HandleBanListCharacterCommand (ChatHandler *handler, char const *args)
 
static bool HandleBanListIPCommand (ChatHandler *handler, char const *args)
 
static bool HandleUnBanAccountCommand (ChatHandler *handler, char const *args)
 
static bool HandleUnBanCharacterCommand (ChatHandler *handler, char const *args)
 
static bool HandleUnBanAccountByCharCommand (ChatHandler *handler, char const *args)
 
static bool HandleUnBanIPCommand (ChatHandler *handler, char const *args)
 
static bool HandleUnBanHelper (BanMode mode, char const *args, ChatHandler *handler)
 

Additional Inherited Members

- Protected Member Functions inherited from CommandScript
 CommandScript (const char *name)
 
- Protected Member Functions inherited from ScriptObject
 ScriptObject (const char *name, uint16 totalAvailableHooks=0)
 
virtual ~ScriptObject ()=default
 

Detailed Description

Constructor & Destructor Documentation

◆ ban_commandscript()

ban_commandscript::ban_commandscript ( )
inline
46: CommandScript("ban_commandscript") { }
Definition CommandScript.h:25

Member Function Documentation

◆ GetCommands()

ChatCommandTable ban_commandscript::GetCommands ( ) const
inlineoverridevirtual

Implements CommandScript.

49 {
50 static ChatCommandTable unbanCommandTable =
51 {
52 { "account", HandleUnBanAccountCommand, SEC_ADMINISTRATOR, Console::Yes },
53 { "character", HandleUnBanCharacterCommand, SEC_ADMINISTRATOR, Console::Yes },
54 { "playeraccount", HandleUnBanAccountByCharCommand, SEC_ADMINISTRATOR, Console::Yes },
55 { "ip", HandleUnBanIPCommand, SEC_ADMINISTRATOR, Console::Yes }
56 };
57
58 static ChatCommandTable banlistCommandTable =
59 {
60 { "account", HandleBanListAccountCommand, SEC_GAMEMASTER, Console::Yes },
61 { "character", HandleBanListCharacterCommand, SEC_GAMEMASTER, Console::Yes },
62 { "ip", HandleBanListIPCommand, SEC_GAMEMASTER, Console::Yes }
63 };
64
65 static ChatCommandTable baninfoCommandTable =
66 {
67 { "account", HandleBanInfoAccountCommand, SEC_GAMEMASTER, Console::Yes },
68 { "character", HandleBanInfoCharacterCommand, SEC_GAMEMASTER, Console::Yes },
69 { "ip", HandleBanInfoIPCommand, SEC_GAMEMASTER, Console::Yes }
70 };
71
72 static ChatCommandTable banCommandTable =
73 {
74 { "account", HandleBanAccountCommand, SEC_GAMEMASTER, Console::Yes },
75 { "character", HandleBanCharacterCommand, SEC_GAMEMASTER, Console::Yes },
76 { "playeraccount",HandleBanAccountByCharCommand, SEC_GAMEMASTER, Console::Yes },
77 { "ip", HandleBanIPCommand, SEC_GAMEMASTER, Console::Yes }
78 };
79
80 static ChatCommandTable commandTable =
81 {
82 { "ban", banCommandTable },
83 { "baninfo", baninfoCommandTable },
84 { "banlist", banlistCommandTable },
85 { "unban", unbanCommandTable }
86 };
87
88 return commandTable;
89 }
@ SEC_ADMINISTRATOR
Definition Common.h:60
@ SEC_GAMEMASTER
Definition Common.h:59
static bool HandleBanAccountByCharCommand(ChatHandler *handler, char const *args)
Definition cs_ban.cpp:147
static bool HandleUnBanIPCommand(ChatHandler *handler, char const *args)
Definition cs_ban.cpp:689
static bool HandleUnBanAccountByCharCommand(ChatHandler *handler, char const *args)
Definition cs_ban.cpp:684
static bool HandleBanInfoAccountCommand(ChatHandler *handler, char const *args)
Definition cs_ban.cpp:254
static bool HandleBanListIPCommand(ChatHandler *handler, char const *args)
Definition cs_ban.cpp:581
static bool HandleBanIPCommand(ChatHandler *handler, char const *args)
Definition cs_ban.cpp:152
static bool HandleBanListCharacterCommand(ChatHandler *handler, char const *args)
Definition cs_ban.cpp:498
static bool HandleBanInfoIPCommand(ChatHandler *handler, char const *args)
Definition cs_ban.cpp:355
static bool HandleBanListAccountCommand(ChatHandler *handler, char const *args)
Definition cs_ban.cpp:393
static bool HandleBanCharacterCommand(ChatHandler *handler, char const *args)
Definition cs_ban.cpp:96
static bool HandleBanInfoCharacterCommand(ChatHandler *handler, char const *args)
Definition cs_ban.cpp:307
static bool HandleUnBanAccountCommand(ChatHandler *handler, char const *args)
Definition cs_ban.cpp:653
static bool HandleBanAccountCommand(ChatHandler *handler, char const *args)
Definition cs_ban.cpp:91
static bool HandleUnBanCharacterCommand(ChatHandler *handler, char const *args)
Definition cs_ban.cpp:658
std::vector< ChatCommandBuilder > ChatCommandTable
Definition ChatCommand.h:46

References HandleBanAccountByCharCommand(), HandleBanAccountCommand(), HandleBanCharacterCommand(), HandleBanInfoAccountCommand(), HandleBanInfoCharacterCommand(), HandleBanInfoIPCommand(), HandleBanIPCommand(), HandleBanListAccountCommand(), HandleBanListCharacterCommand(), HandleBanListIPCommand(), HandleUnBanAccountByCharCommand(), HandleUnBanAccountCommand(), HandleUnBanCharacterCommand(), HandleUnBanIPCommand(), SEC_ADMINISTRATOR, and SEC_GAMEMASTER.

◆ HandleBanAccountByCharCommand()

static bool ban_commandscript::HandleBanAccountByCharCommand ( ChatHandler handler,
char const *  args 
)
inlinestatic
148 {
149 return HandleBanHelper(BAN_CHARACTER, args, handler);
150 }
static bool HandleBanHelper(BanMode mode, char const *args, ChatHandler *handler)
Definition cs_ban.cpp:157
@ BAN_CHARACTER
Definition cs_ban.cpp:33

References BAN_CHARACTER, and HandleBanHelper().

Referenced by GetCommands().

◆ HandleBanAccountCommand()

static bool ban_commandscript::HandleBanAccountCommand ( ChatHandler handler,
char const *  args 
)
inlinestatic
92 {
93 return HandleBanHelper(BAN_ACCOUNT, args, handler);
94 }
@ BAN_ACCOUNT
Definition cs_ban.cpp:32

References BAN_ACCOUNT, and HandleBanHelper().

Referenced by GetCommands().

◆ HandleBanCharacterCommand()

static bool ban_commandscript::HandleBanCharacterCommand ( ChatHandler handler,
char const *  args 
)
inlinestatic
97 {
98 if (!*args)
99 return false;
100
101 char* nameStr = strtok((char*)args, " ");
102 if (!nameStr)
103 return false;
104
105 std::string name = nameStr;
106
107 char* durationStr = strtok(nullptr, " ");
108 if (!durationStr || !atoi(durationStr))
109 return false;
110
111 char* reasonStr = strtok(nullptr, "");
112 if (!reasonStr)
113 return false;
114
115 if (!normalizePlayerName(name))
116 {
118 return false;
119 }
120
121 switch (sBan->BanCharacter(name, durationStr, reasonStr, handler->GetSession() ? handler->GetSession()->GetPlayerName() : ""))
122 {
123 case BAN_SUCCESS:
124 if (atoi(durationStr) > 0)
125 {
126 if (!sWorld->getBoolConfig(CONFIG_SHOW_BAN_IN_WORLD))
127 handler->PSendSysMessage(LANG_BAN_YOUBANNED, name, secsToTimeString(TimeStringToSecs(durationStr), true), reasonStr);
128 }
129 else
130 {
131 if (!sWorld->getBoolConfig(CONFIG_SHOW_BAN_IN_WORLD))
132 handler->PSendSysMessage(LANG_BAN_YOUPERMBANNED, name, reasonStr);
133 }
134 break;
135 case BAN_NOTFOUND:
136 {
137 handler->SendErrorMessage(LANG_BAN_NOTFOUND, "character", name);
138 return false;
139 }
140 default:
141 break;
142 }
143
144 return true;
145 }
@ BAN_NOTFOUND
Definition BanMgr.h:28
@ BAN_SUCCESS
Definition BanMgr.h:26
#define sBan
Definition BanMgr.h:48
@ CONFIG_SHOW_BAN_IN_WORLD
Definition IWorld.h:130
@ LANG_BAN_NOTFOUND
Definition Language.h:438
@ LANG_BAN_YOUPERMBANNED
Definition Language.h:437
@ LANG_BAN_YOUBANNED
Definition Language.h:436
@ LANG_PLAYER_NOT_FOUND
Definition Language.h:540
bool normalizePlayerName(std::string &name)
Definition ObjectMgr.cpp:208
std::string secsToTimeString(uint64 timeInSecs, bool shortText)
Definition Util.cpp:73
uint32 TimeStringToSecs(const std::string &timestring)
Definition Util.cpp:163
void PSendSysMessage(std::string_view str, bool escapeCharacters=false)
Definition Chat.cpp:211
WorldSession * GetSession()
Definition Chat.h:242
void SendErrorMessage(uint32 entry)
Definition Chat.cpp:216
std::string const & GetPlayerName() const
Definition WorldSession.cpp:185
#define sWorld
Definition World.h:357

References BAN_NOTFOUND, BAN_SUCCESS, CONFIG_SHOW_BAN_IN_WORLD, WorldSession::GetPlayerName(), ChatHandler::GetSession(), LANG_BAN_NOTFOUND, LANG_BAN_YOUBANNED, LANG_BAN_YOUPERMBANNED, LANG_PLAYER_NOT_FOUND, normalizePlayerName(), ChatHandler::PSendSysMessage(), sBan, secsToTimeString(), ChatHandler::SendErrorMessage(), sWorld, and TimeStringToSecs().

Referenced by GetCommands().

◆ HandleBanHelper()

static bool ban_commandscript::HandleBanHelper ( BanMode  mode,
char const *  args,
ChatHandler handler 
)
inlinestatic
158 {
159 if (!*args)
160 return false;
161
162 char* cnameOrIP = strtok((char*)args, " ");
163 if (!cnameOrIP)
164 return false;
165
166 std::string nameOrIP = cnameOrIP;
167
168 char* durationStr = strtok(nullptr, " ");
169 if (!durationStr || !atoi(durationStr))
170 return false;
171
172 char* reasonStr = strtok(nullptr, "");
173 if (!reasonStr)
174 return false;
175
176 switch (mode)
177 {
178 case BAN_ACCOUNT:
179 if (!Utf8ToUpperOnlyLatin(nameOrIP))
180 {
181 handler->SendErrorMessage(LANG_ACCOUNT_NOT_EXIST, nameOrIP);
182 return false;
183 }
184 break;
185 case BAN_CHARACTER:
186 if (!normalizePlayerName(nameOrIP))
187 {
189 return false;
190 }
191 break;
192 case BAN_IP:
193 if (!IsIPAddress(nameOrIP.c_str()))
194 return false;
195 break;
196 }
197
198 BanReturn banReturn;
199
200 switch (mode)
201 {
202 case BAN_ACCOUNT:
203 banReturn = sBan->BanAccount(nameOrIP, durationStr, reasonStr, handler->GetSession() ? handler->GetSession()->GetPlayerName() : "Console");
204 break;
205 case BAN_CHARACTER:
206 banReturn = sBan->BanAccountByPlayerName(nameOrIP, durationStr, reasonStr, handler->GetSession() ? handler->GetSession()->GetPlayerName() : "Console");
207 break;
208 case BAN_IP:
209 default:
210 banReturn = sBan->BanIP(nameOrIP, durationStr, reasonStr, handler->GetSession() ? handler->GetSession()->GetPlayerName() : "Console");
211 break;
212 }
213
214 switch (banReturn)
215 {
216 case BAN_SUCCESS:
217 if (atoi(durationStr) > 0)
218 {
219 if (!sWorld->getBoolConfig(CONFIG_SHOW_BAN_IN_WORLD))
220 handler->PSendSysMessage(LANG_BAN_YOUBANNED, nameOrIP, secsToTimeString(TimeStringToSecs(durationStr), true), reasonStr);
221 }
222 else
223 {
224 if (!sWorld->getBoolConfig(CONFIG_SHOW_BAN_IN_WORLD))
225 handler->PSendSysMessage(LANG_BAN_YOUPERMBANNED, nameOrIP, reasonStr);
226 }
227 break;
228 case BAN_SYNTAX_ERROR:
229 return false;
230 case BAN_NOTFOUND:
231 switch (mode)
232 {
233 default:
234 handler->SendErrorMessage(LANG_BAN_NOTFOUND, "account", nameOrIP);
235 break;
236 case BAN_CHARACTER:
237 handler->SendErrorMessage(LANG_BAN_NOTFOUND, "character", nameOrIP);
238 break;
239 case BAN_IP:
240 handler->SendErrorMessage(LANG_BAN_NOTFOUND, "ip", nameOrIP);
241 break;
242 }
243 return false;
245 handler->PSendSysMessage("Unsuccessful! A longer ban is already present on this account!");
246 break;
247 default:
248 break;
249 }
250
251 return true;
252 }
BanReturn
Ban function return codes.
Definition BanMgr.h:25
@ BAN_SYNTAX_ERROR
Definition BanMgr.h:27
@ BAN_LONGER_EXISTS
Definition BanMgr.h:29
@ LANG_ACCOUNT_NOT_EXIST
Definition Language.h:443
bool Utf8ToUpperOnlyLatin(std::string &utf8String)
Definition Util.cpp:532
bool IsIPAddress(char const *ipaddress)
Check if the string is a valid ip address representation.
Definition Util.cpp:205
@ BAN_IP
Definition cs_ban.cpp:34

References BAN_ACCOUNT, BAN_CHARACTER, BAN_IP, BAN_LONGER_EXISTS, BAN_NOTFOUND, BAN_SUCCESS, BAN_SYNTAX_ERROR, CONFIG_SHOW_BAN_IN_WORLD, WorldSession::GetPlayerName(), ChatHandler::GetSession(), IsIPAddress(), LANG_ACCOUNT_NOT_EXIST, LANG_BAN_NOTFOUND, LANG_BAN_YOUBANNED, LANG_BAN_YOUPERMBANNED, LANG_PLAYER_NOT_FOUND, normalizePlayerName(), ChatHandler::PSendSysMessage(), sBan, secsToTimeString(), ChatHandler::SendErrorMessage(), sWorld, TimeStringToSecs(), and Utf8ToUpperOnlyLatin().

Referenced by HandleBanAccountByCharCommand(), HandleBanAccountCommand(), and HandleBanIPCommand().

◆ HandleBanInfoAccountCommand()

static bool ban_commandscript::HandleBanInfoAccountCommand ( ChatHandler handler,
char const *  args 
)
inlinestatic
255 {
256 if (!*args)
257 return false;
258
259 char* nameStr = strtok((char*)args, "");
260 if (!nameStr)
261 return false;
262
263 std::string accountName = nameStr;
264 if (!Utf8ToUpperOnlyLatin(accountName))
265 {
266 handler->SendErrorMessage(LANG_ACCOUNT_NOT_EXIST, accountName);
267 return false;
268 }
269
270 uint32 accountId = AccountMgr::GetId(accountName);
271 if (!accountId)
272 {
273 handler->PSendSysMessage(LANG_ACCOUNT_NOT_EXIST, accountName);
274 return true;
275 }
276
277 return HandleBanInfoHelper(accountId, accountName.c_str(), handler);
278 }
std::uint32_t uint32
Definition Define.h:107
static bool HandleBanInfoHelper(uint32 accountId, char const *accountName, ChatHandler *handler)
Definition cs_ban.cpp:280
uint32 GetId(std::string const &username)
Definition AccountMgr.cpp:229

References AccountMgr::GetId(), HandleBanInfoHelper(), LANG_ACCOUNT_NOT_EXIST, ChatHandler::PSendSysMessage(), ChatHandler::SendErrorMessage(), and Utf8ToUpperOnlyLatin().

Referenced by GetCommands().

◆ HandleBanInfoCharacterCommand()

static bool ban_commandscript::HandleBanInfoCharacterCommand ( ChatHandler handler,
char const *  args 
)
inlinestatic
308 {
309 if (!*args)
310 return false;
311
312 Player* target = ObjectAccessor::FindPlayerByName(args, false);
313 ObjectGuid targetGuid;
314 std::string name(args);
315
316 if (!target)
317 {
318 targetGuid = sCharacterCache->GetCharacterGuidByName(name);
319 if (!targetGuid)
320 {
322 return false;
323 }
324 }
325 else
326 targetGuid = target->GetGUID();
327
329 stmt->SetData(0, targetGuid.GetCounter());
330
331 PreparedQueryResult result = CharacterDatabase.Query(stmt);
332 if (!result)
333 {
335 return true;
336 }
337
339 do
340 {
341 Field* fields = result->Fetch();
342 time_t unbanDate = time_t(fields[3].Get<uint32>());
343 bool active = false;
344 if (fields[2].Get<uint8>() && (!fields[1].Get<uint32>() || unbanDate >= GameTime::GetGameTime().count()))
345 active = true;
346 bool permanent = (fields[1].Get<uint32>() == uint32(0));
347 std::string banTime = permanent ? handler->GetAcoreString(LANG_BANINFO_INFINITE) : secsToTimeString(fields[1].Get<uint64>(), true);
349 fields[0].Get<std::string>(), banTime, active ? handler->GetAcoreString(LANG_YES) : handler->GetAcoreString(LANG_NO), fields[4].Get<std::string>(), fields[5].Get<std::string>());
350 } while (result->NextRow());
351
352 return true;
353 }
#define sCharacterCache
Definition CharacterCache.h:83
@ CHAR_SEL_BANINFO
Definition CharacterDatabase.h:44
std::shared_ptr< PreparedResultSet > PreparedQueryResult
Definition DatabaseEnvFwd.h:45
DatabaseWorkerPool< CharacterDatabaseConnection > CharacterDatabase
Accessor to the character database.
Definition DatabaseEnv.cpp:21
@ LANG_YES
Definition Language.h:452
@ LANG_BANINFO_INFINITE
Definition Language.h:450
@ LANG_BANINFO_NOCHARACTER
Definition Language.h:445
@ LANG_BANINFO_BANHISTORY
Definition Language.h:448
@ LANG_CHAR_NOT_BANNED
Definition Language.h:926
@ LANG_NO
Definition Language.h:453
@ LANG_BANINFO_HISTORYENTRY
Definition Language.h:449
virtual std::string GetAcoreString(uint32 entry) const
Definition Chat.cpp:41
Class used to access individual fields of database query result.
Definition Field.h:98
std::enable_if_t< std::is_arithmetic_v< T >, T > Get() const
Definition Field.h:112
Definition ObjectGuid.h:118
LowType GetCounter() const
Definition ObjectGuid.h:145
static ObjectGuid GetGUID(Object const *o)
Definition Object.h:113
Definition Player.h:1082
Acore::Types::is_default< T > SetData(const uint8 index, T value)
Definition PreparedStatement.h:77
Definition PreparedStatement.h:157
AC_GAME_API std::string GetAcoreString(ChatHandler const *handler, AcoreStrings which)
Definition ChatCommandHelpers.cpp:27
Seconds GetGameTime()
Definition GameTime.cpp:38
Player * FindPlayerByName(std::string const &name, bool checkInWorld=true)
Definition ObjectAccessor.cpp:271
STL namespace.

References CHAR_SEL_BANINFO, CharacterDatabase, ObjectAccessor::FindPlayerByName(), Field::Get(), ChatHandler::GetAcoreString(), ObjectGuid::GetCounter(), GameTime::GetGameTime(), Object::GetGUID(), LANG_BANINFO_BANHISTORY, LANG_BANINFO_HISTORYENTRY, LANG_BANINFO_INFINITE, LANG_BANINFO_NOCHARACTER, LANG_CHAR_NOT_BANNED, LANG_NO, LANG_YES, ChatHandler::PSendSysMessage(), sCharacterCache, secsToTimeString(), and PreparedStatementBase::SetData().

Referenced by GetCommands().

◆ HandleBanInfoHelper()

static bool ban_commandscript::HandleBanInfoHelper ( uint32  accountId,
char const *  accountName,
ChatHandler handler 
)
inlinestatic
281 {
282 QueryResult result = LoginDatabase.Query("SELECT FROM_UNIXTIME(bandate, '%Y-%m-%d..%H:%i:%s') as bandate, unbandate-bandate, active, unbandate, banreason, bannedby FROM account_banned WHERE id = '{}' ORDER BY bandate ASC", accountId);
283 if (!result)
284 {
285 handler->PSendSysMessage(LANG_BANINFO_NOACCOUNTBAN, accountName);
286 return true;
287 }
288
289 handler->PSendSysMessage(LANG_BANINFO_BANHISTORY, accountName);
290 do
291 {
292 Field* fields = result->Fetch();
293
294 time_t unbanDate = time_t(fields[3].Get<uint32>());
295 bool active = false;
296 if (fields[2].Get<bool>() && (fields[1].Get<uint64>() == uint64(0) || unbanDate >= GameTime::GetGameTime().count()))
297 active = true;
298 bool permanent = (fields[1].Get<uint64>() == uint64(0));
299 std::string banTime = permanent ? handler->GetAcoreString(LANG_BANINFO_INFINITE) : secsToTimeString(fields[1].Get<uint64>(), true);
301 fields[0].Get<std::string>(), banTime, active ? handler->GetAcoreString(LANG_YES) : handler->GetAcoreString(LANG_NO), fields[4].Get<std::string>(), fields[5].Get<std::string>());
302 } while (result->NextRow());
303
304 return true;
305 }
std::shared_ptr< ResultSet > QueryResult
Definition DatabaseEnvFwd.h:27
DatabaseWorkerPool< LoginDatabaseConnection > LoginDatabase
Accessor to the realm/login database.
Definition DatabaseEnv.cpp:22
std::uint64_t uint64
Definition Define.h:106
@ LANG_BANINFO_NOACCOUNTBAN
Definition Language.h:447

References Field::Get(), ChatHandler::GetAcoreString(), GameTime::GetGameTime(), LANG_BANINFO_BANHISTORY, LANG_BANINFO_HISTORYENTRY, LANG_BANINFO_INFINITE, LANG_BANINFO_NOACCOUNTBAN, LANG_NO, LANG_YES, LoginDatabase, ChatHandler::PSendSysMessage(), and secsToTimeString().

Referenced by HandleBanInfoAccountCommand().

◆ HandleBanInfoIPCommand()

static bool ban_commandscript::HandleBanInfoIPCommand ( ChatHandler handler,
char const *  args 
)
inlinestatic
356 {
357 if (!*args)
358 return false;
359
360 char* ipStr = strtok((char*)args, "");
361 if (!ipStr)
362 return false;
363
364 if (!IsIPAddress(ipStr))
365 return false;
366
367 std::string IP = ipStr;
368
369 LoginDatabase.EscapeString(IP);
370 QueryResult result = LoginDatabase.Query("\
371 SELECT \
372 ip, FROM_UNIXTIME(bandate, '%Y-%m-%d %H:%i:%s'), FROM_UNIXTIME(unbandate, '%Y-%m-%d %H:%i:%s'), \
373 IF (unbandate > UNIX_TIMESTAMP(), unbandate - UNIX_TIMESTAMP(), 0) AS timeRemaining, \
374 banreason, bannedby, unbandate - bandate = 0 AS permanent \
375 FROM ip_banned \
376 WHERE ip = '{}' \
377 ", IP);
378 if (!result)
379 {
381 return true;
382 }
383
384 Field* fields = result->Fetch();
385 bool permanent = fields[6].Get<uint64>() == 1;
387 fields[0].Get<std::string>(), fields[1].Get<std::string>(), permanent ? handler->GetAcoreString(LANG_BANINFO_NEVER) : fields[2].Get<std::string>(),
388 permanent ? handler->GetAcoreString(LANG_BANINFO_INFINITE) : secsToTimeString(fields[3].Get<uint64>(), true), fields[4].Get<std::string>(), fields[5].Get<std::string>());
389
390 return true;
391 }
@ LANG_BANINFO_IPENTRY
Definition Language.h:454
@ LANG_BANINFO_NEVER
Definition Language.h:451
@ LANG_BANINFO_NOIP
Definition Language.h:446

References Field::Get(), ChatHandler::GetAcoreString(), IsIPAddress(), LANG_BANINFO_INFINITE, LANG_BANINFO_IPENTRY, LANG_BANINFO_NEVER, LANG_BANINFO_NOIP, LoginDatabase, ChatHandler::PSendSysMessage(), and secsToTimeString().

Referenced by GetCommands().

◆ HandleBanIPCommand()

static bool ban_commandscript::HandleBanIPCommand ( ChatHandler handler,
char const *  args 
)
inlinestatic
153 {
154 return HandleBanHelper(BAN_IP, args, handler);
155 }

References BAN_IP, and HandleBanHelper().

Referenced by GetCommands().

◆ HandleBanListAccountCommand()

static bool ban_commandscript::HandleBanListAccountCommand ( ChatHandler handler,
char const *  args 
)
inlinestatic
394 {
396 LoginDatabase.Execute(stmt);
397
398 char* filterStr = strtok((char*)args, " ");
399 std::string filter = filterStr ? filterStr : "";
400
401 PreparedQueryResult result;
402
403 if (filter.empty())
404 {
406 result = LoginDatabase.Query(stmt2);
407 }
408 else
409 {
411 stmt2->SetData(0, filter);
412 result = LoginDatabase.Query(stmt2);
413 }
414
415 if (!result)
416 {
418 return true;
419 }
420
421 return HandleBanListHelper(result, handler);
422 }
@ LANG_BANLIST_NOACCOUNT
Definition Language.h:457
@ LOGIN_DEL_EXPIRED_IP_BANS
Definition LoginDatabase.h:32
@ LOGIN_SEL_ACCOUNT_BANNED_BY_USERNAME
Definition LoginDatabase.h:39
@ LOGIN_SEL_ACCOUNT_BANNED_ALL
Definition LoginDatabase.h:38
static bool HandleBanListHelper(PreparedQueryResult result, ChatHandler *handler)
Definition cs_ban.cpp:424

References HandleBanListHelper(), LANG_BANLIST_NOACCOUNT, LOGIN_DEL_EXPIRED_IP_BANS, LOGIN_SEL_ACCOUNT_BANNED_ALL, LOGIN_SEL_ACCOUNT_BANNED_BY_USERNAME, LoginDatabase, ChatHandler::PSendSysMessage(), and PreparedStatementBase::SetData().

Referenced by GetCommands().

◆ HandleBanListCharacterCommand()

static bool ban_commandscript::HandleBanListCharacterCommand ( ChatHandler handler,
char const *  args 
)
inlinestatic
499 {
500 if (!*args)
501 return false;
502
503 char* filterStr = strtok((char*)args, " ");
504 if (!filterStr)
505 return false;
506
507 std::string filter(filterStr);
509 stmt->SetData(0, filter);
510 PreparedQueryResult result = CharacterDatabase.Query(stmt);
511 if (!result)
512 {
514 return true;
515 }
516
518
519 // Chat short output
520 if (handler->GetSession())
521 {
522 do
523 {
524 Field* fields = result->Fetch();
526 stmt2->SetData(0, fields[0].Get<uint32>());
527
528 PreparedQueryResult banResult = CharacterDatabase.Query(stmt2);
529 if (banResult)
530 handler->PSendSysMessage("{}", (*banResult)[0].Get<std::string>());
531 } while (result->NextRow());
532 }
533 // Console wide output
534 else
535 {
537 handler->SendSysMessage(" =============================================================================== ");
539 do
540 {
541 handler->SendSysMessage("-------------------------------------------------------------------------------");
542
543 Field* fields = result->Fetch();
544
545 std::string char_name = fields[1].Get<std::string>();
546
548 stmt2->SetData(0, fields[0].Get<uint32>());
549
550 PreparedQueryResult banInfo = CharacterDatabase.Query(stmt2);
551 if (banInfo)
552 {
553 Field* banFields = banInfo->Fetch();
554 do
555 {
556 tm tmBan = Acore::Time::TimeBreakdown(banFields[0].Get<uint32>());
557
558 if (banFields[0].Get<uint32>() == banFields[1].Get<uint32>())
559 {
560 handler->PSendSysMessage("|{:<15.15}|{:02}-{:02}-{:02} {:02}:{:02}| permanent |{:<15.15}|{:<15.15}|",
561 char_name, tmBan.tm_year % 100, tmBan.tm_mon + 1, tmBan.tm_mday, tmBan.tm_hour, tmBan.tm_min,
562 banFields[2].Get<std::string>(), banFields[3].Get<std::string>());
563 }
564 else
565 {
566 tm tmUnban = Acore::Time::TimeBreakdown(banFields[1].Get<uint32>());
567 handler->PSendSysMessage("|{:<15.15}|{:02}-{:02}-{:02} {:02}:{:02}|{:02}-{:02}-{:02} {:02}:{:02}|{:<15.15}|{:<15.15}|",
568 char_name, tmBan.tm_year % 100, tmBan.tm_mon + 1, tmBan.tm_mday, tmBan.tm_hour, tmBan.tm_min,
569 tmUnban.tm_year % 100, tmUnban.tm_mon + 1, tmUnban.tm_mday, tmUnban.tm_hour, tmUnban.tm_min,
570 banFields[2].Get<std::string>(), banFields[3].Get<std::string>());
571 }
572 } while (banInfo->NextRow());
573 }
574 } while (result->NextRow());
575 handler->SendSysMessage(" =============================================================================== ");
576 }
577
578 return true;
579 }
@ CHAR_SEL_BANNED_NAME
Definition CharacterDatabase.h:47
@ CHAR_SEL_BANINFO_LIST
Definition CharacterDatabase.h:46
@ CHAR_SEL_GUID_BY_NAME_FILTER
Definition CharacterDatabase.h:45
@ LANG_BANLIST_CHARACTERS_HEADER
Definition Language.h:923
@ LANG_BANLIST_MATCHINGCHARACTER
Definition Language.h:921
@ LANG_BANLIST_NOCHARACTER
Definition Language.h:458
@ LANG_BANLIST_CHARACTERS
Definition Language.h:922
virtual void SendSysMessage(std::string_view str, bool escapeCharacters=false)
Definition Chat.cpp:160
AC_COMMON_API std::tm TimeBreakdown(time_t t=0)
Definition Timer.cpp:233

References CHAR_SEL_BANINFO_LIST, CHAR_SEL_BANNED_NAME, CHAR_SEL_GUID_BY_NAME_FILTER, CharacterDatabase, Field::Get(), ChatHandler::GetSession(), LANG_BANLIST_CHARACTERS, LANG_BANLIST_CHARACTERS_HEADER, LANG_BANLIST_MATCHINGCHARACTER, LANG_BANLIST_NOCHARACTER, ChatHandler::PSendSysMessage(), ChatHandler::SendSysMessage(), PreparedStatementBase::SetData(), and Acore::Time::TimeBreakdown().

Referenced by GetCommands().

◆ HandleBanListHelper()

static bool ban_commandscript::HandleBanListHelper ( PreparedQueryResult  result,
ChatHandler handler 
)
inlinestatic
425 {
427
428 // Chat short output
429 if (handler->GetSession())
430 {
431 do
432 {
433 Field* fields = result->Fetch();
434 uint32 accountid = fields[0].Get<uint32>();
435
436 QueryResult banResult = LoginDatabase.Query("SELECT account.username FROM account, account_banned WHERE account_banned.id='{}' AND account_banned.id=account.id", accountid);
437 if (banResult)
438 {
439 Field* fields2 = banResult->Fetch();
440 handler->PSendSysMessage("{}", fields2[0].Get<std::string>());
441 }
442 } while (result->NextRow());
443 }
444 // Console wide output
445 else
446 {
448 handler->SendSysMessage(" ===============================================================================");
450 do
451 {
452 handler->SendSysMessage("-------------------------------------------------------------------------------");
453 Field* fields = result->Fetch();
454 uint32 accountId = fields[0].Get<uint32>();
455
456 std::string accountName;
457
458 // "account" case, name can be get in same query
459 if (result->GetFieldCount() > 1)
460 accountName = fields[1].Get<std::string>();
461 // "character" case, name need extract from another DB
462 else
463 AccountMgr::GetName(accountId, accountName);
464
465 // No SQL injection. id is uint32.
466 QueryResult banInfo = LoginDatabase.Query("SELECT bandate, unbandate, bannedby, banreason FROM account_banned WHERE id = {} ORDER BY unbandate", accountId);
467 if (banInfo)
468 {
469 Field* fields2 = banInfo->Fetch();
470 do
471 {
472 tm tmBan = Acore::Time::TimeBreakdown(fields2[0].Get<uint32>());
473
474 if (fields2[0].Get<uint32>() == fields2[1].Get<uint32>())
475 {
476 handler->PSendSysMessage("|{:<15.15}|{:02}-{:02}-{:02} {:02}:{:02}| permanent |{:<15.15}|{:<15.15}|",
477 accountName, tmBan.tm_year % 100, tmBan.tm_mon + 1, tmBan.tm_mday, tmBan.tm_hour, tmBan.tm_min,
478 fields2[2].Get<std::string>(), fields2[3].Get<std::string>());
479 }
480 else
481 {
482 tm tmUnban = Acore::Time::TimeBreakdown(fields2[1].Get<uint32>());
483 handler->PSendSysMessage("|{:<15.15}|{:02}-{:02}-{:02} {:02}:{:02}|{:02}-{:02}-{:02} {:02}:{:02}|{:<15.15}|{:<15.15}|",
484 accountName, tmBan.tm_year % 100, tmBan.tm_mon + 1, tmBan.tm_mday, tmBan.tm_hour, tmBan.tm_min,
485 tmUnban.tm_year % 100, tmUnban.tm_mon + 1, tmUnban.tm_mday, tmUnban.tm_hour, tmUnban.tm_min,
486 fields2[2].Get<std::string>(), fields2[3].Get<std::string>());
487 }
488 } while (banInfo->NextRow());
489 }
490 } while (result->NextRow());
491
492 handler->SendSysMessage(" ===============================================================================");
493 }
494
495 return true;
496 }
@ LANG_BANLIST_MATCHINGACCOUNT
Definition Language.h:460
@ LANG_BANLIST_ACCOUNTS_HEADER
Definition Language.h:657
@ LANG_BANLIST_ACCOUNTS
Definition Language.h:656
bool GetName(uint32 accountId, std::string &name)
Definition AccountMgr.cpp:257

References Field::Get(), AccountMgr::GetName(), ChatHandler::GetSession(), LANG_BANLIST_ACCOUNTS, LANG_BANLIST_ACCOUNTS_HEADER, LANG_BANLIST_MATCHINGACCOUNT, LoginDatabase, ChatHandler::PSendSysMessage(), ChatHandler::SendSysMessage(), and Acore::Time::TimeBreakdown().

Referenced by HandleBanListAccountCommand().

◆ HandleBanListIPCommand()

static bool ban_commandscript::HandleBanListIPCommand ( ChatHandler handler,
char const *  args 
)
inlinestatic
582 {
584 LoginDatabase.Execute(stmt);
585
586 char* filterStr = strtok((char*)args, " ");
587 std::string filter = filterStr ? filterStr : "";
588 LoginDatabase.EscapeString(filter);
589
590 PreparedQueryResult result;
591
592 if (filter.empty())
593 {
595 result = LoginDatabase.Query(stmt2);
596 }
597 else
598 {
600 stmt2->SetData(0, filter);
601 result = LoginDatabase.Query(stmt2);
602 }
603
604 if (!result)
605 {
607 return true;
608 }
609
611 // Chat short output
612 if (handler->GetSession())
613 {
614 do
615 {
616 Field* fields = result->Fetch();
617 handler->PSendSysMessage("{}", fields[0].Get<std::string>());
618 } while (result->NextRow());
619 }
620 // Console wide output
621 else
622 {
624 handler->SendSysMessage(" ===============================================================================");
626 do
627 {
628 handler->SendSysMessage("-------------------------------------------------------------------------------");
629 Field* fields = result->Fetch();
630 tm tmBan = Acore::Time::TimeBreakdown(fields[1].Get<uint32>());
631 if (fields[1].Get<uint32>() == fields[2].Get<uint32>())
632 {
633 handler->PSendSysMessage("{:<15.15}|{:02}-{:02}-{:02} {:02}:{:02}| permanent |{:<15.15}|{:<15.15}|",
634 fields[0].Get<std::string>(), tmBan.tm_year % 100, tmBan.tm_mon + 1, tmBan.tm_mday, tmBan.tm_hour, tmBan.tm_min,
635 fields[3].Get<std::string>(), fields[4].Get<std::string>());
636 }
637 else
638 {
639 tm tmUnban = Acore::Time::TimeBreakdown(fields[2].Get<uint32>());
640 handler->PSendSysMessage("|{:<15.15}|{:02}-{:02}-{:02} {:02}:{:02}|{:02}-{:02}-{:02} {:02}:{:02}|{:<15.15}|{:<15.15}|",
641 fields[0].Get<std::string>(), tmBan.tm_year % 100, tmBan.tm_mon + 1, tmBan.tm_mday, tmBan.tm_hour, tmBan.tm_min,
642 tmUnban.tm_year % 100, tmUnban.tm_mon + 1, tmUnban.tm_mday, tmUnban.tm_hour, tmUnban.tm_min,
643 fields[3].Get<std::string>(), fields[4].Get<std::string>());
644 }
645 } while (result->NextRow());
646
647 handler->SendSysMessage(" ===============================================================================");
648 }
649
650 return true;
651 }
@ LANG_BANLIST_IPS_HEADER
Definition Language.h:659
@ LANG_BANLIST_MATCHINGIP
Definition Language.h:459
@ LANG_BANLIST_NOIP
Definition Language.h:456
@ LANG_BANLIST_IPS
Definition Language.h:658
@ LOGIN_SEL_IP_BANNED_BY_IP
Definition LoginDatabase.h:58
@ LOGIN_SEL_IP_BANNED_ALL
Definition LoginDatabase.h:57

References Field::Get(), ChatHandler::GetSession(), LANG_BANLIST_IPS, LANG_BANLIST_IPS_HEADER, LANG_BANLIST_MATCHINGIP, LANG_BANLIST_NOIP, LOGIN_DEL_EXPIRED_IP_BANS, LOGIN_SEL_IP_BANNED_ALL, LOGIN_SEL_IP_BANNED_BY_IP, LoginDatabase, ChatHandler::PSendSysMessage(), ChatHandler::SendSysMessage(), PreparedStatementBase::SetData(), and Acore::Time::TimeBreakdown().

Referenced by GetCommands().

◆ HandleUnBanAccountByCharCommand()

static bool ban_commandscript::HandleUnBanAccountByCharCommand ( ChatHandler handler,
char const *  args 
)
inlinestatic
685 {
686 return HandleUnBanHelper(BAN_CHARACTER, args, handler);
687 }
static bool HandleUnBanHelper(BanMode mode, char const *args, ChatHandler *handler)
Definition cs_ban.cpp:694

References BAN_CHARACTER, and HandleUnBanHelper().

Referenced by GetCommands().

◆ HandleUnBanAccountCommand()

static bool ban_commandscript::HandleUnBanAccountCommand ( ChatHandler handler,
char const *  args 
)
inlinestatic
654 {
655 return HandleUnBanHelper(BAN_ACCOUNT, args, handler);
656 }

References BAN_ACCOUNT, and HandleUnBanHelper().

Referenced by GetCommands().

◆ HandleUnBanCharacterCommand()

static bool ban_commandscript::HandleUnBanCharacterCommand ( ChatHandler handler,
char const *  args 
)
inlinestatic
659 {
660 if (!*args)
661 return false;
662
663 char* nameStr = strtok((char*)args, " ");
664 if (!nameStr)
665 return false;
666
667 std::string CharacterName = nameStr;
668
669 if (!normalizePlayerName(CharacterName))
670 {
672 return false;
673 }
674
675 if (!sBan->RemoveBanCharacter(CharacterName))
676 {
678 return false;
679 }
680
681 return true;
682 }

References LANG_PLAYER_NOT_FOUND, normalizePlayerName(), sBan, and ChatHandler::SendErrorMessage().

Referenced by GetCommands().

◆ HandleUnBanHelper()

static bool ban_commandscript::HandleUnBanHelper ( BanMode  mode,
char const *  args,
ChatHandler handler 
)
inlinestatic
695 {
696 if (!*args)
697 return false;
698
699 char* nameOrIPStr = strtok((char*)args, " ");
700 if (!nameOrIPStr)
701 return false;
702
703 std::string nameOrIP = nameOrIPStr;
704
705 switch (mode)
706 {
707 case BAN_ACCOUNT:
708 if (!Utf8ToUpperOnlyLatin(nameOrIP))
709 {
710 handler->SendErrorMessage(LANG_ACCOUNT_NOT_EXIST, nameOrIP);
711 return false;
712 }
713 break;
714 case BAN_CHARACTER:
715 if (!normalizePlayerName(nameOrIP))
716 {
718 return false;
719 }
720 break;
721 case BAN_IP:
722 if (!IsIPAddress(nameOrIP.c_str()))
723 return false;
724 break;
725 }
726
727 switch (mode)
728 {
729 case BAN_ACCOUNT:
730 if (sBan->RemoveBanAccount(nameOrIP))
731 handler->PSendSysMessage(LANG_UNBAN_UNBANNED, nameOrIP);
732 else
733 handler->PSendSysMessage(LANG_UNBAN_ERROR, nameOrIP);
734 break;
735 case BAN_CHARACTER:
736 if (sBan->RemoveBanAccountByPlayerName(nameOrIP))
737 handler->PSendSysMessage(LANG_UNBAN_UNBANNED, nameOrIP);
738 else
739 handler->PSendSysMessage(LANG_UNBAN_ERROR, nameOrIP);
740 break;
741 case BAN_IP:
742 if (sBan->RemoveBanIP(nameOrIP))
743 handler->PSendSysMessage(LANG_UNBAN_UNBANNED, nameOrIP);
744 else
745 handler->PSendSysMessage(LANG_UNBAN_ERROR, nameOrIP);
746 break;
747 default:
748 break;
749 }
750
751 return true;
752 }
@ LANG_UNBAN_UNBANNED
Definition Language.h:440
@ LANG_UNBAN_ERROR
Definition Language.h:441

References BAN_ACCOUNT, BAN_CHARACTER, BAN_IP, IsIPAddress(), LANG_ACCOUNT_NOT_EXIST, LANG_PLAYER_NOT_FOUND, LANG_UNBAN_ERROR, LANG_UNBAN_UNBANNED, normalizePlayerName(), ChatHandler::PSendSysMessage(), sBan, ChatHandler::SendErrorMessage(), and Utf8ToUpperOnlyLatin().

Referenced by HandleUnBanAccountByCharCommand(), HandleUnBanAccountCommand(), and HandleUnBanIPCommand().

◆ HandleUnBanIPCommand()

static bool ban_commandscript::HandleUnBanIPCommand ( ChatHandler handler,
char const *  args 
)
inlinestatic
690 {
691 return HandleUnBanHelper(BAN_IP, args, handler);
692 }

References BAN_IP, and HandleUnBanHelper().

Referenced by GetCommands().


The documentation for this class was generated from the following file: