AzerothCore 3.3.5a
OpenSource WoW Emulator
Loading...
Searching...
No Matches
ban_commandscript Class Reference
Inheritance diagram for ban_commandscript:
CommandScript ScriptObject

Public Member Functions

 ban_commandscript ()
 
ChatCommandTable GetCommands () const override
 
virtual std::vector< Acore::ChatCommands::ChatCommandBuilderGetCommands () const =0
 
- Public Member Functions inherited from ScriptObject
virtual bool IsDatabaseBound () const
 
virtual bool isAfterLoadScript () const
 
virtual void checkValidity ()
 
const std::string & GetName () const
 

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)
 
virtual ~ScriptObject ()=default
 

Detailed Description

Constructor & Destructor Documentation

◆ ban_commandscript()

ban_commandscript::ban_commandscript ( )
inline
53: CommandScript("ban_commandscript") { }
Definition: ScriptMgr.h:850

Member Function Documentation

◆ GetCommands()

ChatCommandTable ban_commandscript::GetCommands ( ) const
inlineoverridevirtual

Implements CommandScript.

56 {
57 static ChatCommandTable unbanCommandTable =
58 {
59 { "account", SEC_ADMINISTRATOR, true, &HandleUnBanAccountCommand, "" },
60 { "character", SEC_ADMINISTRATOR, true, &HandleUnBanCharacterCommand, "" },
61 { "playeraccount", SEC_ADMINISTRATOR, true, &HandleUnBanAccountByCharCommand, "" },
62 { "ip", SEC_ADMINISTRATOR, true, &HandleUnBanIPCommand, "" }
63 };
64
65 static ChatCommandTable banlistCommandTable =
66 {
67 { "account", SEC_GAMEMASTER, true, &HandleBanListAccountCommand, "" },
68 { "character", SEC_GAMEMASTER, true, &HandleBanListCharacterCommand, "" },
69 { "ip", SEC_GAMEMASTER, true, &HandleBanListIPCommand, "" }
70 };
71
72 static ChatCommandTable baninfoCommandTable =
73 {
74 { "account", SEC_GAMEMASTER, true, &HandleBanInfoAccountCommand, "" },
75 { "character", SEC_GAMEMASTER, true, &HandleBanInfoCharacterCommand, "" },
76 { "ip", SEC_GAMEMASTER, true, &HandleBanInfoIPCommand, "" }
77 };
78
79 static ChatCommandTable banCommandTable =
80 {
81 { "account", SEC_GAMEMASTER, true, &HandleBanAccountCommand, "" },
82 { "character", SEC_GAMEMASTER, true, &HandleBanCharacterCommand, "" },
83 { "playeraccount", SEC_GAMEMASTER, true, &HandleBanAccountByCharCommand, "" },
84 { "ip", SEC_GAMEMASTER, true, &HandleBanIPCommand, "" }
85 };
86
87 static ChatCommandTable commandTable =
88 {
89 { "ban", SEC_GAMEMASTER, true, nullptr, "", banCommandTable },
90 { "baninfo", SEC_GAMEMASTER, true, nullptr, "", baninfoCommandTable },
91 { "banlist", SEC_GAMEMASTER, true, nullptr, "", banlistCommandTable },
92 { "unban", SEC_ADMINISTRATOR, true, nullptr, "", unbanCommandTable }
93 };
94
95 return commandTable;
96 }
@ SEC_ADMINISTRATOR
Definition: Common.h:69
@ SEC_GAMEMASTER
Definition: Common.h:68
std::vector< ChatCommandBuilder > ChatCommandTable
Definition: ChatCommand.h:50
static bool HandleBanAccountByCharCommand(ChatHandler *handler, char const *args)
Definition: cs_ban.cpp:156
static bool HandleUnBanIPCommand(ChatHandler *handler, char const *args)
Definition: cs_ban.cpp:704
static bool HandleUnBanAccountByCharCommand(ChatHandler *handler, char const *args)
Definition: cs_ban.cpp:699
static bool HandleBanInfoAccountCommand(ChatHandler *handler, char const *args)
Definition: cs_ban.cpp:266
static bool HandleBanListIPCommand(ChatHandler *handler, char const *args)
Definition: cs_ban.cpp:594
static bool HandleBanIPCommand(ChatHandler *handler, char const *args)
Definition: cs_ban.cpp:161
static bool HandleBanListCharacterCommand(ChatHandler *handler, char const *args)
Definition: cs_ban.cpp:511
static bool HandleBanInfoIPCommand(ChatHandler *handler, char const *args)
Definition: cs_ban.cpp:368
static bool HandleBanListAccountCommand(ChatHandler *handler, char const *args)
Definition: cs_ban.cpp:406
static bool HandleBanCharacterCommand(ChatHandler *handler, char const *args)
Definition: cs_ban.cpp:103
static bool HandleBanInfoCharacterCommand(ChatHandler *handler, char const *args)
Definition: cs_ban.cpp:320
static bool HandleUnBanAccountCommand(ChatHandler *handler, char const *args)
Definition: cs_ban.cpp:666
static bool HandleBanAccountCommand(ChatHandler *handler, char const *args)
Definition: cs_ban.cpp:98
static bool HandleUnBanCharacterCommand(ChatHandler *handler, char const *args)
Definition: cs_ban.cpp:671

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
157 {
158 return HandleBanHelper(BAN_CHARACTER, args, handler);
159 }
@ BAN_CHARACTER
Definition: cs_ban.cpp:40
static bool HandleBanHelper(BanMode mode, char const *args, ChatHandler *handler)
Definition: cs_ban.cpp:166

References BAN_CHARACTER, and HandleBanHelper().

Referenced by GetCommands().

◆ HandleBanAccountCommand()

static bool ban_commandscript::HandleBanAccountCommand ( ChatHandler handler,
char const *  args 
)
inlinestatic
99 {
100 return HandleBanHelper(BAN_ACCOUNT, args, handler);
101 }
@ BAN_ACCOUNT
Definition: cs_ban.cpp:39

References BAN_ACCOUNT, and HandleBanHelper().

Referenced by GetCommands().

◆ HandleBanCharacterCommand()

static bool ban_commandscript::HandleBanCharacterCommand ( ChatHandler handler,
char const *  args 
)
inlinestatic
104 {
105 if (!*args)
106 return false;
107
108 char* nameStr = strtok((char*)args, " ");
109 if (!nameStr)
110 return false;
111
112 std::string name = nameStr;
113
114 char* durationStr = strtok(nullptr, " ");
115 if (!durationStr || !atoi(durationStr))
116 return false;
117
118 char* reasonStr = strtok(nullptr, "");
119 if (!reasonStr)
120 return false;
121
122 if (!normalizePlayerName(name))
123 {
125 handler->SetSentErrorMessage(true);
126 return false;
127 }
128
129 switch (sBan->BanCharacter(name, durationStr, reasonStr, handler->GetSession() ? handler->GetSession()->GetPlayerName() : ""))
130 {
131 case BAN_SUCCESS:
132 if (atoi(durationStr) > 0)
133 {
134 if (!sWorld->getBoolConfig(CONFIG_SHOW_BAN_IN_WORLD))
135 handler->PSendSysMessage(LANG_BAN_YOUBANNED, name.c_str(), secsToTimeString(TimeStringToSecs(durationStr), true).c_str(), reasonStr);
136 }
137 else
138 {
139 if (!sWorld->getBoolConfig(CONFIG_SHOW_BAN_IN_WORLD))
140 handler->PSendSysMessage(LANG_BAN_YOUPERMBANNED, name.c_str(), reasonStr);
141 }
142 break;
143 case BAN_NOTFOUND:
144 {
145 handler->PSendSysMessage(LANG_BAN_NOTFOUND, "character", name.c_str());
146 handler->SetSentErrorMessage(true);
147 return false;
148 }
149 default:
150 break;
151 }
152
153 return true;
154 }
std::string secsToTimeString(uint64 timeInSecs, bool shortText)
Definition: Util.cpp:74
uint32 TimeStringToSecs(const std::string &timestring)
Definition: Util.cpp:164
bool normalizePlayerName(std::string &name)
Definition: ObjectMgr.cpp:264
@ BAN_NOTFOUND
Definition: BanMgr.h:28
@ BAN_SUCCESS
Definition: BanMgr.h:26
#define sBan
Definition: BanMgr.h:48
@ LANG_BAN_NOTFOUND
Definition: Language.h:420
@ LANG_BAN_YOUPERMBANNED
Definition: Language.h:419
@ LANG_BAN_YOUBANNED
Definition: Language.h:418
@ LANG_PLAYER_NOT_FOUND
Definition: Language.h:522
@ CONFIG_SHOW_BAN_IN_WORLD
Definition: IWorld.h:137
#define sWorld
Definition: World.h:451
WorldSession * GetSession()
Definition: Chat.h:122
void SetSentErrorMessage(bool val)
Definition: Chat.h:118
void PSendSysMessage(char const *fmt, Args &&... args)
Definition: Chat.h:60
virtual void SendSysMessage(std::string_view str, bool escapeCharacters=false)
Definition: Chat.cpp:103
std::string const & GetPlayerName() const
Definition: WorldSession.cpp:179

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::SendSysMessage(), ChatHandler::SetSentErrorMessage(), sWorld, and TimeStringToSecs().

Referenced by GetCommands().

◆ HandleBanHelper()

static bool ban_commandscript::HandleBanHelper ( BanMode  mode,
char const *  args,
ChatHandler handler 
)
inlinestatic
167 {
168 if (!*args)
169 return false;
170
171 char* cnameOrIP = strtok((char*)args, " ");
172 if (!cnameOrIP)
173 return false;
174
175 std::string nameOrIP = cnameOrIP;
176
177 char* durationStr = strtok(nullptr, " ");
178 if (!durationStr || !atoi(durationStr))
179 return false;
180
181 char* reasonStr = strtok(nullptr, "");
182 if (!reasonStr)
183 return false;
184
185 switch (mode)
186 {
187 case BAN_ACCOUNT:
188 if (!Utf8ToUpperOnlyLatin(nameOrIP))
189 {
190 handler->PSendSysMessage(LANG_ACCOUNT_NOT_EXIST, nameOrIP.c_str());
191 handler->SetSentErrorMessage(true);
192 return false;
193 }
194 break;
195 case BAN_CHARACTER:
196 if (!normalizePlayerName(nameOrIP))
197 {
199 handler->SetSentErrorMessage(true);
200 return false;
201 }
202 break;
203 case BAN_IP:
204 if (!IsIPAddress(nameOrIP.c_str()))
205 return false;
206 break;
207 }
208
209 BanReturn banReturn;
210
211 switch (mode)
212 {
213 case BAN_ACCOUNT:
214 banReturn = sBan->BanAccount(nameOrIP, durationStr, reasonStr, handler->GetSession() ? handler->GetSession()->GetPlayerName() : "");
215 break;
216 case BAN_CHARACTER:
217 banReturn = sBan->BanAccountByPlayerName(nameOrIP, durationStr, reasonStr, handler->GetSession() ? handler->GetSession()->GetPlayerName() : "");
218 break;
219 case BAN_IP:
220 default:
221 banReturn = sBan->BanIP(nameOrIP, durationStr, reasonStr, handler->GetSession() ? handler->GetSession()->GetPlayerName() : "");
222 break;
223 }
224
225 switch (banReturn)
226 {
227 case BAN_SUCCESS:
228 if (atoi(durationStr) > 0)
229 {
230 if (!sWorld->getBoolConfig(CONFIG_SHOW_BAN_IN_WORLD))
231 handler->PSendSysMessage(LANG_BAN_YOUBANNED, nameOrIP.c_str(), secsToTimeString(TimeStringToSecs(durationStr), true).c_str(), reasonStr);
232 }
233 else
234 {
235 if (!sWorld->getBoolConfig(CONFIG_SHOW_BAN_IN_WORLD))
236 handler->PSendSysMessage(LANG_BAN_YOUPERMBANNED, nameOrIP.c_str(), reasonStr);
237 }
238 break;
239 case BAN_SYNTAX_ERROR:
240 return false;
241 case BAN_NOTFOUND:
242 switch (mode)
243 {
244 default:
245 handler->PSendSysMessage(LANG_BAN_NOTFOUND, "account", nameOrIP.c_str());
246 break;
247 case BAN_CHARACTER:
248 handler->PSendSysMessage(LANG_BAN_NOTFOUND, "character", nameOrIP.c_str());
249 break;
250 case BAN_IP:
251 handler->PSendSysMessage(LANG_BAN_NOTFOUND, "ip", nameOrIP.c_str());
252 break;
253 }
254 handler->SetSentErrorMessage(true);
255 return false;
257 handler->PSendSysMessage("Unsuccessful! A longer ban is already present on this account!");
258 break;
259 default:
260 break;
261 }
262
263 return true;
264 }
bool Utf8ToUpperOnlyLatin(std::string &utf8String)
Definition: Util.cpp:528
bool IsIPAddress(char const *ipaddress)
Check if the string is a valid ip address representation.
Definition: Util.cpp:206
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:425
@ BAN_IP
Definition: cs_ban.cpp:41

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::SendSysMessage(), ChatHandler::SetSentErrorMessage(), sWorld, TimeStringToSecs(), and Utf8ToUpperOnlyLatin().

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

◆ HandleBanInfoAccountCommand()

static bool ban_commandscript::HandleBanInfoAccountCommand ( ChatHandler handler,
char const *  args 
)
inlinestatic
267 {
268 if (!*args)
269 return false;
270
271 char* nameStr = strtok((char*)args, "");
272 if (!nameStr)
273 return false;
274
275 std::string accountName = nameStr;
276 if (!Utf8ToUpperOnlyLatin(accountName))
277 {
278 handler->PSendSysMessage(LANG_ACCOUNT_NOT_EXIST, accountName.c_str());
279 handler->SetSentErrorMessage(true);
280 return false;
281 }
282
283 uint32 accountId = AccountMgr::GetId(accountName);
284 if (!accountId)
285 {
286 handler->PSendSysMessage(LANG_ACCOUNT_NOT_EXIST, accountName.c_str());
287 return true;
288 }
289
290 return HandleBanInfoHelper(accountId, accountName.c_str(), handler);
291 }
std::uint32_t uint32
Definition: Define.h:108
uint32 GetId(std::string const &username)
Definition: AccountMgr.cpp:200
static bool HandleBanInfoHelper(uint32 accountId, char const *accountName, ChatHandler *handler)
Definition: cs_ban.cpp:293

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

Referenced by GetCommands().

◆ HandleBanInfoCharacterCommand()

static bool ban_commandscript::HandleBanInfoCharacterCommand ( ChatHandler handler,
char const *  args 
)
inlinestatic
321 {
322 if (!*args)
323 return false;
324
325 Player* target = ObjectAccessor::FindPlayerByName(args, false);
326 ObjectGuid targetGuid;
327 std::string name(args);
328
329 if (!target)
330 {
331 targetGuid = sCharacterCache->GetCharacterGuidByName(name);
332 if (!targetGuid)
333 {
335 return false;
336 }
337 }
338 else
339 targetGuid = target->GetGUID();
340
342 stmt->SetData(0, targetGuid.GetCounter());
343
344 PreparedQueryResult result = CharacterDatabase.Query(stmt);
345 if (!result)
346 {
347 handler->PSendSysMessage(LANG_CHAR_NOT_BANNED, name.c_str());
348 return true;
349 }
350
351 handler->PSendSysMessage(LANG_BANINFO_BANHISTORY, name.c_str());
352 do
353 {
354 Field* fields = result->Fetch();
355 time_t unbanDate = time_t(fields[3].Get<uint32>());
356 bool active = false;
357 if (fields[2].Get<uint8>() && (!fields[1].Get<uint32>() || unbanDate >= GameTime::GetGameTime().count()))
358 active = true;
359 bool permanent = (fields[1].Get<uint32>() == uint32(0));
360 std::string banTime = permanent ? handler->GetAcoreString(LANG_BANINFO_INFINITE) : secsToTimeString(fields[1].Get<uint64>(), true);
362 fields[0].Get<std::string>().c_str(), banTime.c_str(), active ? handler->GetAcoreString(LANG_YES) : handler->GetAcoreString(LANG_NO), fields[4].Get<std::string>().c_str(), fields[5].Get<std::string>().c_str());
363 } while (result->NextRow());
364
365 return true;
366 }
DatabaseWorkerPool< CharacterDatabaseConnection > CharacterDatabase
Accessor to the character database.
Definition: DatabaseEnv.cpp:21
std::shared_ptr< PreparedResultSet > PreparedQueryResult
Definition: DatabaseEnvFwd.h:46
@ CHAR_SEL_BANINFO
Definition: CharacterDatabase.h:44
#define sCharacterCache
Definition: CharacterCache.h:83
@ LANG_YES
Definition: Language.h:434
@ LANG_BANINFO_INFINITE
Definition: Language.h:432
@ LANG_BANINFO_NOCHARACTER
Definition: Language.h:427
@ LANG_BANINFO_BANHISTORY
Definition: Language.h:430
@ LANG_CHAR_NOT_BANNED
Definition: Language.h:898
@ LANG_NO
Definition: Language.h:435
@ LANG_BANINFO_HISTORYENTRY
Definition: Language.h:431
Player * FindPlayerByName(std::string const &name, bool checkInWorld=true)
Definition: ObjectAccessor.cpp:276
Seconds GetGameTime()
Definition: GameTime.cpp:38
Definition: PreparedStatement.h:158
Class used to access individual fields of database query result.
Definition: Field.h:99
std::enable_if_t< std::is_arithmetic_v< T >, T > Get() const
Definition: Field.h:113
Acore::Types::is_default< T > SetData(const uint8 index, T value)
Definition: PreparedStatement.h:78
virtual char const * GetAcoreString(uint32 entry) const
Definition: Chat.cpp:42
static ObjectGuid GetGUID(Object const *o)
Definition: Object.h:106
Definition: ObjectGuid.h:120
LowType GetCounter() const
Definition: ObjectGuid.h:147
Definition: Player.h:1046

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
294 {
295 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);
296 if (!result)
297 {
298 handler->PSendSysMessage(LANG_BANINFO_NOACCOUNTBAN, accountName);
299 return true;
300 }
301
302 handler->PSendSysMessage(LANG_BANINFO_BANHISTORY, accountName);
303 do
304 {
305 Field* fields = result->Fetch();
306
307 time_t unbanDate = time_t(fields[3].Get<uint32>());
308 bool active = false;
309 if (fields[2].Get<bool>() && (fields[1].Get<uint64>() == uint64(0) || unbanDate >= GameTime::GetGameTime().count()))
310 active = true;
311 bool permanent = (fields[1].Get<uint64>() == uint64(0));
312 std::string banTime = permanent ? handler->GetAcoreString(LANG_BANINFO_INFINITE) : secsToTimeString(fields[1].Get<uint64>(), true);
314 fields[0].Get<std::string>().c_str(), banTime.c_str(), active ? handler->GetAcoreString(LANG_YES) : handler->GetAcoreString(LANG_NO), fields[4].Get<std::string>().c_str(), fields[5].Get<std::string>().c_str());
315 } while (result->NextRow());
316
317 return true;
318 }
std::uint64_t uint64
Definition: Define.h:107
DatabaseWorkerPool< LoginDatabaseConnection > LoginDatabase
Accessor to the realm/login database.
Definition: DatabaseEnv.cpp:22
std::shared_ptr< ResultSet > QueryResult
Definition: DatabaseEnvFwd.h:28
@ LANG_BANINFO_NOACCOUNTBAN
Definition: Language.h:429

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
369 {
370 if (!*args)
371 return false;
372
373 char* ipStr = strtok((char*)args, "");
374 if (!ipStr)
375 return false;
376
377 if (!IsIPAddress(ipStr))
378 return false;
379
380 std::string IP = ipStr;
381
382 LoginDatabase.EscapeString(IP);
383 QueryResult result = LoginDatabase.Query("\
384 SELECT \
385 ip, FROM_UNIXTIME(bandate, '%Y-%m-%d %H:%i:%s'), FROM_UNIXTIME(unbandate, '%Y-%m-%d %H:%i:%s'), \
386 IF (unbandate > UNIX_TIMESTAMP(), unbandate - UNIX_TIMESTAMP(), 0) AS timeRemaining, \
387 banreason, bannedby, unbandate - bandate = 0 AS permanent \
388 FROM ip_banned \
389 WHERE ip = '{}' \
390 ", IP);
391 if (!result)
392 {
394 return true;
395 }
396
397 Field* fields = result->Fetch();
398 bool permanent = fields[6].Get<uint64>() == 1;
400 fields[0].Get<std::string>().c_str(), fields[1].Get<std::string>().c_str(), permanent ? handler->GetAcoreString(LANG_BANINFO_NEVER) : fields[2].Get<std::string>().c_str(),
401 permanent ? handler->GetAcoreString(LANG_BANINFO_INFINITE) : secsToTimeString(fields[3].Get<uint64>(), true).c_str(), fields[4].Get<std::string>().c_str(), fields[5].Get<std::string>().c_str());
402
403 return true;
404 }
@ LANG_BANINFO_IPENTRY
Definition: Language.h:436
@ LANG_BANINFO_NEVER
Definition: Language.h:433
@ LANG_BANINFO_NOIP
Definition: Language.h:428

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
162 {
163 return HandleBanHelper(BAN_IP, args, handler);
164 }

References BAN_IP, and HandleBanHelper().

Referenced by GetCommands().

◆ HandleBanListAccountCommand()

static bool ban_commandscript::HandleBanListAccountCommand ( ChatHandler handler,
char const *  args 
)
inlinestatic
407 {
409 LoginDatabase.Execute(stmt);
410
411 char* filterStr = strtok((char*)args, " ");
412 std::string filter = filterStr ? filterStr : "";
413
414 PreparedQueryResult result;
415
416 if (filter.empty())
417 {
419 result = LoginDatabase.Query(stmt2);
420 }
421 else
422 {
424 stmt2->SetData(0, filter);
425 result = LoginDatabase.Query(stmt2);
426 }
427
428 if (!result)
429 {
431 return true;
432 }
433
434 return HandleBanListHelper(result, handler);
435 }
@ 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
@ LANG_BANLIST_NOACCOUNT
Definition: Language.h:439
static bool HandleBanListHelper(PreparedQueryResult result, ChatHandler *handler)
Definition: cs_ban.cpp:437

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
512 {
513 if (!*args)
514 return false;
515
516 char* filterStr = strtok((char*)args, " ");
517 if (!filterStr)
518 return false;
519
520 std::string filter(filterStr);
522 stmt->SetData(0, filter);
523 PreparedQueryResult result = CharacterDatabase.Query(stmt);
524 if (!result)
525 {
527 return true;
528 }
529
531
532 // Chat short output
533 if (handler->GetSession())
534 {
535 do
536 {
537 Field* fields = result->Fetch();
539 stmt2->SetData(0, fields[0].Get<uint32>());
540
541 PreparedQueryResult banResult = CharacterDatabase.Query(stmt2);
542 if (banResult)
543 handler->PSendSysMessage("%s", (*banResult)[0].Get<std::string>().c_str());
544 } while (result->NextRow());
545 }
546 // Console wide output
547 else
548 {
550 handler->SendSysMessage(" =============================================================================== ");
552 do
553 {
554 handler->SendSysMessage("-------------------------------------------------------------------------------");
555
556 Field* fields = result->Fetch();
557
558 std::string char_name = fields[1].Get<std::string>();
559
561 stmt2->SetData(0, fields[0].Get<uint32>());
562
563 PreparedQueryResult banInfo = CharacterDatabase.Query(stmt2);
564 if (banInfo)
565 {
566 Field* banFields = banInfo->Fetch();
567 do
568 {
569 tm tmBan = Acore::Time::TimeBreakdown(banFields[0].Get<uint32>());
570
571 if (banFields[0].Get<uint32>() == banFields[1].Get<uint32>())
572 {
573 handler->PSendSysMessage("|%-15.15s|%02d-%02d-%02d %02d:%02d| permanent |%-15.15s|%-15.15s|",
574 char_name.c_str(), tmBan.tm_year % 100, tmBan.tm_mon + 1, tmBan.tm_mday, tmBan.tm_hour, tmBan.tm_min,
575 banFields[2].Get<std::string>().c_str(), banFields[3].Get<std::string>().c_str());
576 }
577 else
578 {
579 tm tmUnban = Acore::Time::TimeBreakdown(banFields[1].Get<uint32>());
580 handler->PSendSysMessage("|%-15.15s|%02d-%02d-%02d %02d:%02d|%02d-%02d-%02d %02d:%02d|%-15.15s|%-15.15s|",
581 char_name.c_str(), tmBan.tm_year % 100, tmBan.tm_mon + 1, tmBan.tm_mday, tmBan.tm_hour, tmBan.tm_min,
582 tmUnban.tm_year % 100, tmUnban.tm_mon + 1, tmUnban.tm_mday, tmUnban.tm_hour, tmUnban.tm_min,
583 banFields[2].Get<std::string>().c_str(), banFields[3].Get<std::string>().c_str());
584 }
585 } while (banInfo->NextRow());
586 }
587 } while (result->NextRow());
588 handler->SendSysMessage(" =============================================================================== ");
589 }
590
591 return true;
592 }
@ 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:895
@ LANG_BANLIST_MATCHINGCHARACTER
Definition: Language.h:893
@ LANG_BANLIST_NOCHARACTER
Definition: Language.h:440
@ LANG_BANLIST_CHARACTERS
Definition: Language.h:894
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
438 {
440
441 // Chat short output
442 if (handler->GetSession())
443 {
444 do
445 {
446 Field* fields = result->Fetch();
447 uint32 accountid = fields[0].Get<uint32>();
448
449 QueryResult banResult = LoginDatabase.Query("SELECT account.username FROM account, account_banned WHERE account_banned.id='{}' AND account_banned.id=account.id", accountid);
450 if (banResult)
451 {
452 Field* fields2 = banResult->Fetch();
453 handler->PSendSysMessage("%s", fields2[0].Get<std::string>().c_str());
454 }
455 } while (result->NextRow());
456 }
457 // Console wide output
458 else
459 {
461 handler->SendSysMessage(" ===============================================================================");
463 do
464 {
465 handler->SendSysMessage("-------------------------------------------------------------------------------");
466 Field* fields = result->Fetch();
467 uint32 accountId = fields[0].Get<uint32>();
468
469 std::string accountName;
470
471 // "account" case, name can be get in same query
472 if (result->GetFieldCount() > 1)
473 accountName = fields[1].Get<std::string>();
474 // "character" case, name need extract from another DB
475 else
476 AccountMgr::GetName(accountId, accountName);
477
478 // No SQL injection. id is uint32.
479 QueryResult banInfo = LoginDatabase.Query("SELECT bandate, unbandate, bannedby, banreason FROM account_banned WHERE id = {} ORDER BY unbandate", accountId);
480 if (banInfo)
481 {
482 Field* fields2 = banInfo->Fetch();
483 do
484 {
485 tm tmBan = Acore::Time::TimeBreakdown(fields2[0].Get<uint32>());
486
487 if (fields2[0].Get<uint32>() == fields2[1].Get<uint32>())
488 {
489 handler->PSendSysMessage("|%-15.15s|%02d-%02d-%02d %02d:%02d| permanent |%-15.15s|%-15.15s|",
490 accountName.c_str(), tmBan.tm_year % 100, tmBan.tm_mon + 1, tmBan.tm_mday, tmBan.tm_hour, tmBan.tm_min,
491 fields2[2].Get<std::string>().c_str(), fields2[3].Get<std::string>().c_str());
492 }
493 else
494 {
495 tm tmUnban = Acore::Time::TimeBreakdown(fields2[1].Get<uint32>());
496 handler->PSendSysMessage("|%-15.15s|%02d-%02d-%02d %02d:%02d|%02d-%02d-%02d %02d:%02d|%-15.15s|%-15.15s|",
497 accountName.c_str(), tmBan.tm_year % 100, tmBan.tm_mon + 1, tmBan.tm_mday, tmBan.tm_hour, tmBan.tm_min,
498 tmUnban.tm_year % 100, tmUnban.tm_mon + 1, tmUnban.tm_mday, tmUnban.tm_hour, tmUnban.tm_min,
499 fields2[2].Get<std::string>().c_str(), fields2[3].Get<std::string>().c_str());
500 }
501 } while (banInfo->NextRow());
502 }
503 } while (result->NextRow());
504
505 handler->SendSysMessage(" ===============================================================================");
506 }
507
508 return true;
509 }
@ LANG_BANLIST_MATCHINGACCOUNT
Definition: Language.h:442
@ LANG_BANLIST_ACCOUNTS_HEADER
Definition: Language.h:639
@ LANG_BANLIST_ACCOUNTS
Definition: Language.h:638
bool GetName(uint32 accountId, std::string &name)
Definition: AccountMgr.cpp:228

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
595 {
597 LoginDatabase.Execute(stmt);
598
599 char* filterStr = strtok((char*)args, " ");
600 std::string filter = filterStr ? filterStr : "";
601 LoginDatabase.EscapeString(filter);
602
603 PreparedQueryResult result;
604
605 if (filter.empty())
606 {
608 result = LoginDatabase.Query(stmt2);
609 }
610 else
611 {
613 stmt2->SetData(0, filter);
614 result = LoginDatabase.Query(stmt2);
615 }
616
617 if (!result)
618 {
620 return true;
621 }
622
624 // Chat short output
625 if (handler->GetSession())
626 {
627 do
628 {
629 Field* fields = result->Fetch();
630 handler->PSendSysMessage("%s", fields[0].Get<std::string>().c_str());
631 } while (result->NextRow());
632 }
633 // Console wide output
634 else
635 {
637 handler->SendSysMessage(" ===============================================================================");
639 do
640 {
641 handler->SendSysMessage("-------------------------------------------------------------------------------");
642 Field* fields = result->Fetch();
643 tm tmBan = Acore::Time::TimeBreakdown(fields[1].Get<uint32>());
644 if (fields[1].Get<uint32>() == fields[2].Get<uint32>())
645 {
646 handler->PSendSysMessage("|%-15.15s|%02d-%02d-%02d %02d:%02d| permanent |%-15.15s|%-15.15s|",
647 fields[0].Get<std::string>().c_str(), tmBan.tm_year % 100, tmBan.tm_mon + 1, tmBan.tm_mday, tmBan.tm_hour, tmBan.tm_min,
648 fields[3].Get<std::string>().c_str(), fields[4].Get<std::string>().c_str());
649 }
650 else
651 {
652 tm tmUnban = Acore::Time::TimeBreakdown(fields[2].Get<uint32>());
653 handler->PSendSysMessage("|%-15.15s|%02d-%02d-%02d %02d:%02d|%02d-%02d-%02d %02d:%02d|%-15.15s|%-15.15s|",
654 fields[0].Get<std::string>().c_str(), tmBan.tm_year % 100, tmBan.tm_mon + 1, tmBan.tm_mday, tmBan.tm_hour, tmBan.tm_min,
655 tmUnban.tm_year % 100, tmUnban.tm_mon + 1, tmUnban.tm_mday, tmUnban.tm_hour, tmUnban.tm_min,
656 fields[3].Get<std::string>().c_str(), fields[4].Get<std::string>().c_str());
657 }
658 } while (result->NextRow());
659
660 handler->SendSysMessage(" ===============================================================================");
661 }
662
663 return true;
664 }
@ LOGIN_SEL_IP_BANNED_BY_IP
Definition: LoginDatabase.h:58
@ LOGIN_SEL_IP_BANNED_ALL
Definition: LoginDatabase.h:57
@ LANG_BANLIST_IPS_HEADER
Definition: Language.h:641
@ LANG_BANLIST_MATCHINGIP
Definition: Language.h:441
@ LANG_BANLIST_NOIP
Definition: Language.h:438
@ LANG_BANLIST_IPS
Definition: Language.h:640

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
700 {
701 return HandleUnBanHelper(BAN_CHARACTER, args, handler);
702 }
static bool HandleUnBanHelper(BanMode mode, char const *args, ChatHandler *handler)
Definition: cs_ban.cpp:709

References BAN_CHARACTER, and HandleUnBanHelper().

Referenced by GetCommands().

◆ HandleUnBanAccountCommand()

static bool ban_commandscript::HandleUnBanAccountCommand ( ChatHandler handler,
char const *  args 
)
inlinestatic
667 {
668 return HandleUnBanHelper(BAN_ACCOUNT, args, handler);
669 }

References BAN_ACCOUNT, and HandleUnBanHelper().

Referenced by GetCommands().

◆ HandleUnBanCharacterCommand()

static bool ban_commandscript::HandleUnBanCharacterCommand ( ChatHandler handler,
char const *  args 
)
inlinestatic
672 {
673 if (!*args)
674 return false;
675
676 char* nameStr = strtok((char*)args, " ");
677 if (!nameStr)
678 return false;
679
680 std::string CharacterName = nameStr;
681
682 if (!normalizePlayerName(CharacterName))
683 {
685 handler->SetSentErrorMessage(true);
686 return false;
687 }
688
689 if (!sBan->RemoveBanCharacter(CharacterName))
690 {
692 handler->SetSentErrorMessage(true);
693 return false;
694 }
695
696 return true;
697 }

References LANG_PLAYER_NOT_FOUND, normalizePlayerName(), sBan, ChatHandler::SendSysMessage(), and ChatHandler::SetSentErrorMessage().

Referenced by GetCommands().

◆ HandleUnBanHelper()

static bool ban_commandscript::HandleUnBanHelper ( BanMode  mode,
char const *  args,
ChatHandler handler 
)
inlinestatic
710 {
711 if (!*args)
712 return false;
713
714 char* nameOrIPStr = strtok((char*)args, " ");
715 if (!nameOrIPStr)
716 return false;
717
718 std::string nameOrIP = nameOrIPStr;
719
720 switch (mode)
721 {
722 case BAN_ACCOUNT:
723 if (!Utf8ToUpperOnlyLatin(nameOrIP))
724 {
725 handler->PSendSysMessage(LANG_ACCOUNT_NOT_EXIST, nameOrIP.c_str());
726 handler->SetSentErrorMessage(true);
727 return false;
728 }
729 break;
730 case BAN_CHARACTER:
731 if (!normalizePlayerName(nameOrIP))
732 {
734 handler->SetSentErrorMessage(true);
735 return false;
736 }
737 break;
738 case BAN_IP:
739 if (!IsIPAddress(nameOrIP.c_str()))
740 return false;
741 break;
742 }
743
744 switch (mode)
745 {
746 case BAN_ACCOUNT:
747 if (sBan->RemoveBanAccount(nameOrIP))
748 handler->PSendSysMessage(LANG_UNBAN_UNBANNED, nameOrIP.c_str());
749 else
750 handler->PSendSysMessage(LANG_UNBAN_ERROR, nameOrIP.c_str());
751 break;
752 case BAN_CHARACTER:
753 if (sBan->RemoveBanAccountByPlayerName(nameOrIP))
754 handler->PSendSysMessage(LANG_UNBAN_UNBANNED, nameOrIP.c_str());
755 else
756 handler->PSendSysMessage(LANG_UNBAN_ERROR, nameOrIP.c_str());
757 break;
758 case BAN_IP:
759 if (sBan->RemoveBanIP(nameOrIP))
760 handler->PSendSysMessage(LANG_UNBAN_UNBANNED, nameOrIP.c_str());
761 else
762 handler->PSendSysMessage(LANG_UNBAN_ERROR, nameOrIP.c_str());
763 break;
764 default:
765 break;
766 }
767
768 return true;
769 }
@ LANG_UNBAN_UNBANNED
Definition: Language.h:422
@ LANG_UNBAN_ERROR
Definition: Language.h:423

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::SendSysMessage(), ChatHandler::SetSentErrorMessage(), and Utf8ToUpperOnlyLatin().

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

◆ HandleUnBanIPCommand()

static bool ban_commandscript::HandleUnBanIPCommand ( ChatHandler handler,
char const *  args 
)
inlinestatic
705 {
706 return HandleUnBanHelper(BAN_IP, args, handler);
707 }

References BAN_IP, and HandleUnBanHelper().

Referenced by GetCommands().