/* Fichier de configuration pour UnrealIRCd 5
 *
 * Copiez ce fichier dans le répertoire conf/, renommez le
 * 'unrealircd.conf' et parcourez-le ligne par ligne (modifiez le !)
 *
 * Important : Toutes les lignes, sauf celles ne comportant qu'un {
 * ouvrant, doivent finir par un ; y compris };. C'est très important,
 * car si vous oubliez un ; quelque part, alors le parser du fichier de
 * configuration se plaindra et votre fichier ne sera pas lu correctement !
 * S'il s'agit de votre première expérience avec le fichier de configuration
 * d'UnrealIRCd, nous vous recommandons de vous documenter un peu à propos
 * de la syntaxe. Ça ne vous prendra que quelques minutes et vous aidera
 * beaucoup :
 * https://www.unrealircd.org/docs/Configuration#Configuration_file_syntax
 *
 * Documentation pour UnrealIRCd 5 (très complète !) :
 * https://www.unrealircd.org/docs/UnrealIRCd_5_documentation/fr
 *
 * Foire Aux Questions :
 * https://www.unrealircd.org/docs/FAQ
 *
 */

/* Ceci est un commentaire, ici, tout le texte est ignoré (type #1) */
// Ceci est aussi un commentaire, cette ligne est ignorée (type #2)
# Ceci est aussi un commentaire, cette ligne est ignorée (type #3)

/* UnrealIRCd utilise beaucoup les modules. Ceux-ci vous permettent
 * de personnaliser complètement les fonctionnalités que vous voulez
 * activer sur UnrealIRCd.
 * Voir : https://www.unrealircd.org/docs/Modules
 *
 * En utilisant la ligne include ci-dessous, nous indiquons à l'IRCd de
 * lire le fichier 'modules.default.conf' ce qui activera plus de 150
 * modules fournis avec UnrealIRCd. En d'autres termes, ceci activera
 * toutes les fonctionnalités disponibles d'UnrealIRCd.
 * Si vous configurez UnrealIRCd pour la première fois, nous vous
 * conseillons d'utiliser cette ligne. Après, lorsque tout fonctionnera
 * vous pourrez revenir personnaliser la liste (si vous le souhaitez).
 */
include "modules.default.conf";

/* Incluons aussi d'autres fichiers :
 * - help/help.conf pour le système d'aide sur IRC via /HELPOP
 * - badwords.conf pour le mode utilisateur et de salon +G
 * - spamfilter.conf comme exemple d'utilisation de spamfilter
 * - operclass.default.conf qui contient les classes d'opérateurs
 *   par défaut à utiliser dans vos blocs oper.
 */
include "help/help.conf";
include "badwords.conf";
//include "spamfilter.conf";
include "operclass.default.conf";

/* Le bloc me { } indique qui est le serveur.
 * Il définit le nom du serveur, une ligne d'informations et un identifiant
 * "sid" unique. L'id du serveur (sid) doit commencer par un chiffre suivit
 * de deux chiffres ou lettres. Le sid doit être unique sur votre réseau IRC
 * (chaque serveur doit avoir un sid différent).
 */
me {
	name "irc.example.org";
	info "Serveur ExampleNET";
	sid "001";
}

/* Le bloc admin { } définit ce que les utilisateurs verront en faisant
 * /ADMIN. C'est généralement des infos de contact de l'administrateur.
 */
admin {
	"Bob Smith";
	"bob";
	"adresse.email@example.org";
}

/* Les clients et serveurs sont placés dans des classes, que nous
 * définissons dans ces blocs class { }.
 * Les blocs de classe comportent les éléments suivants :
 * - pingfreq: à quelle fréquence envoyer un ping à l'utilisateur ou au
 *   serveur (en secondes)
 * - connfreq: à quelle fréquence on essaye de se connecter à ce serveur
 *   (en secondes)
 * - sendq: la taille maximale de la queue d'émission pour une connexion
 * - recvq: la taille maximale de la queue de réception pour une connexion
 *   (contrôle du flood)
 */

/* Classe pour des clients */
class clients
{
	pingfreq 90;
	maxclients 1000;
	sendq 200k;
	recvq 8000;
}

/* Classe spéciale pour des IRCOps avec des limites plus hautes */
class opers
{
	pingfreq 90;
	maxclients 50;
	sendq 1M;
	recvq 8000;
}

/* Classe pour des serveurs */
class servers
{
	pingfreq 60;
	connfreq 15; /* essayer de se connecter toutes les 15 sec */
	maxclients 10; /* nombre max de serveurs */
	sendq 5M;
}

/* Les blocs allow définissent quels clients peuvent se connecter au
 * serveur. Ils vous permettent d'ajouter un mot de passe ou de restreindre
 * le serveur à certaines IP seulement. C'est aussi là que vous configurez
 * le nombre maximum de connexions par IP.
 * Voir : https://www.unrealircd.org/docs/Allow_block
 */

/* Accepter tout le monde, mais seulement 5 connexions par IP */
allow {
	mask *;
	class clients;
	maxperip 5;
}

/* Exemple de bloc allow spécial pour une IP donnée :
 * Les utilisateurs sur cette IP doivent se connecter avec un mot de passe.
 * S'il est correct, alors autoriser 20 connexions sur cette IP.
 */
allow {
	mask 192.0.2.1;
	class clients;
	password "unmotdepassesecret";
	maxperip 20;
}

/* Les blocs oper définissent vos Opérateurs IRC.
 * Les Opérateurs IRC sont des utilisateurs avec des "droits en plus"
 * par rapport aux autres, par exemple, ils peuvent /KILL (déconnecter)
 * d'autres utilisateurs, faire se connecter des serveurs entre eux,
 * /JOIN des salons même s'ils sont bannis, etc ...
 * Voir aussi : https://www.unrealircd.org/docs/Oper_block
 */

/* Voici un exemple de bloc oper pour 'bobsmith' avec le mot de
 * passe 'test'.
 * Vous DEVEZ le modifier !!
 */
oper bobsmith {
	class opers;
	mask *@*;
	password "test";
	/* Les permissions Oper sont définies dans un bloc 'operclass'.
	 * Voir https://www.unrealircd.org/docs/Operclass_block
	 * UnrealIRCd est fourni avec des classes par défaut, voir la doc
	 * pour une liste complète. Nous avons choisi 'netadmin' ici.
	 */
	operclass netadmin;
	swhois "est un Administrateur du Réseau";
	vhost netadmin.example.org;
}

/* Les blocs listen définissent les ports sur lesquels le serveur écoute.
 * C'est-à-dire les ports que les clients et les serveurs utilisent pour
 * se connecter à ce serveur.
 * 
 * Syntaxe :
 * listen
 * { 
 *   ip <adresse ip>;
 *   port <numéro de port>;
 *   options {
 *     <options....>;
 *   }
 * }
 */

/* Port standard pour IRC 6667 */
listen {
	ip *;
	port 6667;
}

/* Port standard pour IRC sur SSL/TLS 6697 */
listen {
	ip *;
	port 6697;
	options { tls; }
}

/* Port SSL/TLS spécial pour la connexion entre serveurs */
listen {
	ip *;
	port 6900;
	options { tls; serversonly; }
}

/* NOTE : Si vous utilisez un serveur IRC avec plusieurs IP et que vous
 *        utilisez les blocs listen ci-dessus, vous aurez peut-être une
 *        erreur 'Address already in use' et l'IRCd ne démarrera pas.
 *        Celle-ci indique que vous devez préciser une IP spécifique
 *        au lieu de '*'. Exemple :
 *        listen 1.2.3.4:6667;
 *        Bien sûr, remplacez 1.2.3.4 par l'IP qui vous est assignée.
 */

/*
 * Les blocs link vous permettent de connecter plusieurs serveurs ensemble
 * pour former un réseau IRC.
 * Voir https://www.unrealircd.org/docs/Tutorial:_Linking_servers
 */
link hub.example.org
{
	incoming {
		mask *@something;
	}

	outgoing {
		bind-ip *; /* ou une IP précise */
		hostname hub.example.org;
		port 6900;
		options { tls; }
	}

	password "00:11:22:33:44:55:66:77:88:99:AA:BB:CC:DD:EE:FF"; /* Empreinte SSL de l'autre serveur */

	class servers;
}

/* Les U-lines donnent encore plus de pouvoir à certains serveurs.
 * Si vous utilisez des Services, vous devez les indiquer ici.
 * NE JAMAIS indiquer le nom d'un serveur UnrealIRCd normal ici !!!
 * (Si vous ne savez pas ce que sont les Services, voir :
 *   https://www.unrealircd.org/docs/Services )
 */
ulines {
	services.example.org;
}

/* Ici vous pouvez indiquer un mot de passe pour les commandes /DIE et
 * /RESTART, qui sont restreintes aux IRCops.
 * Il s'agit surtout d'une petite protection contre les redémarrages et
 * les coupures de serveur accidentels.
 */
drpass {
	restart "restart";
	die "die";
}

/* Le bloc log indique ce qui doit être journalisé et dans quel fichier.
 * Voir aussi https://www.unrealircd.org/docs/Log_block
 */

/* Ceci est une bonne valeur par défaut, elle journalise presque tout */
log "ircd.log" {
	flags {
		oper;
		connects;
		server-connects;
		kills;
		errors;
		sadmin-commands;
		chg-commands;
		oper-override;
		tkl;
		spamfilter;
	}
}

/* Avec des "alias", vous pouvez créer un alias comme /UNTRUC pour envoyer
 * un message à un utilisateur ou à un bot. Ils sont souvent utilisés pour
 * les services.
 *
 * Nous fournissons un certain nombre d'alias par défaut, voir les fichiers
 * du répertoire aliases/.
 * Pour exemple, ici nous ajoutons les alias pour les Services Anope.
 */
include "aliases/anope.conf";

/* Bannir des nicks pour qu'ils ne soient pas utilisables par des
 * utilisateurs normaux
 */
ban nick {
	mask "*C*h*a*n*S*e*r*v*";
	reason "Réservé aux Services";
}

/* Bannir une IP.
 * NB : vous pouvez aussi utiliser /KLINE, /GLINE et /ZLINE pour ça.
 */
ban ip {
	mask 195.86.232.81;
	reason "Je vous hais !";
}

/* Bannir un serveur - si ce serveur est connecté au réseau, nous nous
 * déconnecterons
 */
ban server {
	mask eris.berkeley.edu;
	reason "Va-t-en d'ici.";
}

/* Bannir un utilisateur - juste pour l'exemple, on utilise normalement
 * /KLINE or /GLINE pour ça
 */
ban user {
	mask *tirc@*.saturn.bbn.com;
	reason "Idiot";
}

/* Bannir un realname (ou 'gecos') */
ban realname {
	mask "Swat Team";
	reason "mIRKFORCE";
}

ban realname {
	mask "sub7server";
	reason "sub7";
}

/* Exceptions de ban et TKL. Vous permet d'exempter des utilisateurs des 
 * KLINE, GLINE, etc ...
 * Si vous êtes un IRCOp avec une IP statique (et qu'il n'y a que des
 * personnes de confiance sur cette IP), alors vous pouvez vous ajouter ici.
 * Ainsi, vous pourrez toujours vous connecter même si vous vous bannissez
 * accidentellement.
 */

/* except ban vous protège des KLINE et ZLINE */
except ban {
	mask *@192.0.2.1;
	// vous pouvez ajouter d'autres lignes mask à la suite
}

/* except ban avec le type 'all' vous protège des GLINE, GZLINE, QLINE, SHUN */
except ban {
	mask *@192.0.2.1;
	type all;
}

/* Avec un bloc deny dcc vous pouvez interdire des noms de fichiers dans
 * les échanges DCC
 */
deny dcc {
	filename "*sub7*";
	reason "Possible virus Sub7";
}

/* deny channel vous permet d'interdire des masques de noms de salons */
deny channel {
	channel "*warez*";
	reason "Le warez est illegal";
	class "clients";
}

/* Les VHosts (Virtual Hosts - Hôtes Virtuels) permettent aux utilisateurs
 * d'avoir un nom d'hôte différent.
 * Voir https://www.unrealircd.org/docs/Vhost_block
 */

/* Vhost d'exemple. Sur IRC, entrez /VHOST test test
 * NOTE : seuls les utilisateurs avec un nom d'hôte 'unrealircd.com'
 *        peuvent l'utiliser, donc modifiez vhost::mask avant de tester.
 */
vhost {
	vhost i.hate.microsefrs.com;
	mask *@unrealircd.com;
	login "test";
	password "test";
}

/* Vous pouvez inclure d'autres fichiers de configuration */
/* include "klines.conf"; */

/* Configuration du réseau */
set {
	network-name        "ExampleNET";
	default-server      "irc.example.org";
	services-server     "services.example.org";
	stats-server        "stats.example.org";
	help-channel        "#Help";
	hiddenhost-prefix   "Clk";
	prefix-quit         "Quit";

	/* Les clés de cloaking doivent être identiques sur tous les serveurs
	 * d'un réseau. Elles sont utilisées pour générer les noms d'hôtes
	 * masqués et doivent être gardées secrètes. Les clés doivent être
	 * 3 chaînes de 5 à 100 caractères aléatoires (entre 10 et 20 suffisent)
	 * et ne comporter que des minuscules (a-z), des majuscules (A-Z) et des
	 * chiffres (0-9). (voir l'exemple)
	 * NB : sur *NIX, vous pouvez exécuter './unreal gencloak' sur votre
	 *      serveur pour que Unreal génère 3 clés aléatoires pour vous.
	 */
	cloak-keys {
		"aoAr1HnR6gl3sJ7hVz4Zb7x4YwpW";
		"et une autre";
		"et une troisième";
	}
}

/* Configuration spécifique au serveur */

set {
	kline-address "indiquez.une.adresse.email"; /* e-mail ou URL indiquée lorsqu'un utilisateur est banni */
	modes-on-connect "+ixw"; /* modes utilisateur ajoutés lorsqu'un utilisateur se connecte */
	modes-on-oper    "+xws"; /* modes utilisateur ajoutés lorsqu'un utilisateur devient IRCOp */
	oper-auto-join "#opers"; /* salon que les IRCOps joignent automatiquement */
	options {
		hide-ulines; /* cacher les U-lines de /MAP et /LINKS */
		show-connect-info; /* afficher les messages "looking up your hostname" à la connexion */
	}

	maxchannelsperuser 10; /* nombre max de salons par utilisateur */

	/* Temps minimum qu'un utilisateur doit rester connecter avant de pouvoir
	 * utiliser un message de QUIT. Le but est pour réduire le spam.
	 */
	anti-spam-quit-message-time 10s;

	/* Ou indiquez un message de QUIT constant, ce qui fait que les raisons
	 * de /QUIT sont ignorées.
	 */
	/* static-quit "Le client a quitté";   */

	/* static-part fait la même chose pour /PART */
	/* static-part yes; */

	/* Protections anti-flood.
	 * Voir: https://www.unrealircd.org/docs/Set_block#set::anti-flood
	 */
	anti-flood {
	}

	/* Paramètres de Spamfilter */
	spamfilter {
		ban-time 1d; /* durée par défaut des bans *LINE ajoutés par spamfilter */
		ban-reason "Spam/Publicité"; /* raison par defaut */
		virus-help-channel "#help"; /* salon par défaut pour l'action 'viruschan' */
		/* except "#help"; salon à exempter de Spamfilter */
	}
}

/*
 * Un problème ou besoin d'aide supplémentaire ?
 * 1) https://www.unrealircd.org/docs/UnrealIRCd_4_documentation/fr
 * 2) https://www.unrealircd.org/docs/FAQ <- répond à 80% des questions !
 * 3) Si vous avez toujours des problèmes, vous pouvez aller sur 
 *    irc.unrealircd.org #unreal-support,
 *    mais nous exigeons que vous lisiez LA DOCUMENTATION et la FAQ d'abord !
 */
