Alt 16 Kasım 2023, 02:49   #1
Standart Nickserv Nick Link gosterme

Kod:
/* Nickname linking module.
 *
 * IRC Services is copyright (c) 1996-2009 Andrew Church.
 *     E-mail: <[email protected]>
 * Parts written by Andrew Kempe and others.
 * This program is free but copyrighted software; see the file COPYING for
 * details.
 */

#include "services.h"
#include "modules.h"
#include "conffile.h"
#include "language.h"
#include "commands.h"
#include "modules/operserv/operserv.h"
#include "modules/chanserv/chanserv.h"

#include "nickserv.h"
#include "ns-local.h"

/*************************************************************************/

static Module *module;
static Module *module_nickserv;

static int32 NSLinkMax;

/*************************************************************************/

static void do_link(User *u);
static void do_unlink(User *u);
static void do_listlinks(User *u);

static Command cmds[] = {
    { "LINK",     do_link,     NULL,  NICK_HELP_LINK,         -1,-1 },
    { "UNLINK",   do_unlink,   NULL,  -1,
    		NICK_HELP_UNLINK, NICK_OPER_HELP_UNLINK, },
    { "LISTLINKS",do_listlinks,NULL,  -1,
		NICK_HELP_LISTLINKS, NICK_OPER_HELP_LISTLINKS },
    { "SET MAINNICK", NULL,    NULL,  NICK_HELP_SET_MAINNICK, -1,-1 },
    { NULL }
};

/*************************************************************************/
/*************************** Command functions ***************************/
/*************************************************************************/

static void do_link(User *u)
{
    char *nick = strtok(NULL, " ");
    NickInfo *ni = u->ni, *ni2;
    NickGroupInfo *ngi = u->ngi;
    int n;

    if (readonly && !is_services_admin(u)) {
	notice_lang(s_NickServ, u, NICK_LINK_DISABLED);
    } else if (!nick) {
	syntax_error(s_NickServ, u, "LINK", NICK_LINK_SYNTAX);
    } else if (strlen(nick) > protocol_nickmax) {
	notice_lang(s_NickServ, u, NICK_TOO_LONG, protocol_nickmax);
    } else if (!valid_nick(nick)) {
	notice_lang(s_NickServ, u, NICK_INVALID, nick);
    } else if (!reglink_check(u, nick, NULL, NULL)) {
	notice_lang(s_NickServ, u, NICK_CANNOT_BE_LINKED, nick);
	return;
    } else if (!ni || !ngi || ngi == NICKGROUPINFO_INVALID) {
	notice_lang(s_NickServ, u, NICK_NOT_REGISTERED);
    } else if (!user_identified(u)) {
	notice_lang(s_NickServ, u, NICK_IDENTIFY_REQUIRED, s_NickServ);
    } else if (irc_stricmp(u->nick, nick) == 0) {
	notice_lang(s_NickServ, u, NICK_LINK_SAME, nick);
    } else if ((ni2 = get_nickinfo(nick)) != NULL) {
	int i;
	ARRAY_SEARCH_PLAIN(ngi->nicks, nick, irc_stricmp, i);
	if (i < ngi->nicks_count)
	    notice_lang(s_NickServ, u, NICK_LINK_ALREADY_LINKED, nick);
	else if (ni2->status & NS_VERBOTEN)
	    notice_lang(s_NickServ, u, NICK_X_FORBIDDEN, nick);
	else
	    notice_lang(s_NickServ, u, NICK_X_ALREADY_REGISTERED, nick);
    } else if (get_user(nick)) {
	notice_lang(s_NickServ, u, NICK_LINK_IN_USE, nick);
    } else if (ngi->nicks_count >= NSLinkMax) {
	notice_lang(s_NickServ, u, NICK_LINK_TOO_MANY, NSLinkMax);
    } else if (NSRegEmailMax && ngi->email && !is_services_admin(u)
	       && abs(n=count_nicks_with_email(ngi->email)) >= NSRegEmailMax) {
	notice_lang(s_NickServ, u, NICK_LINK_TOO_MANY_NICKS, n,
		    NSRegEmailMax);
    } else {
	ni2 = makenick(nick, NULL);
	if (ni->last_usermask)
	    ni2->last_usermask = sstrdup(ni->last_usermask);
	if (ni->last_realmask)
	    ni2->last_realmask = sstrdup(ni->last_realmask);
	if (ni->last_realname)
	    ni2->last_realname = sstrdup(ni->last_realname);
	if (ni->last_quit)
	    ni2->last_quit = sstrdup(ni->last_quit);
	ni2->time_registered = ni2->last_seen = time(NULL);
	ni2->nickgroup = ni->nickgroup;
	put_nickinfo(ni2);
	ARRAY_EXTEND(ngi->nicks);
	strscpy(ngi->nicks[ngi->nicks_count-1], nick, NICKMAX);
	put_nickgroupinfo(ngi);
	module_log("%s!%s@%s linked nick %s to %s",
		   u->nick, u->username, u->host, nick, u->nick);
	notice_lang(s_NickServ, u, NICK_LINKED, nick);
strscpy(last_link_nick, ni->nick, NICKMAX);
send_cmd(s_NickServ, "PRIVMSG #Services :[Ns] \2%s\2 nick'ini  \2%s\2 nick'i ile linkledi (link)", u->nick, nick);
	if (readonly)
	    notice_lang(s_NickServ, u, READ_ONLY_MODE);
    }
} /* do_link() */

/*************************************************************************/

static void do_unlink(User *u)
{
    NickInfo *ni = u->ni, *ni2;
    NickGroupInfo *ngi = u->ngi, *ngi2 = NULL;
    char *nick = strtok(NULL, " ");
    char *extra = strtok(NULL, " ");
    int is_servadmin = is_services_admin(u);
    int force = (extra != NULL && stricmp(extra,"FORCE") == 0);

    if (readonly && !is_servadmin) {
	notice_lang(s_NickServ, u, NICK_LINK_DISABLED);
    } else if (!nick || (extra && (!is_oper(u) || !force))) {
	syntax_error(s_NickServ, u, "UNLINK",
		     is_oper(u) ? NICK_UNLINK_OPER_SYNTAX
				: NICK_UNLINK_SYNTAX);
    } else if (force && !is_servadmin) {
	notice_lang(s_NickServ, u, PERMISSION_DENIED);
    } else if (!ni || !ngi || ngi == NICKGROUPINFO_INVALID) {
	notice_lang(s_NickServ, u, NICK_NOT_REGISTERED);
    } else if (!user_identified(u)) {
	notice_lang(s_NickServ, u, NICK_IDENTIFY_REQUIRED, s_NickServ);
    } else if (irc_stricmp(nick, u->nick) == 0) {
	notice_lang(s_NickServ, u, NICK_UNLINK_SAME);
    } else if (!(ni2 = get_nickinfo(nick)) || !ni2->nickgroup
	       || !(ngi2 = get_ngi(ni2)) || ngi2->nicks_count == 1) {
	notice_lang(s_NickServ, u, force ? NICK_UNLINK_NOT_LINKED
					 : NICK_UNLINK_NOT_LINKED_YOURS,
		    nick);
    } else if (!force && ni2->nickgroup != ni->nickgroup) {
	notice_lang(s_NickServ, u, NICK_UNLINK_NOT_LINKED_YOURS, nick);
    } else {
	int msg, i;
	char *param1;

	/* Adjust main nick if unlinking the current main nick (we set it
	 * to the caller's nick if the caller is unlinking their own nick,
	 * else the first in the list) */
	ARRAY_SEARCH_PLAIN(ngi2->nicks, ni2->nick, irc_stricmp, i);
	if (i == ngi2->mainnick) {
	    if (ngi == ngi2) {
		ARRAY_SEARCH_PLAIN(ngi->nicks, nick, irc_stricmp, i);
		if (i >= ngi->nicks_count) {
		    module_log("BUG: UNLINK: no entry in ngi->nicks[] for"
			       " nick %s", nick);
		} else {
		    ngi->mainnick = i;
		}
	    } else {
		ngi2->mainnick = 0;
	    }
	}
	/* Actually delete the nick */
	if (ni2->nickgroup != ni->nickgroup) {
	    delnick(ni2);
	    msg = NICK_X_UNLINKED;
	    param1 = ngi_mainnick(ngi2);
	} else {
	    delnick(ni2);
	    msg = NICK_UNLINKED;
	    param1 = ngi_mainnick(ngi);
	}
	notice_lang(s_NickServ, u, msg, nick, param1);
	module_log("%s!%s@%s unlinked nick %s from %s", u->nick,
		   u->username, u->host, nick, param1);
send_cmd(s_NickServ, "PRIVMSG #Services :[Ns] \2%s\2 nick'i \2%s\2  nick'i ile olan link bağlantısını ayırdı (unlink)", u->nick,  nick);
if (readonly)
	    notice_lang(s_NickServ, u, READ_ONLY_MODE);
    }
}

/*************************************************************************/

static void do_listlinks(User *u)
{
    char *nick = strtok(NULL, " ");
    NickInfo *ni;
    NickGroupInfo *ngi;
    int i;

    if (nick) {
	if (!is_services_admin(u)) {
	    syntax_error(s_NickServ, u, "LISTLINKS", NICK_LISTLINKS_SYNTAX);
	    return;
	} else if (!(ni = get_nickinfo(nick))) {
	    notice_lang(s_NickServ, u, NICK_X_NOT_REGISTERED, nick);
	    return;
	} else if (ni->status & NS_VERBOTEN) {
	    notice_lang(s_NickServ, u, NICK_X_FORBIDDEN, ni->nick);
	    return;
	} else if (!(ngi = get_ngi(ni))) {
	    notice_lang(s_NickServ, u, INTERNAL_ERROR);
	    return;
	}
    } else {
	if (!(ni = u->ni) || !(ngi = u->ngi) || ngi == NICKGROUPINFO_INVALID) {
	    notice_lang(s_NickServ, u, NICK_NOT_REGISTERED);
	    return;
	} else if (!user_identified(u)) {
	    notice_lang(s_NickServ, u, NICK_IDENTIFY_REQUIRED, s_NickServ);
	    return;
	}
    }

    notice_lang(s_NickServ, u, NICK_LISTLINKS_HEADER, ni->nick);
    ARRAY_FOREACH (i, ngi->nicks) {
	notice(s_NickServ, u->nick, "    %c%s",
	       i==ngi->mainnick ? '*' : ' ', ngi->nicks[i]);
    }
    notice_lang(s_NickServ, u, NICK_LISTLINKS_FOOTER, ngi->nicks_count);
}

/*************************************************************************/

/* SET MAINNICK handler */

static int do_set_mainnick(User *u, NickInfo *ni, NickGroupInfo *ngi,
			   const char *cmd, const char *param)
{
    int i;

    if (stricmp(cmd, "MAINNICK") != 0)
	return 0;
    ARRAY_SEARCH_PLAIN(ngi->nicks, param, irc_stricmp, i);
    if (i >= ngi->nicks_count) {
	notice_lang(s_NickServ, u, NICK_SET_MAINNICK_NOT_FOUND, param);
    } else {
	module_log("%s!%s@%s set main nick of %s (group %u) to %s",
		   u->nick, u->username, u->host, ngi_mainnick(ngi),
		   ngi->id, ngi->nicks[i]);
send_cmd(s_NickServ, "PRIVMSG #Services :[Ns] \2%s\2 nick'i  link'li nick listesinde olan \2%s\2 nick'ini temel nick olarak belirledi  (mainnick)", u->nick, ngi->nicks[i]);
	ngi->mainnick = i;
	put_nickgroupinfo(ngi);
	notice_lang(s_NickServ, u, NICK_SET_MAINNICK_CHANGED, param);
    }
    return 1;
}

/*************************************************************************/
/***************************** Module stuff ******************************/
/*************************************************************************/

const int32 module_version = MODULE_VERSION_CODE;

ConfigDirective module_config[] = {
    { "NSLinkMax",        { { CD_POSINT, CF_DIRREQ, &NSLinkMax } } },
    { NULL }
};

static int old_NICK_DROPPED   = -1;
static int old_NICK_X_DROPPED = -1;

/*************************************************************************/

int init_module(Module *module_)
{
    module = module_;

    if (NSLinkMax > MAX_NICKCOUNT) {
	module_log("NSLinkMax upper-bounded at MAX_NICKCOUNT (%d)",
		   MAX_NICKCOUNT);
	NSLinkMax = MAX_NICKCOUNT;
    }

    if (find_module("nickserv/oldlink")) {
	module_log("link and oldlink modules cannot be loaded at the same"
		   " time");
	return 0;
    }

    module_nickserv = find_module("nickserv/main");
    if (!module_nickserv) {
	module_log("Main NickServ module not loaded");
	return 0;
    }
    use_module(module_nickserv);

    if (!register_commands(module_nickserv, cmds)) {
	module_log("Unable to register commands");
	exit_module(0);
	return 0;
    }

    if (!add_callback(module_nickserv, "SET", do_set_mainnick)) {
	module_log("Unable to add callbacks");
	exit_module(0);
	return 0;
    }

    old_NICK_DROPPED = setstring(NICK_DROPPED, NICK_DROPPED_LINKS);
    old_NICK_X_DROPPED = setstring(NICK_X_DROPPED, NICK_X_DROPPED_LINKS);

    return 1;
}

/*************************************************************************/

int exit_module(int shutdown_unused)
{
#ifdef CLEAN_COMPILE
    shutdown_unused = shutdown_unused;
#endif

    if (old_NICK_DROPPED >= 0) {
	setstring(NICK_DROPPED, old_NICK_DROPPED);
	old_NICK_DROPPED = -1;
    }
    if (old_NICK_X_DROPPED >= 0) {
	setstring(NICK_X_DROPPED, old_NICK_X_DROPPED);
	old_NICK_X_DROPPED = -1;
    }

    if (module_nickserv) {
	remove_callback(module_nickserv, "SET", do_set_mainnick);
	unregister_commands(module_nickserv, cmds);
	unuse_module(module_nickserv);
	module_nickserv = NULL;
    }

    return 1;
}

/*************************************************************************/

Link.c dosyasinizla bu kodu degisebilirsiniz. make & make instal yaptiktan sonra islev gorecektir.


Daemon isimli Üye şimdilik offline konumundadır  
Alıntı ile Cevapla
Alt 16 Kasım 2023, 02:54   #2
Standart Cevap: Nickserv Nick Link gosterme

Ziyaretçilere içerik gizlenmiştir.

İçerikleri görebilmek için üye olmalı ve üye girişi yapmalısınız.
Giriş Yap Kayıt Ol




Sende [Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...]
birsevda isimli Üye şuanda  online konumundadır  
Alıntı ile Cevapla
Cevapla

Yer İmleri

Etiketler
gosterme, link, nick, nickserv


Şu anda bu konuyu görüntüleyen etkin kullanıcılar: 1 (0 üye ve 1 ziyaretçi)
 
Seçenekler
Stil

Yetkileriniz
Konu Acma Yetkiniz Yok
Cevap Yazma Yetkiniz Yok
Eklenti Yükleme Yetkiniz Yok
Mesajınızı Değiştirme Yetkiniz Yok

BB kodu Açık
Smileler Açık
[IMG] Kodları Açık
HTML-Kodu Kapalı
Trackbacks are Kapalı
Pingbacks are Kapalı
Refbacks are Kapalı



Bilgilendirme

Sitemiz bir genel forum sitesidir. Bu yüzden sitemize kaydolan herkes, kontrol edilmeksizin mesaj/konu/resim paylaşabilmektedir. Bu sebepten ötürü, sitemiz üzerinden paylaşılan mesajlar, konular ve resimlerden doğabilecek olan yasal sorumluluklar paylaşan kullanıcıya aittir. Forumkolik, hiçbir yasal sorumluluk kabul etmemektedir. Illegal herhangi bir faaliyet görülmesi durumunda İLETİŞİM sayfasından bildirim yapıldığı takdirde, mesaj, konu ya da resim en fazla 24 saat içerisinde silinecektir.

Forum Bilgileri

Forum Sahibi: KIRIK

Forum Manager: SaRe

Graphic Designer: Müptela

İ[email protected]

Powered by vBulletin® Version 3.8.12 -
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Tüm Zamanlar GMT +4 Olarak Ayarlanmış. Şuanki Zaman: 21:48.

FORUMKOLIK.NET ® © JRodix.Com Sunucularında Barınmaktadır.

Evden Eve Nakliyat Çekici Mobil Sohbet Evden Eve Nakliyat Yalın Üretim