admin.inc 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235
  1. /*
  2. This file adds functionality to admin commands sent
  3. via Discord, e.g !admins, !a
  4. Please continue using the format used below for each command.
  5. */
  6. /*
  7. @Author: dy1zan
  8. @Command: !a
  9. This callback is invoked whenever someone types !a in Discord.
  10. This will send an admin chat message in-game, of the message sent from Discord.
  11. */
  12. DiscordResponse:asay(data[]) {
  13. //Convert string into JSON object so we can extract data e.g sender, message
  14. new JSONNode:jsonData = json_parse_string(data);
  15. new sender[MAX_PLAYER_NAME+1], message[110];
  16. //Get the 'sender'/'message' contained within the JSON object
  17. json_get_string(jsonData, sender, sizeof sender, "sender");
  18. json_get_string(jsonData, message, sizeof message, "message");
  19. //Output the data
  20. new string[144];
  21. format(string, sizeof string, "** [Discord] %s: %s **", sender, message);
  22. printf(string);
  23. SendAdminChatMessage(0xFEB918FF, string);
  24. return 1;
  25. }
  26. /*
  27. @Author: dy1zan
  28. @Command: !admins
  29. Returns a list of online administrators to Discord (the same
  30. channel at which the !admins command was used)
  31. */
  32. DiscordResponse:stats(data[]) {
  33. new JSONNode:jsonData = json_parse_string(data);
  34. new user[MAX_PLAYER_NAME+1];
  35. json_get_string(jsonData, user, sizeof user, "user");
  36. new player;
  37. new result = sscanf(user, "u", player);
  38. if(result || !IsPlayerConnected(player)) {
  39. Discord:sendBasicRequest(DISCORD_ADMINCMDS_CHANNEL, "Player Statistics...", "That player is not connected, or is invalid.", DISCORD_COLOR_INFO);
  40. return;
  41. }
  42. printf("%d", player);
  43. ShowStatsDiscord(player);
  44. }
  45. /*
  46. Some util stuff
  47. */
  48. stock Discord:GetAdminRank(playerid) {
  49. new name[32];
  50. new rank = PlayerInfo[playerid][pAdmin];
  51. switch(rank) {
  52. case 0: name = "None";
  53. case 1: name = "Probationary Administrator";
  54. case 2: name = "Junior Administrator";
  55. case 3: name = "General Administrator";
  56. case 4 .. 1336: name = "Senior Administrator";
  57. case 1337: name = "Head Administrator";
  58. case 99999: name = "Executive Administrator";
  59. case 999999: name = "Executive Administrator";
  60. default: name = "?";
  61. }
  62. return name;
  63. }
  64. DiscordResponse:prison(data[])
  65. {
  66. new JSONNode:jsonData = json_parse_string(data),
  67. sender[128],
  68. user[MAX_PLAYER_NAME+1],
  69. ptime,
  70. reason[20],
  71. Pid,
  72. str[128]
  73. ;
  74. json_get_string(jsonData, sender, sizeof sender, "sender");
  75. json_get_string(jsonData, user, sizeof user, "player");
  76. ptime = json_get_int(jsonData, "ptime");
  77. json_get_string(jsonData, reason, sizeof reason, "reason");
  78. new TrgID = sscanf(user, "u", Pid);
  79. if( TrgID || !IsPlayerConnected(Pid)){
  80. Discord:sendBasicRequest(DISCORD_ADMINCMDS_CHANNEL, "Prison system", "That player is not connected, or is invalid.", DISCORD_COLOR_INFO);
  81. return;
  82. }
  83. TogglePlayerControllable(Pid, true);
  84. if(WatchingTV[Pid])
  85. WatchingTV[Pid] = false;
  86. if(ptime != 0)
  87. {
  88. format(str, sizeof(str), "{FF6347}SERVER: %s has been prisoned by an administrator, reason: %s", PlayerOOCName(Pid), reason);
  89. SendClientMessageToAll(COLOR_WHITE, str);
  90. format(str, sizeof(str), "You have been prisoned for %d minutes. (/time)", ptime);
  91. SendClientMessage(Pid, COLOR_LIGHTBLUE, str);
  92. }
  93. displayCenterHUDInfo(Pid, "~w~Welcome to ~n~~r~admin prison.", 8);
  94. ClearGuns(Pid);
  95. ResetPlayerWeapons(Pid);
  96. PlayerInfo[Pid][pWantedLevel] = 0;
  97. SetPlayerVirtualWorld(Pid, 0);
  98. PlayerInfo[Pid][pVirtualWorld] = 0;
  99. SetPlayerInterior(Pid, 69);
  100. PlayerInfo[Pid][pInt] = 69;
  101. format(str, sizeof(str), "%s", sender);
  102. strmid(PlayerInfo[Pid][pPrisonedBy], str, 0, strlen(str), 255);
  103. format(str, sizeof(str), "%s", reason);
  104. strmid(PlayerInfo[Pid][pPrisonReason], str, 0, strlen(str), 255);
  105. SetPlayerColor(Pid, TCOLOR_PRISON);
  106. PlayerInfo[Pid][pJailed] = 3;
  107. PlayerInfo[Pid][pAdminJailed] = 1;
  108. PlayerInfo[Pid][pJailTime] = ptime * 60;
  109. SetPlayerSkin(Pid, 50);
  110. PlayerInfo[Pid][pModel] = 50;
  111. new rand = random(sizeof(PrisonSpawns));
  112. PrisonCell[Pid] = rand;
  113. SetPlayerPos(Pid, PrisonSpawns[rand][0], PrisonSpawns[rand][1], PrisonSpawns[rand][2]);
  114. SetPlayerFacingAngle(Pid, PrisonSpawns[rand][3]);
  115. Timer_FreezePlayer(Pid, FREEZE, ENTER_FREEZE);
  116. SavePrison(PlayerName(Pid), sender, reason, ptime);
  117. }
  118. DiscordResponse:kick(data[])
  119. {
  120. new JSONNode:jsonData = json_parse_string(data),
  121. sender[128],
  122. user[MAX_PLAYER_NAME+1],
  123. reason[20],
  124. Pid,
  125. str[128],
  126. logstring[128],
  127. year, month, day
  128. ;
  129. json_get_string(jsonData, sender, sizeof sender, "sender");
  130. json_get_string(jsonData, user, sizeof user, "player");
  131. json_get_string(jsonData, reason, sizeof reason, "reason");
  132. new TrgID = sscanf(user, "u", Pid);
  133. if( TrgID || !IsPlayerConnected(Pid))
  134. {
  135. Discord:sendBasicRequest(DISCORD_ADMINCMDS_CHANNEL, "Kick system", "That player is not connected, or is invalid.", DISCORD_COLOR_INFO);
  136. return;
  137. }
  138. getdate(year, month, day);
  139. format(logstring, sizeof(logstring), "AdmCmd: %s was kicked by %s, reason: %s (%d-%d-%d).", Pid, sender, reason, month, day, year);
  140. format(str, sizeof(str), "{FF6347}SERVER: %s was kicked by %s, reason: %s", PlayerICName(Pid), sender, reason);
  141. SendClientMessageToAll(COLOR_WHITE, str);
  142. KickLog(logstring);
  143. KickEx(Pid);
  144. }
  145. DiscordResponse:w(data[])
  146. {
  147. new JSONNode:jsonData = json_parse_string(data),
  148. user[MAX_PLAYER_NAME+1],
  149. message[128],
  150. Pid,
  151. str[128]
  152. ;
  153. json_get_string(jsonData, user, sizeof user, "player");
  154. json_get_string(jsonData, message, sizeof message, "message");
  155. new TrgID = sscanf(user, "u", Pid);
  156. if( TrgID || !IsPlayerConnected(Pid))
  157. {
  158. Discord:sendBasicRequest(DISCORD_ADMINCMDS_CHANNEL, "Whisper system", "That player is not connected, or is invalid.", DISCORD_COLOR_INFO);
  159. return;
  160. }
  161. format(str, sizeof(str), "A discord admin whispers: %s", message);
  162. SendClientMessage(Pid, COLOR_YELLOW, str);
  163. }
  164. DiscordResponse:getbanreason(data[])
  165. {
  166. new JSONNode:jsonData = json_parse_string(data),
  167. name[MAX_PLAYER_NAME+1];
  168. json_get_string(jsonData, name, sizeof name, "name");
  169. new query[128];
  170. mysql_format(sqlGameConnection, query, sizeof(query), "SELECT `Reason`, `Date`, `BannedBy` FROM `banlist` WHERE `Name` = '%e'", name);
  171. mysql_pquery(sqlGameConnection, query, "OnDiscordGetBanReason", "s", name);
  172. }
  173. forward OnDiscordGetBanReason(playername[]);
  174. public OnDiscordGetBanReason(playername[])
  175. {
  176. if(cache_num_rows() == 0) return Discord:sendBasicRequest(DISCORD_ADMINCMDS_CHANNEL, "Ban reason", "That account isn't banned via the sql banlist.", DISCORD_COLOR_INFO);
  177. new reason[128], date[128], Banby[128];
  178. cache_get_field_content(0, "Reason", reason);
  179. cache_get_field_content(0, "Date", date);
  180. cache_get_field_content(0, "BannedBy", Banby);
  181. new str[128];
  182. format(str, sizeof(str), "Banlist: %s \nReason: %s \nDate: %s \nBanned by %s", playername, reason, date, Banby);
  183. Discord:sendBasicRequest(DISCORD_ADMINCMDS_CHANNEL, "Ban reason", str, DISCORD_COLOR_INFO);
  184. return 1;
  185. }