IRCServices 5.1.24 sürümü ile kaldırılan founder sorunun daha önceden sorusu sorulmuş ve çözümler yetersiz kalmış, bende hazır ora yazmışken döküman haline getireyim dedim, yardımcı olabildiysem ne mutlu bana.
Biraz eskidi konu ancak hala sorun yaşayanlar varsa ben çözdüğüm yöntemi anlatmak istiyorum;
Dosya: irc*.*/modules/chanserv/access.c
Kod: Kodu kopyalamak için üzerine çift tıklayın!
{ CA_AUTOPROTECT, ACCLEV_SOP, "AUTOPROTECT", CHAN_LEVEL_AUTOPROTECT,
CL_SET_MODE, { .cumode = {"a",0} } },
üzerine;
Kod: Kodu kopyalamak için üzerine çift tıklayın!
{ CA_AUTOOWNER, ACCLEV_FOUNDER, "", -1,
CL_SET_MODE, { .cumode = {"", 1} } },
Aynı dosyada bunu bulup;
Kod: Kodu kopyalamak için üzerine çift tıklayın!
for (i = 0; levelinfo[i].what >= 0; i++) {
int type = levelinfo[i].action & CL_TYPEMASK;
if (type == CL_SET_MODE || type == CL_CLEAR_MODE) {
/* Use MODE_NOERROR to deal with protocols that don't
* support some modes (e.g. +h in AUTODEOP) */
levelinfo[i].target.cumode.flags =
mode_string_to_flags(levelinfo[i].target.cumode.modes,
MODE_CHANUSER | MODE_NOERROR);
}
def_levels[levelinfo[i].what] = levelinfo[i].defval;
lev_is_max[levelinfo[i].what] = levelinfo[i].action & CL_LESSEQUAL;
}
Böyle değiştir;
Kod: Kodu kopyalamak için üzerine çift tıklayın!
for (i = 0; levelinfo[i].what >= 0; i++) {
int type = levelinfo[i].action & CL_TYPEMASK;
if (type == CL_SET_MODE || type == CL_CLEAR_MODE) {
if (levelinfo[i].what == CA_AUTOOWNER) {
if (chanusermode_owner)
levelinfo[i].target.cumode.flags = chanusermode_owner;
else
levelinfo[i].action = CL_OTHER; /* make it a no-op */
} else {
/* Use MODE_NOERROR to deal with protocols that don't
* support some modes (e.g. +h in AUTODEOP) */
levelinfo[i].target.cumode.flags =
mode_string_to_flags(levelinfo[i].target.cumode.modes,
MODE_CHANUSER | MODE_NOERROR);
}
}
def_levels[levelinfo[i].what] = levelinfo[i].defval;
lev_is_max[levelinfo[i].what] = levelinfo[i].action & CL_LESSEQUAL;
}
Dosya: irc*.*/modules/chanserv/chanserv.h
Bunu bulup;
Kod: Kodu kopyalamak için üzerine çift tıklayın!
/* CA_AUTOOWNER 18 */ /* No longer used */
Kod: Kodu kopyalamak için üzerine çift tıklayın!
#define CA_AUTOOWNER 18
olarak değiştir.
Dosya: irc*.*/modules/chanserv/main.c
Bunu bulup;
Kod: Kodu kopyalamak için üzerine çift tıklayın!
else if (strcmp(cmd, "DEHALFOP") == 0)
target_nextacc = CA_AUTOOP;
else
target_nextacc = -1;
Hemen altına;
Kod: Kodu kopyalamak için üzerine çift tıklayın!
if (strcmp(cmd, "DEPROTECT") == 0 && chanusermode_owner)
mode |= chanusermode_owner;
Dosya: irc*.*/modes.c
Bunu bulup;
Kod: Kodu kopyalamak için üzerine çift tıklayın!
char chanmode_multiple[257]; /* Chanmodes that can be set multiple times */
Hemen üstüne;
Kod: Kodu kopyalamak için üzerine çift tıklayın!
int32 chanusermode_owner;
Aynı dosyada bunu bulup;
Kod: Kodu kopyalamak için üzerine çift tıklayın!
modelist = chanusermodes;
flaglist = chanuserflags;
for (i = 0; i < 256; i++) {
if (modelist[i].flag) {
int n = 0;
uint32 tmp = (uint32) modelist[i].flag;
prefixtable[ (uint8)modelist[i].prefix ] = tmp;
while (tmp >>= 1)
n++;
if (n < 31)
flaglist[n] = (char)i;
if (modelist[i].plus_params!=1 || modelist[i].minus_params!=1) {
log("modes: Warning: channel user mode `%c' takes %d/%d"
" parameters (should be 1/1)",
i, modelist[i].plus_params, modelist[i].minus_params);
}
}
}
}
Bununla değiştir;
Kod: Kodu kopyalamak için üzerine çift tıklayın!
modelist = chanusermodes;
flaglist = chanuserflags;
for (i = 0; i < 256; i++) {
if (modelist[i].flag) {
int n = 0;
uint32 tmp = (uint32) modelist[i].flag;
prefixtable[ (uint8)modelist[i].prefix ] = tmp;
if (modelist[i].info & MI_CHANOWNER)
chanusermode_owner |= tmp;
while (tmp >>= 1)
n++;
if (n < 31)
flaglist[n] = (char)i;
if (modelist[i].plus_params!=1 || modelist[i].minus_params!=1) {
log("modes: Warning: channel user mode `%c' takes %d/%d"
" parameters (should be 1/1)",
i, modelist[i].plus_params, modelist[i].minus_params);
}
}
}
}
Dosya: irc*.*/modes.h
Bunu bulup;
Kod: Kodu kopyalamak için üzerine çift tıklayın!
#define MI_REGNICKS_ONLY 0x08 /* [ C] Only registered/ID'd nicks may join */
Hemen altına ekle;
Kod: Kodu kopyalamak için üzerine çift tıklayın!
#define MI_CHANOWNER 0x10
Aynı dosyada bunu bulup;
Kod: Kodu kopyalamak için üzerine çift tıklayın!
extern int32 chanmode_opersonly;/* Chanmodes indicating oper-only channels */
Hemen altına;
Kod: Kodu kopyalamak için üzerine çift tıklayın!
extern int32 chanusermode_owner;
Dosya: irc*.*/modules/protocol/ptlink.c
Bunu bulup;
Kod: Kodu kopyalamak için üzerine çift tıklayın!
static const struct modedata_init new_chanusermodes[] = {
{'a', {0x00000010,1,1,'.'}}, /* Channel owner */
};
Bununla değiştir;
Kod: Kodu kopyalamak için üzerine çift tıklayın!
static const struct modedata_init new_chanusermodes[] = {
{'a', {0x00000010,1,1,'.',MI_CHANOWNER}}, /* Channel owner */
};
Dosya: irc*.*/modules/protocol/trircd.c
Bunu bulup;
Kod: Kodu kopyalamak için üzerine çift tıklayın!
static const struct modedata_init new_chanusermodes[] = {
{'h', {0x00000004,1,1,'%'}}, /* Half-op */
{'a', {0x00000008,1,1,'~'}}, /* Protected (no kick or deop by +o) */
{'u', {0x00000010,1,1,'.'}}, /* Channel owner */
};
Bununla değiştir;
Kod: Kodu kopyalamak için üzerine çift tıklayın!
static const struct modedata_init new_chanusermodes[] = {
{'h', {0x00000004,1,1,'%'}}, /* Half-op */
{'a', {0x00000008,1,1,'~'}}, /* Protected (no kick or deop by +o) */
{'u', {0x00000010,1,1,'.',MI_CHANOWNER}}, /* Channel owner */
};
Dosya: irc*.*/modules/protocol/unreal.c
Bunu bulup;
Kod: Kodu kopyalamak için üzerine çift tıklayın!
static const struct modedata_init new_chanusermodes[] = {
{'h', {0x00000004,1,1,'%'}}, /* Half-op */
{'a', {0x00000008,1,1,'~'}}, /* Protected (no kick or deop by +o) */
{'q', {0x00000010,1,1,'*'}}, /* Channel owner */
};
Bununla değiştir;
Kod: Kodu kopyalamak için üzerine çift tıklayın!
static const struct modedata_init new_chanusermodes[] = {
{'h', {0x00000004,1,1,'%'}}, /* Half-op */
{'a', {0x00000008,1,1,'~'}}, /* Protected (no kick or deop by +o) */
{'q', {0x00000010,1,1,'*',MI_CHANOWNER}}, /* Channel owner */
};
Kod: Kodu kopyalamak için üzerine çift tıklayın!
make
make install
Servisleri restartlamanız gerekmektedir.
Umarım eksik bir kod vermemişimdir, hata alırsanız hatayı kopyalarsanız yardımcı olabilirim. Şuanda açık bir sunucuda bu şekilde +q yetkisini ayarladm, herhangi bir sorun yaşamadım, yaşayacağınızı sanmıyorum, yinede hata varsa belirtirseniz çözmeye çalışırım.
|
Alıntı: |
[02:09:19] *** Tekrar Girilmeye Çalışılıyor...
[02:09:19] *** Kanala Tekrar Giriliyor #sohbet
[02:09:19] *** ChanServ mod değiştirdi:+oq xwerswoodx xwerswoodx
|