// 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()) { 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("Usename#0000"), 2; input .@discord$; if (.@discord$ == "") close; mes ""; // Run SQL query (will halt execution on dupe) if (.@link) { query_sql(sprintf("UPDATE `discord` SET `discord_name` = '%s', `verified` = '0', `discord_id` = '' WHERE `account_id`='%d'", escape_sql(.@discord$), getcharid(3))); } 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", .@discord$); // Send to API and update cache api_send(API_DISCORD, .@p$); htput(.discmem, str(getcharid(3)), .@discord$); // Prevent changing for the next 3 days DISCTRL=gettimeparam(GETTIME_DAYOFMONTH)+3; mesc l("Linking requested."), 1; mesc l("This setting can only be changed every %d days.", 3), 1; break; ///////////////////////////////////////////////////////////////////// case 2: query_sql("DELETE FROM `discord` WHERE `account_id`='"+getcharid(3)+"'"); .@discord$=""; // Prevent setting a new linking right away DISCTRL=gettimeparam(GETTIME_DAYOFMONTH)+1; // Update Cache htput(.discmem, str(getcharid(3)), ""); // TODO: Remove Adventurer role? logmes(sprintf("User %d \"%s\" unlinked Discord account!", getcharid(3), strcharinfo(0))); break; } } while (@menu != 3); close; OnInit: bindatcmd "discord", "@discord::OnCall", 0, 0, 1; .discmem = htnew; end; }