[Feature] Soft Delete Bots on Character Soft Delete (#2467)

* [Feature] Soft Delete Bots on Character SoftDelete

* Moved Bot Soft Delete logic to be inline with SoftDeletes rule.

* Update from feedback

Co-authored-by: Akkadius <akkadius1@gmail.com>
This commit is contained in:
Aeadoin 2022-10-12 21:12:29 -04:00 committed by GitHub
parent 0f2da56b04
commit a9e218acfa
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -376,9 +376,10 @@ bool Database::ReserveName(uint32 account_id, char* name) {
* @param character_name * @param character_name
* @return * @return
*/ */
bool Database::DeleteCharacter(char *character_name) { bool Database::DeleteCharacter(char *character_name)
{
uint32 character_id = 0; uint32 character_id = 0;
if(!character_name || !strlen(character_name)) { if (!character_name || !strlen(character_name)) {
LogInfo("DeleteCharacter: request to delete without a name (empty char slot)"); LogInfo("DeleteCharacter: request to delete without a name (empty char slot)");
return false; return false;
} }
@ -390,14 +391,19 @@ bool Database::DeleteCharacter(char *character_name) {
} }
if (character_id <= 0) { if (character_id <= 0) {
LogError("DeleteCharacter | Invalid Character ID [{}]", character_name); LogError("[DeleteCharacter] Invalid Character ID [{}]", character_name);
return false; return false;
} }
#ifdef BOTS
query = StringFormat("DELETE FROM `guild_members` WHERE `char_id` = '%d' AND GetMobTypeById(%i) = 'C'", character_id); // note: only use of GetMobTypeById()
QueryDatabase(query);
#endif
std::string delete_type = "hard-deleted"; std::string delete_type = "hard-deleted";
if (RuleB(Character, SoftDeletes)) { if (RuleB(Character, SoftDeletes)) {
delete_type = "soft-deleted"; delete_type = "soft-deleted";
std::string query = fmt::format( query = fmt::format(
SQL( SQL(
UPDATE UPDATE
character_data character_data
@ -412,23 +418,33 @@ bool Database::DeleteCharacter(char *character_name) {
QueryDatabase(query); QueryDatabase(query);
#ifdef BOTS
query = fmt::format(
SQL(
UPDATE
bot_data
SET
name = SUBSTRING(CONCAT(name, '-deleted-', UNIX_TIMESTAMP()), 1, 64)
WHERE
owner_id = '{}'
),
character_id
);
QueryDatabase(query);
LogInfo("[DeleteCharacter] character_name [{}] ({}) bots are being [{}]", character_name, character_id, delete_type);
#endif
return true; return true;
} }
LogInfo("DeleteCharacter | Character [{}] ({}) is being [{}]", character_name, character_id, delete_type); for (const auto &iter: DatabaseSchema::GetCharacterTables()) {
for (const auto& iter : DatabaseSchema::GetCharacterTables()) {
std::string table_name = iter.first; std::string table_name = iter.first;
std::string character_id_column_name = iter.second; std::string character_id_column_name = iter.second;
QueryDatabase(fmt::format("DELETE FROM {} WHERE {} = {}", table_name, character_id_column_name, character_id)); QueryDatabase(fmt::format("DELETE FROM {} WHERE {} = {}", table_name, character_id_column_name, character_id));
} }
#ifdef BOTS LogInfo("[DeleteCharacter] character_name [{}] ({}) is being [{}]", character_name, character_id, delete_type);
query = StringFormat("DELETE FROM `guild_members` WHERE `char_id` = '%d' AND GetMobTypeById(%i) = 'C'", character_id); // note: only use of GetMobTypeById()
QueryDatabase(query);
#endif
return true; return true;
} }