Re: Multilang Help
I don't think you followed what Arkshine said.
PHP Code:
#include <amxmodx>
#include <amxmisc>
#include <regex>
#define PLUGIN "Spam Blocker"
#define VERSION "3.6"
#define AUTHOR "Teo"
#define MAXIMUM 512
#define PUB_TASK 22210
#define IMMUNITY_FLAG ADMIN_LEVEL_E
new bantime, ipmode, szAuthID [32], szName [64], j, k, u, checknick, banmode
new configfolder [256], check_ip, bt_msg [20], log_hides, Float:is_amxbans
new words [6] [MAXIMUM] [128], patt [6] [16], active, total [6], m, notify
new const pattern [] = "(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)"
new Regex:compiled, ret, error [2], warning, Float:is_advancedbans
public plugin_init () {
register_plugin (PLUGIN, VERSION, AUTHOR)
compiled = regex_compile (pattern, ret, error, charsmax (error))
register_dictionary("spamblocker.txt")
is_amxbans = get_cvar_float ("amxbans_version")
is_advancedbans = get_cvar_float ("advanced_bans")
active = register_cvar ("spam_blocker_active", "1")
ipmode = register_cvar ("spam_ip_mode", "3")
checknick = register_cvar ("spam_check_nick", "1")
bantime = register_cvar ("spam_bantime", "1440")
check_ip = register_cvar ("spam_detect_ip", "0")
log_hides = register_cvar ("spam_log_hides", "0")
warning = register_cvar ("spam_warning", "1")
notify = register_cvar ("spam_notify_admins", "1")
banmode = register_cvar ("spam_ban_mode", "1")
register_cvar("spam_blocker", VERSION, FCVAR_SERVER|FCVAR_EXTDLL|FCVAR_UNLOGGED|FCVAR_SPONLY)
register_clcmd ("say", "check")
register_clcmd ("say_team", "check")
set_task (200.0, "spam_pub", PUB_TASK, "", 0, "b")
get_configsdir (configfolder, 255)
server_cmd ("exec ^"%s/spam_blocker/config.cfg^"", configfolder)
patt [1] = "hide.ini"
patt [2] = "kick.ini"
patt [3] = "ban.ini"
patt [4] = "warn.ini"
patt [5] = "whitelist.ini"
for (u = 1; u < 6; u++) {
total [u] = 0
scan (words, patt [u], configfolder, u)
}
}
public scan (output [] [] [], const filename [], const conf [], const flag) {
static path [64]
format (path, 63, "%s/spam_blocker/%s", conf, filename)
new file_handle = fopen (path, "rt+")
new file_text [256]
new k = 0
while (!feof (file_handle) && k < MAXIMUM) {
fgets (file_handle, file_text, 255)
trim (file_text)
copy (output [flag] [k], strlen (file_text), file_text)
k++
}
total [flag] = k
fclose (file_handle)
return PLUGIN_CONTINUE
}
stock bool:is_ip (const src []) {
return regex_match_c (src, compiled, ret) > 0
}
public immunity (id) {
return access (id, IMMUNITY_FLAG)
}
public client_infochanged (id) {
if (get_pcvar_num (checknick) == 1) {
new newname [64], oldname [64]
get_user_name (id, oldname, 63)
get_user_info (id, "name", newname, 63)
if (!immunity (id) && !equal (newname, oldname)) {
check_nick (id)
}
}
}
public client_putinserver (id) {
if (get_pcvar_num (checknick) == 1 && !immunity (id)) {
check_nick (id)
}
}
public check_nick (id) {
new nick [64]
get_user_info (id, "name", nick, 63)
strtolower (nick)
return check_spam (nick, id, " in nick", false)
}
public check (id) {
if (get_pcvar_num (active) == 1) {
new said [128]
read_args (said, 127)
strtolower (said)
replace (said, 127, "^"", "")
replace (said, 127, "^"", "")
return check_spam (said, id, "", true)
}
return PLUGIN_CONTINUE
}
public bool:whitelist (const msg []) {
new bool:ret
ret = false
for (m = 0; m < total [5]; m++) {
if (contain (msg, words [5] [m]) != -1) {
ret = true
}
}
return ret
}
public check_spam (txt [], id, ins [], bool:fl) {
if (!immunity (id) && get_pcvar_num (check_ip) == 1 && is_ip (txt) && whitelist (txt) == false) {
do_punish (id, txt, get_pcvar_num (ipmode), ins, fl)
return PLUGIN_HANDLED
}
for (k = 1; k < 5; k++) {
for (j = 0; j < total [k]; j++) {
if ((k != 1 && contain (txt, words [k] [j]) != -1 && whitelist (txt) == false) || (k == 1 && equal (txt, words [k] [j]))) {
if (!immunity (id)) {
do_punish (id, txt, k, ins, fl)
return PLUGIN_HANDLED
}
if (k == 1 && immunity (id)) {
do_punish (id, txt, k, ins, fl)
return PLUGIN_HANDLED
}
}
}
}
return PLUGIN_CONTINUE
}
public do_punish (id, text [], mode, ins [], bool:fl) {
new bnmd = get_pcvar_num (banmode)
switch (bnmd) {
case 1: {
get_user_authid (id, szAuthID, 31)
}
case 2: {
get_user_ip (id, szAuthID, 31, 1)
}
}
get_user_name (id, szName, 63)
new userid = get_user_userid (id)
switch (mode)
{
case 1:
{
if (get_pcvar_num (log_hides) == 1 && fl == true)
{
client_print(0, print_chat, "%L", LANG_PLAYER, "SPAM_FORBIDDEN_PLAYER", szName, szAuthID, text)
}
}
case 2:
{
server_cmd ("amx_kick ^"%s^" ^"AUTOKICK: Spam%s^"", szName, ins)
if (get_pcvar_num (notify) == 2)
{
client_print(0, print_chat,"%L", LANG_PLAYER, "SPAM_KICK", szName, text)
}
log_amx ("%L", LANG_SERVER, "SPAM_KICK_MSG", szName, szAuthID, ins, text)
}
case 3:
{
if (is_amxbans <= 0 && is_advancedbans <= 0)
{//default ban method sucks
if (bnmd == 1)
{
server_cmd ("amx_ban ^"%s^" %d ^"AUTOBAN: Spam%s^"", szAuthID, get_pcvar_num (bantime), ins)
}
if (bnmd == 2)
{
server_cmd ("amx_banip #%d %d ^"AUTOBAN: Spam%s^"", userid, get_pcvar_num (bantime), ins)
}
}
if (is_amxbans > 0 && is_advancedbans <= 0)
{//kosher amxbans :)
server_cmd ("amx_ban %d %s AUTOBAN: Spam%s", get_pcvar_num (bantime), szAuthID, ins)
}
if (is_amxbans <= 0 && is_advancedbans > 0)
{//advanced bans. well, better that nothing.
if (bnmd == 1)
{
server_cmd ("amx_ban #%d %d ^"AUTOBAN: Spam%s^"", userid, get_pcvar_num (bantime), ins)
}
if (bnmd == 2)
{
server_cmd ("amx_banip #%d %d ^"AUTOBAN: Spam%s^"", userid, get_pcvar_num (bantime), ins)
}
}
if (get_pcvar_num( bantime) == 0)
{
bt_msg = "permanently"
}
if (get_pcvar_num (bantime) > 0)
{
format (bt_msg, 30, "(%d min)", get_pcvar_num (bantime))
}
if (get_pcvar_num (notify) == 2)
{
client_print(0, print_chat, "%L", LANG_PLAYER, "SPAM_BAN", szName, text)
}
log_amx ( "%L", LANG_SERVER, "SPAM_BAN_MSG", szName, szAuthID, bt_msg, ins, text)
}
case 4:
{
client_print(id, print_chat, "%L", LANG_PLAYER, "SPAM_BLOCK")
if (get_pcvar_num (notify) > 0)
{
client_print(id, print_chat, "%L", "SPAM_WARN", szName, text)
}
log_amx ("%L", id, "SPAM_WARN_MSG", szName, szAuthID, ins, text)
}
}
return PLUGIN_CONTINUE
}
public spam_pub (){
if (get_pcvar_num (warning) == 1) {
client_print (0, print_chat, "%L", LANG_PLAYER, "SPAM_PUBLIC")
}
}
|