🔔 Çevrimdışı bildirim almak ister misiniz?
Bir konuya etiketlendiğinizde, özel mesaj aldığınızda, bir mesajınız alıntılandığında forumda olmasanız bile anlık bildirim almak için lütfen izni verin.
adwords'ü bilemem de, yukarıda verdiğim kod aslında işlev olarak bir badword/spam/küfür koruması. ufak bir düzenlemeyle botun olduğu tüm kanallar üzerindeki ,tüm kanal içi yazışmaları kollayan-tarayan ve buna göre işlem yapan bir kod yani birnevi adwords'ün yaptığı işi yapar hale gelir. (tabi bot'un olduğu tüm kanallar ile sınırlı olacaktır.)
kodun içine gerekli açıklamaları yazdım . bunlara göre kodu kendi tercihlerinize/beklentinize göre düzenleyip kullanabilirsiniz.
Kod: Kodu kopyalamak için üzerine çift tıklayın!
bind pubm - "% *" spam:words ;# botun olduğu tüm kanallardaki mesajlarda ilgili proc işletir.
proc spam:words {nick uhost hand chan text} {
# if {[matchattr [nick2hand $nick] mnoaf|mnoaf $chan] \ ;# işlemden muaf tutulacak olanlar bu satırda m=bot-master,n=bot sahibi,o=op alan,a=oto-op edilen ve f=dostlar
# || [isop $nick $chan] || [ishalfop $nick $chan] \ ;# kanaldaki oplar ve halfoplar
# || [isvoice $nick $chan] || $::botnick eq $nick} { return 0 } ;# kanaldaki voicelar ve botun yazdıklarına tepki vermesin*
set dosya "spam.txt" ;# yasak kelimelerin girileceği dosya adı
set nick [filter $nick] ;# nickteki varsa özel karakterleri filtre ederek görmesi için
set text [filter [stripcodes bcruag $text]] ;# yakalanacak kanal mesajlarındaki renk kodlarını ve özel Tcl karakterlerini ayıklayıp botun görmesi/işlemesi için
set t [join [lrange [split $text] 0 end]] ;# kişinin yazdığı/gönderdiği satırın tamamı dikkate alınır.
#set host [lindex [split [getchanhost $nick $chan] "@"] 1] ;# nickin hostunu alır.hosta işlem yapılacaksa satırı etkin kılın
#set ident [lindex [split [getchanhost $nick $chan] "@"] 0] ;# nickin ident kısmına işlem yaptıralacaksa satırı etkin kılın.
regsub -all -- {[A-Z\+\%\`\=\&\#\+\-\_\!\~\<\,\@\#\$\%\^\&\*]} $t "A+%`=&#+-_!~<,@#$%^&*" t ;# yasak söz/lerin farklı karakterler arasında gizlenmeye çalışılmasına karşı..
set i 0
set fp [open $dosya r]
while {[gets $fp b] >= 0} { ;# dosya açılıp son satıra dek okunur.
if {[string match -nocase "*$b*" $t]} { ;# dosyadaki sözlerle eşleşme olup olmadığı kontrol edilir.
#putkick $chan $nick :selametle... ;# yasak keli/meleri kullanan kanaldan kicklensin deniyorsa etkin kılın
#pushmode $chan +b $nick ;# nicke ban isteniyorsa etkin kılın
#pushmode $chan +b *!$ident@* ;# kişinin ident kısmına ban için etkin kılın
#pushmode $chan +b *!*@$host ;# kişinin host kısmına ban için etkin kılın
#flushmode $chan ;# banlardan biri etkin kılınacaksa bunu etkinleştirmeniz halinde mod hemen işleme konur.daha hızlı tepki vermesini sağlar.
putquick "shun $nick 5m :det!!!"
putquick "sajoin $nick 0"
putquick "sajoin $nick #uyarı"
incr i
}
close $fp
}
return 0
}
# Tcl özel karakterlerini filtre etmekte kullanılacak prosedür.
proc filter {text} {
set text [string map {"\\" "\\\\" "\[" "\\\[" "\]" "\\\]" "\{" "\\\{" "\}" "\\\}" "\$" "\\\$" "\"" "\\\""} $text]
return [subst $text]
}
tsk ederim simdi bunu geneler icin kufur korumasi olarak kulancam birtane daha ozel icin yapa bilirmiyiz
bunu sadece reklamlar icin kulancagim yani reklamlar heryer icin gecerli olcak.. ornek verirsek..
kufur.conf bu kanalar icin ozel muaf olcak..
buda ozel kapsiyacak reklam.conf ozel icin olcak bu tabiki.
mantigini anlata bilidimi acaba yani kufur icin ozelere karismiyoruz onun icin bir modul paylastiniz
verdiginiz bu modulu ozel icin nasil yapabilim sadece ozel icin?
tsk ederim simdi bunu geneler icin kufur korumasi olarak kulancam birtane daha ozel icin yapa bilirmiyiz
bunu sadece reklamlar icin kulancagim yani reklamlar heryer icin gecerli olcak.. ornek verirsek..
kufur.conf bu kanalar icin ozel muaf olcak..
buda ozel kapsiyacak reklam.conf ozel icin olcak bu tabiki.
mantigini anlata bilidimi acaba yani kufur icin ozelere karismiyoruz onun icin bir modul paylastiniz
verdiginiz bu modulu ozel icin nasil yapabilim sadece ozel icin?
merak ettim simdi bu ikisini kurdugumda bir birlerinin conflarini nasil algilicaklar ? yani bu modul icin sonucta bunun icin ornek kufur.conf reklam.conf olunca nasil algilicak karisiklik olmicakmi ?
daha dogrusu modulu kurunca modulerde sorun olmicakmi yani hangisi hangi conf gorcek? kufur.conf digeri reklam.conf mevcut adwords iksini goruyor sizin verdiginiz nasil olcak?
yani hem kufur.conf icindekileri gorcek ve hem reklam.conf icindekileri fark olmicak galiba.
Sanirim olay modulerde degil conf bitiyor yani modulu kursak kufur.conf ve reklam.conf bir ayar olmasi gerekiyor
merak ettim simdi bu ikisini kurdugumda bir birlerinin conflarini nasil algilicaklar ? yani bu modul icin sonucta bunun icin ornek kufur.conf reklam.conf olunca nasil algilicak karisiklik olmicakmi ?
daha dogrusu modulu kurunca modulerde sorun olmicakmi yani hangisi hangi conf gorcek? kufur.conf digeri reklam.conf mevcut adwords iksini goruyor sizin verdiginiz nasil olcak?
yani hem kufur.conf icindekileri gorcek ve hem reklam.conf icindekileri fark olmicak galiba.
Sanirim olay modulerde degil conf bitiyor yani modulu kursak kufur.conf ve reklam.conf bir ayar olmasi gerekiyor
Öncelik olarak, modül/dosya içeriği değiştirilmeli örnek ->Adwords yazan kısımları Adwordss şekline çevrilmeli Daha sonra, CONF dosyasın da değiştirilen uzantı ne ise, onunla düzeltilmeli böylece birbirleri ile çakışma yaşanmamış olacak, ve conf dosyanız haliyle adwordss şeklinde olacaktır.
NOT; Biraz uğraşmayı dene olurda yapamazsan müsait olduğum bir zamanda düzenler yollarım sana..
dediginiz gibi yaptim altaki gibi adwordss yaptim ama hata verdi..
ozel.c:38:23: error: bADWORDSS.h: No such file or directory
ozel.c: In function ‘cb_quit’:
ozel.c:1753: error: ‘EXTMODE_STRIPBADWORDSS’ undeclared (first use in this function)
ozel.c:1753: error: (Each undeclared identifier is reported only once
ozel.c:1753: error: for each function it appears in.)
ozel.c: In function ‘cb_partmsg’:
ozel.c:1854: error: ‘EXTMODE_STRIPBADWORDSS’ undeclared (first use in this function)
make[2]: *** [custommodule] Error 1
make[2]: Leaving directory `/home/ozelt/Unreal3.2/src/modules'
make[1]: *** [custommodule] Error 2
make[1]: Leaving directory `/home/ozelt/Unreal3.2/src'
make: *** [custommodule] Error 2
Alıntı:
/*
* ================================================== ================
* Filename: ADWORDSS.c
* Description: Anti-spam filtering
* Written by: AngryWolf <angrywolf@[Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...]mail.com>
* Documentation: ADWORDSS.txt (comes with the package)
* ================================================== ================
* Note that this is a modified version of UnrealIRCd's built-in
* badword system which was written by the UnrealIRCd Team. This
* means that I copied & modified some codes from src/bADWORDSS.c and
* src/conf.c (they come with the Unreal3.2 package).
* ================================================== ================
*/
#define ircfree(x) if (x) MyFree(x); x = NULL
#define ircstrdup(x,y) if (x) MyFree(x); if (!y) x = NULL; else x = strdup(y)
#define DelHook(x) if (x) HookDel(x); x = NULL
#define DelOverride(cmd, ovr) if (ovr && CommandExists(cmd)) CmdoverrideDel(ovr); ovr = NULL
#define DelCommand(x) if (x) CommandDel(x); x = NULL
/* Default texts */
#define DEF_KILL_REASON "User has been killed (Advertising)"
#define DEF_BAN_REASON "User has been banned (Advertising)"
#define DEF_BLOCK_MSG "Your message has been blocked (Advertising)"
#define DEF_WARNING_MSG "Your message contains an advertisement, may have been censored"
// ================================================== ===============
// Functions related to the Adword struct
// ================================================== ===============
if (myconf.channels)
MyFree(myconf.channels);
if (myconf.kill_reason)
MyFree(myconf.kill_reason);
if (myconf.ban_reason)
MyFree(myconf.ban_reason);
if (myconf.block_message)
MyFree(myconf.block_message);
if (myconf.warning_message)
MyFree(myconf.warning_message);
/* ADWORDSS */
for (a = ADWORDSSChannel; a; a = (Adword *) next)
{
next = (ListStruct *) a->next;
DelAdwordChannel(a);
}
for (a = ADWORDSSMessage; a; a = (Adword *) next)
{
next = (ListStruct *) a->next;
DelAdwordMessage(a);
}
for (a = ADWORDSSQuit; a; a = (Adword *) next)
{
next = (ListStruct *) a->next;
DelAdwordQuit(a);
}
#ifdef HOOKTYPE_PRE_LOCAL_PART
for (a = ADWORDSSPart; a; a = (Adword *) next)
{
next = (ListStruct *) a->next;
DelAdwordPart(a);
}
#endif
/* channel exceptions */
for (e = conf_exceptchan; e; e = (ConfigItem_except *) next)
{
next = (ListStruct *) e->next;
DelListItem(e, conf_exceptchan);
MyFree(e->mask);
MyFree(e);
}
}
static u_int check_type(char *word)
{
/*
* This code originally comes from src/s_conf.c,
* with some modifications.
*/
u_int type = WT_FAST, fasttype = 0;
char *p;
for (p = word; *p; p++)
{
/*
* I use my own check for alphabetic characters.
* The old one accepted character codes between
* 65 and 123. That means ABCDEFGHIJKLMNOPQRSTU
* WXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{ were
* accepted. I don't want this.
*/
if (!IsAlpha(*p))
{
if ((word == p) && (*p == '*'))
{
/* Asterisk at the left */
fasttype |= WT_FAST_L;
continue;
}
if ((p[1] == 0) && (*p == '*'))
{
/* Asterisk at the right */
fasttype |= WT_FAST_R;
continue;
}
type = WT_REGEX;
break;
}
}
if (type != WT_REGEX)
type |= fasttype;
return type;
}
static u_int check_regex(ConfigEntry *ce_word)
{
/*
* This code originally comes from src/s_conf.c,
* with some modifications.
*/
/* word */
if (!(ce_word = config_find_entry(cep->ce_entries, "word")))
{
config_error("%s:%i: ADWORDSS::adword without word item",
cep->ce_fileptr->cf_filename, cep->ce_varlinenum);
errors++;
continue;
}
else if (!ce_word->ce_vardata)
{
config_error("%s:%i: ADWORDSS::adword::word without contents",
ce_word->ce_fileptr->cf_filename, ce_word->ce_varlinenum);
errors++;
continue;
}
else
{
u_int wordtype = check_type(ce_word->ce_vardata);
if (!matchtype)
;
else if (matchtype & WT_FAST)
{
if (wordtype & WT_REGEX)
{
config_error("%s:%i: ADWORDSS::adword::word contains invalid data (the fast badword replace system can do: \"blah\", \"*blah\", \"blah*\" and \"*blah*\", in all other cases use regex)",
ce_word->ce_fileptr->cf_filename,
ce_word->ce_varlinenum);
errors++;
}
}
else
errors += check_regex(ce_word);
if (errors)
continue;
}
/* replace */
if ((ce_replace = config_find_entry(ce->ce_entries, "replace")))
{
if (!ce_replace->ce_vardata)
{
config_error("%s:%i: ADWORDSS::adword::replace without contents",
ce_replace->ce_fileptr->cf_filename,
ce_replace->ce_varlinenum);
errors++;
}
}
for (cepp = cep->ce_entries; cepp; cepp = cepp->ce_next)
{
if (!cepp->ce_varname)
{
config_error("%s:%i: blank ADWORDSS::adword item",
cepp->ce_fileptr->cf_filename,
cepp->ce_varlinenum);
errors++;
continue;
}
if (!strcmp(cepp->ce_varname, "notify"))
;
else if (!strcmp(cepp->ce_varname, "warn"))
;
else if (!strcmp(cepp->ce_varname, "block"))
;
else if (!strcmp(cepp->ce_varname, "kill"))
;
else if (!strcmp(cepp->ce_varname, "ban"))
;
else if (!strcmp(cepp->ce_varname, "stoponmatch"))
;
else if (!cepp->ce_vardata)
{
config_error("%s:%i: ADWORDSS::adword::%s item without value",
cepp->ce_fileptr->cf_filename,
cepp->ce_varlinenum, cepp->ce_varname);
errors++;
continue;
}
else if (!strcmp(cepp->ce_varname, "matchtype"))
;
else if (!strcmp(cepp->ce_varname, "word"))
;
else if (!strcmp(cepp->ce_varname, "replace"))
;
else if (!strcmp(cepp->ce_varname, "channel"))
;
else if (!strcmp(cepp->ce_varname, "msgtype"))
{
if (!strcmp(cepp->ce_vardata, "all"))
;
else if (!strcmp(cepp->ce_vardata, "privmsg"))
;
else if (!strcmp(cepp->ce_vardata, "notice"))
;
else if (!strcmp(cepp->ce_vardata, "ctcp"))
;
else if (!strcmp(cepp->ce_vardata, "non-ctcp"))
;
else
{
config_error("%s:%i: unknown ADWORDSS::adword::msgtype %s",
cepp->ce_fileptr->cf_filename, cepp->ce_varlinenum,
cepp->ce_vardata);
errors++;
}
}
else if (!strcmp(cepp->ce_varname, "usertype"))
{
if (!strcmp(cepp->ce_vardata, "all"))
;
else if (!strcmp(cepp->ce_vardata, "registered"))
;
else if (!strcmp(cepp->ce_vardata, "non-registered"))
;
else
{
config_error("%s:%i: unknown ADWORDSS::adword::usertype %s",
cepp->ce_fileptr->cf_filename, cepp->ce_varlinenum,
cepp->ce_vardata);
errors++;
}
}
else
{
config_error("%s:%i: unknown directive ADWORDSS::adword::%s",
cepp->ce_fileptr->cf_filename, cepp->ce_varlinenum,
cepp->ce_varname);
errors++;
}
}
}
else if (!strcmp(cep->ce_varname, "notification-channels"))
;
else if (!strcmp(cep->ce_varname, "notification-method"))
{
if (!strcmp(cep->ce_vardata, "channel"))
;
else if (!strcmp(cep->ce_vardata, "private"))
;
else
{
config_error("%s:%i: unknown notification method %s",
cep->ce_fileptr->cf_filename, cep->ce_varlinenum,
cep->ce_vardata);
errors++;
}
}
else if (!strcmp(cep->ce_varname, "require-mode-g"))
;
else if (!strcmp(cep->ce_varname, "kill-reason"))
;
else if (!strcmp(cep->ce_varname, "ban-reason"))
;
else if (!strcmp(cep->ce_varname, "block-message"))
;
else if (!strcmp(cep->ce_varname, "warning-message"))
;
else if (!strcmp(cep->ce_varname, "ban-type"))
{
if (!strcmp(cep->ce_vardata, "kline"))
;
else if (!strcmp(cep->ce_vardata, "gline"))
;
else if (!strcmp(cep->ce_vardata, "zline"))
;
else if (!strcmp(cep->ce_vardata, "gzline"))
;
else
{
config_error("%s:%i: unknown ban type %s",
cep->ce_fileptr->cf_filename, cep->ce_varlinenum,
cep->ce_vardata);
errors++;
}
}
else if (!strcmp(cep->ce_varname, "ban-period"))
;
else if (!strcmp(cep->ce_varname, "except"))
{
if (!strcmp(cep->ce_vardata, "channel"))
{
if (!config_find_entry(cep->ce_entries, "mask"))
{
config_error("%s:%i: ADWORDSS::except channel without mask item",
cep->ce_fileptr->cf_filename, cep->ce_varlinenum);
errors++;
continue;
}
for (cepp = cep->ce_entries; cepp; cepp = cepp->ce_next)
{
if (!cepp->ce_vardata)
{
config_error("%s:%i: ADWORDSS::except channel item without contents",
cepp->ce_fileptr->cf_filename, cepp->ce_varlinenum);
errors++;
continue;
}
if (!strcmp(cepp->ce_varname, "mask"))
;
else
{
config_error("%s:%i: unknown ADWORDSS::except channel directive %s",
cepp->ce_fileptr->cf_filename, cepp->ce_varlinenum, cepp->ce_varname);
errors++;
continue;
}
}
}
}
else
{
config_error("%s:%i: unknown directive ADWORDSS::%s",
cep->ce_fileptr->cf_filename, cep->ce_varlinenum,
cep->ce_varname);
errors++;
}
}
*errs = errors;
return errors ? -1 : 1;
}
else
return 0;
}
static int cb_config_run(ConfigFile *cf, ConfigEntry *ce, int type)
{
ConfigEntry *cep, *cepp;
if (type != CONFIG_MAIN)
return 0;
if (!strcmp(ce->ce_varname, "ADWORDSS"))
{
for (cep = ce->ce_entries; cep; cep = cep->ce_next)
{
if (!strcmp(cep->ce_varname, "enable"))
{
for (cepp = cep->ce_entries; cepp; cepp = cepp->ce_next)
{
if (!strcmp(cepp->ce_varname, "ADWORDSS"))
myconf.enable_ADWORDSS = config_checkval(cepp->ce_vardata, CFG_YESNO);
else if (!strcmp(cepp->ce_varname, "bans"))
myconf.enable_bans = config_checkval(cepp->ce_vardata, CFG_YESNO);
else if (!strcmp(cepp->ce_varname, "kills"))
myconf.enable_kills = config_checkval(cepp->ce_vardata, CFG_YESNO);
else if (!strcmp(cepp->ce_varname, "blockings"))
myconf.enable_blockings = config_checkval(cepp->ce_vardata, CFG_YESNO);
else if (!strcmp(cepp->ce_varname, "notifications"))
myconf.enable_notifications = config_checkval(cepp->ce_vardata, CFG_YESNO);
else if (!strcmp(cepp->ce_varname, "warnings"))
myconf.enable_warnings = config_checkval(cepp->ce_vardata, CFG_YESNO);
}
}
else if (!strcmp(cep->ce_varname, "notification-channels"))
{
ircstrdup(myconf.channels, cep->ce_vardata);
}
else if (!strcmp(cep->ce_varname, "notification-method"))
{
if (!strcmp(cep->ce_vardata, "channel"))
myconf.n_method = NM_CHANNEL;
else if (!strcmp(cep->ce_vardata, "private"))
myconf.n_method = NM_PRIVATE;
}
else if (!strcmp(cep->ce_varname, "kill-reason"))
{
if (strcmp(cep->ce_vardata, "no"))
{
ircstrdup(myconf.kill_reason, cep->ce_vardata);
}
}
else if (!strcmp(cep->ce_varname, "ban-reason"))
{
if (strcmp(cep->ce_vardata, "no"))
{
ircstrdup(myconf.ban_reason, cep->ce_vardata);
}
}
else if (!strcmp(cep->ce_varname, "block-message"))
{
if (strcmp(cep->ce_vardata, "no"))
{
ircstrdup(myconf.block_message, cep->ce_vardata);
}
}
else if (!strcmp(cep->ce_varname, "warning-message"))
{
if (strcmp(cep->ce_vardata, "no"))
{
ircstrdup(myconf.warning_message, cep->ce_vardata);
}
}
else if (!strcmp(cep->ce_varname, "require-mode-g"))
myconf.require_mode_g = config_checkval(cep->ce_vardata, CFG_YESNO);
else if (!strcmp(cep->ce_varname, "ban-period"))
myconf.ban_period = config_checkval(cep->ce_vardata, CFG_TIME);
else if (!strcmp(cep->ce_varname, "ban-type"))
{
if (!strcmp(cep->ce_vardata, "kline"))
myconf.ban_type = BAN_ACT_KLINE;
else if (!strcmp(cep->ce_vardata, "gline"))
myconf.ban_type = BAN_ACT_GLINE;
else if (!strcmp(cep->ce_vardata, "zline"))
myconf.ban_type = BAN_ACT_ZLINE;
else if (!strcmp(cep->ce_vardata, "gzline"))
myconf.ban_type = BAN_ACT_GZLINE;
}
else if (!strcmp(cep->ce_varname, "except"))
{
if (!strcmp(cep->ce_vardata, "channel"))
{
for (cepp = cep->ce_entries; cepp; cepp = cepp->ce_next)
if (!strcmp(cepp->ce_varname, "mask"))
AddExceptChan(cepp->ce_vardata);
}
}
else if (!strcmp(cep->ce_varname, "adword"))
{
ConfigEntry *ce_matchtype, *ce_word, *ce_block;
Adword *a;
int regflags;
regflags = DEF_REGFLAGS;
a = (Adword *) MyMallocEx(sizeof(Adword));
/*
* These stuffs are from src/bADWORDSS.c,
* I modified them for my own purposes
*/
static char *sky_strcasestr(char *haystack, char *needle)
{
int i;
int nlength = strlen (needle);
int hlength = strlen (haystack);
if (nlength > hlength) return NULL;
if (hlength <= 0) return NULL;
if (nlength <= 0) return haystack;
for (i = 0; i <= (hlength - nlength); i++) {
if (strncasecmp (haystack + i, needle, nlength) == 0)
return haystack + i;
}
return NULL;
}
inline int my_fast_badword_match(Adword *adword, char *line)
{
char *p;
int bwlen = strlen(adword->word);
if ((adword->type & WT_FAST_L) && (adword->type & WT_FAST_R))
return (sky_strcasestr(line, adword->word) ? 1 : 0);
p = line;
while((p = sky_strcasestr(p, adword->word)))
{
if (!(adword->type & WT_FAST_L))
{
if ((p != line) && isalnum(*(p - 1)))
goto next;
}
if (!(adword->type & WT_FAST_R))
{
if (isalnum(*(p + bwlen)))
goto next;
}
return 1;
next:
p += bwlen;
}
return 0;
}
/*
* This code comes from src/bADWORDSS.c (fast_badword_replace
* which was written by Syzop), I modified it a bit.
* (Also made speed optimizations.)
*/
inline int my_fast_badword_replace(Adword *adword, char *line, char *buf, int max)
{
char *searchw = adword->word, *replacew = adword->replace;
char *pold = line, *pnew = buf;
char *poldx = line;
char *startw, *endw;
char *c_eol = buf + max - 1;
int replacen, searchn;
int cleaned = 0;
if ((bantype = find_BanFlag(myconf.ban_type)))
ban_client(from, bantype, myconf.ban_period,
myconf.ban_reason ? myconf.ban_reason
: DEF_BAN_REASON);
#endif
}
else if ((cmdtype != CT_QUIT) && myconf.enable_kills && kill)
{
/*
* Can't find a better solution for killing a user due to an adword;
* using the Event system seems to be working. The problem actually
* is we shouldn't kill a user more than one time (fe. when ppl use
* multiple targets in a PRIVMSG/NOTICE).
*/
strcpy(nickbuf, from->name);
EventAdd("ADWORDSS_kill", 0, 1, &ADWORDSS_event_kill, nickbuf);
}
else if (myconf.enable_warnings && warn)
{
if (myconf.enable_blockings && block)
sendto_one(from, ":%s NOTICE %s :%s",
me.name, from->name, myconf.block_message ?
myconf.block_message : DEF_BLOCK_MSG);
else
sendto_one(from, ":%s NOTICE %s :%s",
me.name, from->name, myconf.warning_message ?
myconf.warning_message : DEF_WARNING_MSG);
}
cleanstr[511] = '\0'; /* cutoff, just to be sure */
/*
* cb_privmsg
* ==========
*
* from: who is sending the message
* to: who will receive it
* str: message text
* notice: tells whether it's a notice or privmsg
*/
#ifdef HOOKTYPE_PRE_LOCAL_PART
/*
* cb_partmsg
* ==========
*
* sptr: who is sending the message
* chptr: the channel where it will be sent to
* comment: message text
*/
Öncelik olarak, modül/dosya içeriği değiştirilmeli örnek ->Adwords yazan kısımları Adwordss şekline çevrilmeli Daha sonra, CONF dosyasın da değiştirilen uzantı ne ise, onunla düzeltilmeli böylece birbirleri ile çakışma yaşanmamış olacak, ve conf dosyanız haliyle adwordss şeklinde olacaktır.
NOT; Biraz uğraşmayı dene olurda yapamazsan müsait olduğum bir zamanda düzenler yollarım sana..
iyi forumlar..
isim degismek sorunu cozmuyor hata verdi baska bir sebep olabilir adwordss yapinca neden hata verdi anlamadim gerci digerinde sorun yok bu ozel icin olani adworss yapinca sorun cikti.
Bunlardan sonra sorun ortadan kalkacaktır lâkin, içeriğin baya değiştirilmesi gerek özelden gönderdiğim PM'ye cevap verme zahmetinde bulunursan daha önce yazmış olduğum bir modülü verebilirim..)
dedigiiz sekilde denedim bence modulu test etim dedigiiz sekilde neyse paylasim icin tsk ederim allah razi olsun sunucu adresimi burdan paylasmiyorum kusra bakmayin lutfen cok kisi dusman oluyor sonra oper vermeyince burdan kimseye pm ile vermiyorum
yinede allah razi olsun tsk ederim yardiminiz icin o dediginiz son seyi denemistim zaten..