Advertisement
Papadopolis

Untitled

Jan 11th, 2014
193
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /**
  2.     Notes:
  3.         [EN-UK]
  4.             - Unfortunately we can't beautify SQL inside strings, they accept only in-line codes.
  5.             - You're allowed to copy this filterscript without keeping my credits if you want so.
  6.             - THIS FILTERSCRIPT NEEDS BLUEG'S MYSQL PLUGIN TO WORK.
  7.             - If this filterscript doesn't work somehow, see mysql_error.txt file inside your server's scriptfiles directory.
  8.  
  9.         [PT-BR]
  10.             - Código completamente livre para ser copiado sem que seja mantido os créditos, afinal, não há como impedir BRs de BRear.
  11.             - Caso esta filterscript não funcione veja o log no arquivo mysql_error.txt dentro da pasta scriptfiles do servidor.
  12.             - Este filterscript precisa do MySQL plugin (por BlueG) para rodar.
  13. **/
  14.  
  15. /** <CHANGEIT> **/
  16. #define MYSQL_HOST  "" // MySQL IP host / IP do servidor MySQL
  17. #define MYSQL_USER  "" // MySQL username / Usuário MySQL
  18. #define MYSQL_PASS  "" // MySQL password / Senha MySQL
  19. #define MYSQL_DB    "" // MySQL database / Banco de dados MySQL
  20. #define MYSQL_FORUMTABLE_PREFIX "" // PhpBB table prefix / Prefixo das tabelas PhpBB
  21.  
  22. // Portuguese
  23. #define LANG_SERVER_MESSAGE             "[FÓRUM] %s respondeu no tópico '%s'. Sessão: %s."
  24. #define LANG_LOG_BAN_USER               "[FÓRUM] Moderador %s baniu o usuário '%s' com a razão: '%s'"
  25. #define LANG_LOG_BAN_IP                 "[FÓRUM] Moderador %s baniu o IP '%s' com a razão: '%s'"
  26. #define LANG_LOG_UNBAN_USER             "[FÓRUM] Moderador %s desbaniu o usuário '%s'"
  27. #define LANG_LOG_DELETE_POST            "[FÓRUM] Moderador %s deletou o post '%s' criado por '%s' na sessão '%s'"
  28. #define LANG_LOG_DELETE_SHADOW_TOPIC    "[FÓRUM] Moderador %s deletou o tópico fantasma '%s' na sessão '%s'"
  29. #define LANG_LOG_DELETE_TOPIC           "[FÓRUM] Moderador %s deletou o tópico '%s' criado por '%s' na sessão '%s'"
  30. #define LANG_LOG_LOCK                   "[FÓRUM] Moderador %s trancou o tópico '%s' na sessão '%s'"
  31. #define LANG_LOG_MERGE                  "[FÓRUM] Moderador %s juntou posts em um novo tópico '%s' na sessão '%s'"
  32. #define LANG_LOG_MOVE                   "[FÓRUM] Moderador %s moveu o tópico '%s' de '%s' para '%s'"
  33. #define LANG_LOG_POST_APPROVED          "[FÓRUM] Moderador %s aprovou o post '%s' do tópico '%s' na sessão '%s'"
  34. #define LANG_LOG_POST_DISAPPROVED       "[FÓRUM] Moderador %s desaprovou o post '%s' do tópico '%s' na sessão '%s' com a seguinte razão: '%s'"
  35. #define LANG_LOG_POST_EDITED            "[FÓRUM] Moderador %s editou o post '%s' do tópico '%s' '%s' escrito por '%s'"
  36. #define LANG_LOG_REPORT_CLOSED          "[FÓRUM] Moderador %s fechou a denúncia '%s' na sessão '%s'"
  37. #define LANG_LOG_TOPIC_APPROVED         "[FÓRUM] Moderador %s aprovou o tópico %s na sessão '%s'"
  38. #define LANG_LOG_TOPIC_DISAPPROVED      "[FÓRUM] Moderador %s desaprovou o tópico '%s' na sessão '%s' com a seguinte razão: %s"
  39. #define LANG_LOG_UNLOCK                 "[FÓRUM] Moderador %s destrancou o tópico '%s' na sessão '%s'"
  40. #define LANG_LOG_USER_WARNING           "[FÓRUM] Moderador %s deu uma advertência ao usuário %s"
  41. #define LANG_LOG_USER_LOCK              "[FÓRUM] Usuário %s trancou seu próprio tópico '%s'"
  42. #define LANG_LOG_BAN_EXCLUDE_USER       "[FÓRUM] Moderador %s retirou o usuário '%s' da lista de banidos com a razão: %s"
  43.  
  44. // English
  45. //#define LANG_SERVER_MESSAGE "[FORUM] %s answer at '%s' topic. Forum session: %s."
  46. //#define LANG_LOG_BAN_USER                 "[FORUM] Moderator %s banned user '%s' for reason: '%s'"
  47. //#define LANG_LOG_BAN_IP               "[FORUM] Moderator %s banned IP '%s' for reason: '%s'"
  48. //#define LANG_LOG_UNBAN_USER           "[FORUM] Moderator %s unbanned user '%s'"
  49. //#define LANG_LOG_DELETE_POST          "[FORUM] Moderator %s deleted post '%s' written by '%s' at session '%s'"
  50. //#define LANG_LOG_DELETE_SHADOW_TOPIC  "[FORUM] Moderator %s deleted shadow topic '%s' at session '%s'"
  51. //#define LANG_LOG_DELETE_TOPIC             "[FORUM] Moderator %s deleted topic '%s' written by '%s' at session '%s'"
  52. //#define LANG_LOG_LOCK                     "[FORUM] Moderador %s locked topic '%s' at session '%s'"
  53. //#define LANG_LOG_MERGE                    "[FORUM] Moderator %s merged posts into topic '%s' at session '%s'"
  54. //#define LANG_LOG_MOVE                     "[FORUM] Moderator %s moved topic '%s' from '%s' to '%s'"
  55. //#define LANG_LOG_POST_APPROVED            "[FORUM] Moderator %s approved post '%s' in topic '%s' at session '%s'"
  56. //#define LANG_LOG_POST_DISAPPROVED         "[FORUM] Moderator %s disapproved post '%s' in topic '%s' at session '%s' with the following reason: '%s'"
  57. //#define LANG_LOG_POST_EDITED          "[FORUM] Moderator %s edited post '%s' in topic '%s' at session '%s' written by '%s'"
  58. //#define LANG_LOG_REPORT_CLOSED            "[FORUM] Moderator %s closed report '%s' at session '%s'"
  59. //#define LANG_LOG_TOPIC_APPROVED       "[FORUM] Moderator %s approved topic %s at session '%s'"
  60. //#define LANG_LOG_TOPIC_DISAPPROVED        "[FORUM] Moderator %s disapproved topic %s at session '%s' with the following reason: %s"
  61. //#define LANG_LOG_UNLOCK               "[FORUM] Moderator %s unlocked topic '%s' at session '%s'"
  62. //#define LANG_LOG_USER_WARNING             "[FORUM] Moderator %s added warning to user %s"
  63. //#define LANG_LOG_USER_LOCK                "[FORUM] User %s locked own topic %s"
  64. //#define LANG_LOG_BAN_EXCLUDE_USER         "[FORUM] Moderator %s excluded user '%s' from ban for reason: %s"
  65. /** </CHANGE IT> **/
  66.  
  67. #include <a_samp>
  68. #include <a_mysql>
  69.  
  70. new
  71.     lastPostId,
  72.     lastAdminActionId,
  73.     dbConnectionHandle
  74. ;
  75.  
  76. forward MySqlConnect();
  77. forward checkNewPosts();
  78. forward getLastPostId();
  79. forward checkUpdates();
  80. forward checkAdminActions();
  81. forward getLastAdminActionId();
  82. forward initChecks();
  83.  
  84. public OnFilterScriptInit()
  85. {
  86.     print("\n--------------------------------------");
  87.     print(" in-game phpbb integration by Mandrakke ");
  88.     print(" Version 0.2 keep updated in: http://forum.sa-mp.com/showthread.php?p=2855241");
  89.     print("--------------------------------------\n");
  90.  
  91.     MySqlConnect();
  92.  
  93.     SetTimer("initChecks", 5000, false);
  94.  
  95.     return 1;
  96. }
  97.  
  98. public OnFilterScriptExit()
  99. {
  100.     return 1;
  101. }
  102.  
  103. public initChecks() {
  104.     getLastPostId();
  105.     getLastAdminActionId();
  106.    
  107.     SetTimer("checkUpdates", 3000, true);
  108. }
  109.  
  110. public checkUpdates() {
  111.     checkNewPosts();
  112.     checkAdminActions();
  113. }
  114.  
  115. public checkNewPosts() {
  116.     new Query[512], username[64], forum_name[64], topic_title[64], serverMessage[256], post_idStr[64], post_id;
  117.    
  118.     format(Query, sizeof(Query), "select u.username, t.topic_title, f.forum_name, p.post_id from %sposts p  join %susers u on p.poster_id = u.user_id join %stopics t on t.topic_id = p.topic_id join %sforums f on f.forum_id = p.forum_id where p.post_id > %d order by p.post_time desc limit 0,10",
  119.         MYSQL_FORUMTABLE_PREFIX, MYSQL_FORUMTABLE_PREFIX, MYSQL_FORUMTABLE_PREFIX, MYSQL_FORUMTABLE_PREFIX, lastPostId
  120.     );
  121.  
  122.     mysql_query(Query);
  123.     mysql_store_result();
  124.  
  125.     if(mysql_num_rows() > 0) {
  126.         while(mysql_retrieve_row()) {
  127.             mysql_fetch_field_row(username, "username");
  128.             mysql_fetch_field_row(forum_name, "forum_name");
  129.             mysql_fetch_field_row(topic_title, "topic_title");
  130.             mysql_fetch_field_row(post_idStr, "post_id"); post_id = strval(post_idStr);
  131.  
  132.             format(serverMessage, sizeof(serverMessage), LANG_SERVER_MESSAGE, username, topic_title, forum_name);
  133.             SendClientMessageToAll(0x00FF0000, serverMessage);
  134.  
  135.             if(post_id > lastPostId) {
  136.                 lastPostId = post_id;
  137.             }
  138.         }
  139.     }
  140.  
  141.     mysql_free_result();
  142.  
  143.     return 1;
  144. }
  145.  
  146. public checkAdminActions() {
  147.     new Query[512], serverMessage[256], username[64], forum_name[64], topic_title[64], log_operation[32], log_data[128], log_idStr[15], log_id, log_data_explode[7][64], log_data_info1[64], log_data_info2[64];
  148.    
  149.     format(Query, sizeof(Query), "SELECT u.username, f.forum_name, t.topic_title, l.log_operation, l.log_data, l.log_id FROM %slog l join %stopics t on t.topic_id = l.topic_id join %sforums f on f.forum_id = l.forum_id join %susers u on u.user_id = l.user_id where l.log_type = 1 and l.log_id > %d order by l.log_time desc limit 0,10",
  150.         MYSQL_FORUMTABLE_PREFIX, MYSQL_FORUMTABLE_PREFIX, MYSQL_FORUMTABLE_PREFIX, MYSQL_FORUMTABLE_PREFIX, lastAdminActionId
  151.     );
  152.  
  153.     mysql_query(Query);
  154.     mysql_store_result();
  155.  
  156.     if(mysql_num_rows() > 0) {
  157.         while(mysql_retrieve_row()) {
  158.             mysql_fetch_field_row(username, "username");
  159.             mysql_fetch_field_row(forum_name, "forum_name");
  160.             mysql_fetch_field_row(topic_title, "topic_title");
  161.             mysql_fetch_field_row(log_operation, "log_operation");
  162.             mysql_fetch_field_row(log_data, "log_data");
  163.             mysql_fetch_field_row(log_idStr, "log_id"); log_id = strval(log_idStr);
  164.  
  165.             explode(log_data_explode, log_data, "\"");
  166.  
  167.             format(log_data_info1, sizeof(log_data_info1), "%s", log_data_explode[1]);
  168.             format(log_data_info2, sizeof(log_data_info2), "%s", log_data_explode[3]);
  169.  
  170.             if(strcmp(log_operation, "LOG_BAN_EXCLUDE_USER", true) == 0) {
  171.                 format(serverMessage, sizeof(serverMessage), LANG_LOG_BAN_EXCLUDE_USER, username, log_data_info1, log_data_info2);
  172.             } else if(strcmp(log_operation, "LOG_BAN_USER", true) == 0) {
  173.                 format(serverMessage, sizeof(serverMessage), LANG_LOG_BAN_USER, username, log_data_info1, log_data_info2);
  174.             } else if(strcmp(log_operation, "LOG_BAN_IP", true) == 0) {
  175.                 format(serverMessage, sizeof(serverMessage), LANG_LOG_BAN_IP, username, log_data_info2, log_data_info1);
  176.             } else if(strcmp(log_operation, "LOG_UNBAN_USER", true) == 0) {
  177.                 format(serverMessage, sizeof(serverMessage), LANG_LOG_UNBAN_USER, username, log_data_info1);
  178.             } else if(strcmp(log_operation, "LOG_DELETE_POST", true) == 0) {
  179.                 format(serverMessage, sizeof(serverMessage), LANG_LOG_DELETE_POST, username, log_data_info1, log_data_info2, forum_name);
  180.             } else if(strcmp(log_operation, "LOG_DELETE_SHADOW_TOPIC", true) == 0) {
  181.                 format(serverMessage, sizeof(serverMessage), LANG_LOG_DELETE_SHADOW_TOPIC, username, log_data_info1, forum_name);
  182.             } else if(strcmp(log_operation, "LOG_DELETE_TOPIC", true) == 0) {
  183.                 format(serverMessage, sizeof(serverMessage), LANG_LOG_DELETE_TOPIC, username, log_data_info1, forum_name);
  184.             } else if(strcmp(log_operation, "LOG_LOCK", true) == 0 || strcmp(log_operation, "LOG_LOCK_POST", true) == 0) {
  185.                 format(serverMessage, sizeof(serverMessage), LANG_LOG_LOCK, username, topic_title, forum_name);
  186.             } else if(strcmp(log_operation, "LOG_MERGE", true) == 0) {
  187.                 format(serverMessage, sizeof(serverMessage), LANG_LOG_MERGE, username, topic_title);
  188.             } else if(strcmp(log_operation, "LOG_MOVE", true) == 0) {
  189.                 format(serverMessage, sizeof(serverMessage), LANG_LOG_MOVE, username, topic_title, log_data_info1, log_data_info2);
  190.             } else if(strcmp(log_operation, "LOG_POST_APPROVED", true) == 0) {
  191.                 format(serverMessage, sizeof(serverMessage), LANG_LOG_POST_APPROVED, username, log_data_info1, topic_title, forum_name);
  192.             } else if(strcmp(log_operation, "LOG_POST_DISAPPROVED", true) == 0) {
  193.                 format(serverMessage, sizeof(serverMessage), LANG_LOG_POST_DISAPPROVED, username, log_data_info1, topic_title, forum_name, log_data_info2);
  194.             } else if(strcmp(log_operation, "LOG_POST_EDITED", true) == 0) {
  195.                 format(serverMessage, sizeof(serverMessage), LANG_LOG_POST_EDITED, username, log_data_info1, topic_title, forum_name, log_data_info2);
  196.             } else if(strcmp(log_operation, "LOG_REPORT_CLOSED", true) == 0) {
  197.                 format(serverMessage, sizeof(serverMessage), LANG_LOG_REPORT_CLOSED, username, log_data_info1, forum_name);
  198.             } else if(strcmp(log_operation, "LOG_TOPIC_APPROVED", true) == 0) {
  199.                 format(serverMessage, sizeof(serverMessage), LANG_LOG_TOPIC_APPROVED, username, log_data_info1);
  200.             } else if(strcmp(log_operation, "LOG_TOPIC_DISAPPROVED", true) == 0) {
  201.                 format(serverMessage, sizeof(serverMessage), LANG_LOG_TOPIC_DISAPPROVED, username, log_data_info1, forum_name, log_data_info2);
  202.             } else if(strcmp(log_operation, "LOG_UNLOCK", true) == 0) {
  203.                 format(serverMessage, sizeof(serverMessage), LANG_LOG_UNLOCK, username, log_data_info1, forum_name);
  204.             } else if(strcmp(log_operation, "LOG_USER_WARNING", true) == 0) {
  205.                 format(serverMessage, sizeof(serverMessage), LANG_LOG_USER_WARNING, username, log_data_info1);
  206.             } else if(strcmp(log_operation, "LOG_USER_LOCK", true) == 0) {
  207.                 format(serverMessage, sizeof(serverMessage), LANG_LOG_USER_LOCK, username, log_data_info1);
  208.             }
  209.  
  210.             if(strlen(serverMessage) > 0) {
  211.                 format(serverMessage, sizeof(serverMessage), "%s", serverMessage);
  212.                 SendClientMessageToAll(0x00FF0000, serverMessage);
  213.             }
  214.  
  215.             if(log_id > lastAdminActionId) {
  216.                 lastAdminActionId = log_id;
  217.             }
  218.         }
  219.     }
  220.  
  221.     mysql_free_result();
  222. }
  223.  
  224. public getLastPostId() {
  225.     new Query[128], post_id[64];
  226.  
  227.     format(Query, sizeof(Query), "select p.post_id from %sposts p order by p.post_time desc limit 0,1", MYSQL_FORUMTABLE_PREFIX);
  228.     mysql_query(Query);
  229.     mysql_store_result();
  230.  
  231.     if(mysql_retrieve_row()) {
  232.         mysql_fetch_field_row(post_id, "post_id");
  233.     }
  234.  
  235.     mysql_free_result();
  236.  
  237.     lastPostId = strval(post_id);
  238. }
  239.  
  240. public getLastAdminActionId() {
  241.     new Query[128], log_id[64];
  242.  
  243.     format(Query, sizeof(Query), "select l.log_id from %slog l order by l.log_time desc limit 0,1", MYSQL_FORUMTABLE_PREFIX);
  244.     mysql_query(Query);
  245.     mysql_store_result();
  246.  
  247.     if(mysql_retrieve_row()) {
  248.         mysql_fetch_field_row(log_id, "log_id");
  249.     }
  250.  
  251.     mysql_free_result();
  252.  
  253.     lastAdminActionId = strval(log_id);
  254. }
  255.  
  256. public MySqlConnect() {
  257.     mysql_debug(1);
  258.     dbConnectionHandle = mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_DB, MYSQL_PASS);
  259. }
  260.  
  261. public OnQueryError( errorid, error[], resultid, extraid, callback[], query[], connectionHandle ) {
  262.     new Query[128];
  263.  
  264.     if(errorid!=1060 && errorid!=1062){
  265.         new hour,second,minute;
  266.         gettime(hour,minute,second);
  267.         new File:log=fopen("mysql_errors.txt",io_append);
  268.         format(Query,sizeof(Query),"[%d:%d:%d] Query: %s Erro: %d (%s)\r\n",hour,minute,second,query,errorid,error);
  269.         fwrite(log,Query);
  270.         fclose(log);
  271.     }
  272.  
  273.     return 0;
  274. }
  275.  
  276. stock explode(aExplode[][], const sSource[], const sDelimiter[] = " ", iVertices = sizeof aExplode, iLength = sizeof aExplode[]){
  277.     new
  278.         iNode,
  279.         iPointer,
  280.         iPrevious = -1,
  281.         iDelimiter = strlen(sDelimiter);
  282.  
  283.     while(iNode < iVertices){
  284.         iPointer = strfind(sSource, sDelimiter, false, iPointer);
  285.  
  286.         if(iPointer == -1){
  287.             strmid(aExplode[iNode], sSource, iPrevious, strlen(sSource), iLength);
  288.             break;
  289.         }
  290.         else {
  291.             strmid(aExplode[iNode], sSource, iPrevious, iPointer, iLength);
  292.         }
  293.  
  294.         iPrevious = (iPointer += iDelimiter);
  295.         ++iNode;
  296.     }
  297.     return iPrevious;
  298. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement