Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
IRC-BotEngine - BotEngine.cs

BotEngine.cs

Caricato da: Crybot
Scarica il programma completo

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Collections;
  4. using System.Linq;
  5. using System.Text;
  6. using Meebey.SmartIrc4net;
  7. using System.Threading;
  8. using System.Timers;
  9. using System.Numerics;
  10. using ChatterBotAPI;
  11.  
  12. namespace IrcBot
  13. {
  14.     class BotEngine
  15.     {
  16.  
  17.         #region Campi
  18.  
  19.         static private int port = Configuration.Port;
  20.         static private string server = Configuration.Server;
  21.         static private string channelName = Configuration.ChannelName;
  22.         static private string nickname = Configuration.Nickname;
  23.  
  24.         static private IrcClient irc = new IrcClient();
  25.         static List<Command> commandsList = new List<Command>();
  26.         static Hashtable permissionTable = new Hashtable();
  27.  
  28.         #endregion
  29.  
  30.         #region Proprieta`
  31.  
  32.         #endregion
  33.  
  34.         #region Costruttore
  35.  
  36.         public BotEngine()
  37.         {
  38.             #region Eventi
  39.  
  40.             irc.OnReadLine += new ReadLineEventHandler(OnReadLine);
  41.             irc.OnConnected += new EventHandler(OnConnected);
  42.             irc.OnRawMessage += new IrcEventHandler(OnRawMessage);
  43.             irc.OnQueryMessage += new IrcEventHandler(OnQueryMessage);
  44.             irc.OnJoin += new JoinEventHandler(OnJoin);
  45.             irc.OnDisconnected += new EventHandler(OnDisconnected);
  46.             irc.OnNickChange += new NickChangeEventHandler(OnChangeNick);
  47.  
  48.             permissionTable.Add(Configuration.AdminNickmane, 10);
  49.  
  50.             #endregion
  51.  
  52.             #region Settaggi
  53.  
  54.             irc.Encoding = System.Text.Encoding.UTF8;
  55.             irc.ActiveChannelSyncing = true;
  56.             irc.SendDelay = 0;
  57.  
  58.             #endregion
  59.         }
  60.  
  61.         #endregion
  62.  
  63.         #region Gestione Eventi
  64.  
  65.         private void OnJoin(object sender, JoinEventArgs e)
  66.         {
  67.             //SendMessage(SendType.Action, channelName, "entrato nuovo utente");
  68.         }
  69.         private void OnQueryMessage(object sender, IrcEventArgs e)
  70.         {
  71.             Console.WriteLine(e.Data.Type + ":");
  72.             Console.WriteLine("(private) <" + e.Data.Nick + "> " + e.Data.Message);
  73.         }
  74.         private void OnRawMessage(object sender, IrcEventArgs e)
  75.         {
  76.             Console.WriteLine(e.Data.Type + ":");
  77.             Console.WriteLine("(" + e.Data.Channel + ") <" + e.Data.Nick + "> " + e.Data.Message);
  78.  
  79.             if (e.Data.Message == null)
  80.                 return;
  81.  
  82.             if (e.Data.Channel == null)
  83.                 return;
  84.  
  85.             if (e.Data.Nick == null)
  86.                 return;
  87.  
  88.             string Message = e.Data.Message;
  89.  
  90.             // AGGIORNAMENTO ED ESECUZIONE DEI COMANDI
  91.             foreach (Command command in commandsList)
  92.             {
  93.                 if (command.CanPerform)
  94.                     command.Update(e);
  95.  
  96.                 if (Message.StartsWith(command.CommandText))
  97.                     if ((int)permissionTable[e.Data.Nick] >= command.Permission)
  98.                         command.Execute(e);
  99.             }
  100.         }
  101.         private void OnConnected(object sender, EventArgs e)
  102.         {
  103.             Console.WriteLine("Connected.");
  104.             //SendMessage(SendType.Message, channelName, "Buongiorno da StupidBot");
  105.         }
  106.         private void OnDisconnected(object sender, EventArgs e)
  107.         {
  108.             Console.WriteLine("Disconnected from server");
  109.         }
  110.         private void OnReadLine(object sender, ReadLineEventArgs e)
  111.         {
  112.             if (e.Line.StartsWith("PING"))
  113.             {
  114.                 string server = e.Line.Split(' ')[1];
  115.                 irc.RfcPong(server, Priority.Critical);
  116.                 Console.WriteLine("Responded to ping at {0}.", DateTime.Now.ToShortTimeString());
  117.             }
  118.         }
  119.         private void OnChangeNick(object sender, NickChangeEventArgs e)
  120.         {
  121.             int permission = (int)permissionTable[e.OldNickname];
  122.             permissionTable.Remove(e.OldNickname);
  123.             permissionTable.Add(e.NewNickname, permission);
  124.             Console.WriteLine(e.OldNickname + " Changed to: " + e.NewNickname);
  125.         }
  126.  
  127.         #endregion
  128.  
  129.         #region Metodi
  130.  
  131.         private void Listen()
  132.         {
  133.             while (true)
  134.             {
  135.                 try
  136.                 {
  137.                     irc.ListenOnce();
  138.                 }
  139.                 catch
  140.                 {
  141.  
  142.                 }
  143.             }
  144.         }
  145.         private void ReadCommands()
  146.         {
  147.             while (true)
  148.             {
  149.                 irc.WriteLine(Console.ReadLine());
  150.             }
  151.         }
  152.  
  153.         public void StartConnection()
  154.         {
  155.             irc.Connect(server, port);
  156.             irc.Login(nickname, nickname, 0, nickname);
  157.             irc.RfcJoin(channelName);
  158.  
  159.             new Thread(new ThreadStart(ReadCommands)).Start();
  160.  
  161.             Listen(); // LOOP
  162.             irc.Disconnect();
  163.  
  164.         }
  165.         public void AddCommand(Command command)
  166.         {
  167.             commandsList.Add(command);
  168.         }
  169.  
  170.         public static List<Command> GetCommandsList()
  171.         {
  172.             return commandsList;
  173.         }
  174.         public static Channel GetChannel(string channelName)
  175.         {
  176.            return irc.GetChannel(channelName);
  177.         }
  178.         public static bool ContainsUser(string channelName, string userNick)
  179.         {
  180.             Channel channel = GetChannel(channelName);
  181.  
  182.             foreach (ChannelUser user in channel.Users.Values)
  183.             {
  184.                 if (user.Nick == userNick)
  185.                     return true;
  186.             }
  187.             return false;
  188.         }
  189.         public static void JoinChannel(string channelName)
  190.         {
  191.             irc.RfcJoin(channelName);
  192.         }
  193.         public static int CountUsers(string channelName)
  194.         {
  195.             return GetChannel(channelName).Users.Count;
  196.         }
  197.         public static void Disconnect()
  198.         {
  199.             irc.Disconnect();
  200.         }
  201.         public static void KickUser(string channelName, string userToKick)
  202.         {
  203.             irc.RfcKick(channelName, userToKick);
  204.         }
  205.         public static void ChangePermissionValue(string key, int value)
  206.         {
  207.             permissionTable[key] = value;
  208.         }
  209.         public static void AddPermissionPair(string key, int value)
  210.         {
  211.             permissionTable.Add(key, value);
  212.         }
  213.         public static bool ContainsPermissionKey(string key)
  214.         {
  215.             return permissionTable.ContainsKey(key);
  216.         }
  217.         public static void SendMessage(SendType sendType, string channelName, string message)
  218.         {
  219.             irc.SendMessage(sendType, channelName, message);
  220.         }
  221.  
  222.  
  223.         #endregion
  224.     }
  225. }