View difference between Paste ID: qe0ckkdC and CM9rWENe
SHOW: | | - or go back to the newest paste.
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."
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-
	lastPostId
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-
	print(" Version 0.1 keep updated in: http://forum.sa-mp.com/showthread.php?t=486271");
44+
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-
	lastPostId = getLastPostId();
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-
	SetTimer("checkNewPosts", 5000, true);
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-
	return strval(post_id);
105+
	getLastAdminActionId();
106
	
107
	SetTimer("checkUpdates", 3000, true);
108
}
109-
	mysql_debug(0);
109+
110-
    mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_DB, MYSQL_PASS);
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
}