// TMW-2 Script. // Author: // Jesusalva // LawnCable // Notes: // Controls `discord` table with @discord command. // Only useful for TMW2-Discord integration. - script @discord 32767,{ end; OnCall: // Anti-Flood System if (@discord) { mesc l("You already ran this command today. Please try again at a later time."), 1; close; } // Live server only if (debug || $@GM_OVERRIDE) { dispbottom l("This command cannot be used on test servers."); end; } // Bot cannot (or should not) alter staff data if (is_staff() && !is_admin()) { dispbottom l("Staff is not allowed to use this command."); end; } // Minimum account requeriments if (#REG_DATE < (gettimetick(2)+259200) && BaseLevel < 15) { dispbottom l("Your account must be at least 72 hours old or have level 15+ to use this command."); end; } // Use this instead of min acc req if desired //if (!validatepin()) // close; // Prevent reusing the command on same session @discord=1; .@link=true; // Search on cache .@key$=str(getcharid(3)); .@discord$ = htget(.discmem, .@key$, "Not found"); if (.@discord$ == "Not found") { // Only do SQL query if not in cache .@nb = query_sql("select `discord_name` from `discord` WHERE `account_id`='"+getcharid(3)+"' limit 1", .@discord$); // Override default behavior if (.@discord$ == "" || .@discord$ == "Not found") { .@discord$="Not Linked"; .@link=false; } // Add to Cache htput(.discmem, str(getcharid(3)), .@discord$); } do { mesn "Lawn Cable"; mesq l("Current linked Discord account: @@", .@discord$); next; select rif(DISCTRL < gettimeparam(GETTIME_DAYOFMONTH), l("Change Linked Discord Account")), rif(.@link, l("Disconnect")), l("Quit"); switch (@menu) { case 1: if (DISCTRL >= gettimeparam(GETTIME_DAYOFMONTH)) atcommand("@ban 7d "+strcharinfo(0)); mesc l("Please insert your Discord ID, on the following format: "), 1; mesc l("Username#0000"), 2; input .@discord$; if (.@discord$ == "") close; if (strtolower(.@discord$) == "username#0000") { break; } .@i = explode(.@d$, .@discord$, "#"); if (.@i != 2) { mesc l("Invalid Discord ID."); next; break; } if (getstrlen(.@d$[1]) != 4) { mesc l("Invalid Discord ID."); next; break; } mes ""; clear; mesc l("Linking the following Discord account:"); mesc .@discord$, 1; mesc l("Is this correct?"); if (askyesno() == ASK_NO) close; // Run SQL query (will halt execution on dupe) if (.@link) { if ($@HAS_API) { apiasync("SQL", sprintf("UPDATE `discord` SET `discord_name` = '?1', `verified` = '0', `discord_id` = '?2' WHERE `account_id`='%d'", getcharid(3))); apiasync("SAD1", .@discord$); apiasync("DISCORDID2", .@discord$); apiasync("SQLRUN", ""); } else { query_sql(sprintf("UPDATE `discord` SET `discord_name` = '%s', `verified` = '0', `discord_id` = '' WHERE `account_id`='%d'", escape_sql(.@discord$), getcharid(3))); } } else { if ($@HAS_API) { apiasync("SQL", sprintf("INSERT INTO `discord` (`discord_name`, `verified`, `discord_id`, `account_id`) VALUES ('?1', '0', '?2', '%d')", getcharid(3))); apiasync("SAD1", .@discord$); apiasync("DISCORDID2", .@discord$); apiasync("SQLRUN", ""); } else { query_sql(sprintf("INSERT INTO `discord` (`discord_name`, `verified`, `discord_id`, `account_id`) VALUES ('%s', '0', '', '%d')", escape_sql(.@discord$), getcharid(3))); } } // Encode JSON data .@p$=json_encode("name", strcharinfo(0), "accId", getcharid(3), "disc", escape_sql(.@discord$)); // Send to API and update cache api_send(API_DISCORD, .@p$); htput(.discmem, str(getcharid(3)), .@discord$); consoleinfo("%s linked discord account \"%s\".", strcharinfo(0), .@discord$); // Prevent changing for the next 3 days DISCTRL=gettimeparam(GETTIME_DAYOFMONTH)+1; mesc l("Linking requested."), 1; mesc l("This setting can only be changed every %d days.", 1), 1; break; ///////////////////////////////////////////////////////////////////// case 2: if ($@HAS_API) { apiasync("SQL", sprintf("DELETE FROM `discord` WHERE `account_id`='%d'", getcharid(3))); apiasync("SQLRUN", ""); } else { query_sql("DELETE FROM `discord` WHERE `account_id`='"+getcharid(3)+"'"); // Prevent setting a new linking right away DISCTRL=gettimeparam(GETTIME_DAYOFMONTH)+1; } .@discord$=""; // Update Cache htput(.discmem, str(getcharid(3)), ""); // TODO: Remove Adventurer role? logmes(sprintf("User %d \"%s\" unlinked Discord account!", getcharid(3), strcharinfo(0))); consoleinfo("%s removed Discord account.", strcharinfo(0)); break; } } while (@menu != 3); close; OnInit: bindatcmd "discord", "@discord::OnCall", 0, 0, 1; .discmem = htnew; end; }