[C#] Bot

« Older   Newer »
 
  Share  
.
  1. Nix()
     
    .

    User deleted


    Questo programma risponde alle domande, o ne fa lui, apprendendo dalle risposte che gli vengono date.
    Può essere usato ad esempio per fare un bot che risponde alle domande su un certo argomento (il database lo crei tu, con la modalità Apprendi sempre).
    Ci sono 3 modalità:
    -Apprendi e Rispondi: quella normale, risponde quando sa rispondere, altrimenti chiede cosa gli avresti risposto
    -Apprendi sempre: questa serve per quando dovete creare il database, non risponde mai, chiede sempre cosa gli diresti anche quando sa rispondere, aggiungendo la nuova risposta (visto che ci possono essere più risposte per una domanda)
    -Rispondi sempre: in questa invece risponde anche quando non sa rispondere, scegliendo quella che ha più parole in comune anche se sono poche (o una a caso, se non ce ne sono). Inoltre non memorizza niente.

    Il database è un file txt, che dovete chiamare DR.txt
    C'è già un piccolo database con qualche domanda (Scarica) che risponde a cose come "Ciao", "Salve", "Chi sei", "Stai zitto", ecc...
    CODICE
    using System;
    using System.Text;
    using System.Text.RegularExpressions;
    using System.Collections.Generic;

    namespace ConsoleApplication1
    {
      class Program
      {
         public static MatchCollection ln = ReadFile();
         public static Random rnd = new Random();
         public static bool apprendi = true; //Se salvare le risposte
         public static bool rispondi = true; //true = Se si ha la risposta, risponde altrimenti acquisisce una risposta; false = Acquisce sempre risposte
         public static int f = 60;

         public static void WriteLine(string s)
         {
            Console.WriteLine("BOT>>> " + s);
         }
         public static string ReadLine()
         {
            Console.Write("TU>>>  ");
            return Console.ReadLine();
         }

         //Trasforma in domanda
         public static string TD(string i)
         {
            return i.ToLower().Replace("!", "").Replace("?", "").Replace(".", "").Replace("'", "");
         }
         //Legge la domanda
         public static void Read(string pr = "", bool norisp = false)
         {
            string q = ReadLine();
            if (pr != "" && apprendi)
            {
               Assocq(pr, q);
            }
            string r = Getq(TD(q));
            if (!norisp)
            {
               if (r != "" && rispondi)
               {
                  if (rnd.Next(3) == 1)
                  {
                     WriteLine(r);
                     Write(Getrq(true), true);
                     return;
                  }
                  else
                  {
                     Write(r);
                     return;
                  }
               }
               else
               {
                  WriteLine(rnd.Next(3) == 2 ? q + "? Tu cosa diresti?" : "Tu cosa diresti?");
                  Read(q, true);
                  return;
               }
            }
            Read();
         }
         //Scrive la risposta
         public static void Write(string r ,bool norisp = false)
         {
            WriteLine(r);
            Read(r, norisp);
         }
         //Cerca la risposta
         public static string Getq(string q)
         {
            Dictionary<string, int> ht = new Dictionary<string, int>();
            Dictionary<string, CaptureCollection> ht2 = new Dictionary<string, CaptureCollection>();
            string max = "";
            int maxp = 0;
            foreach (Match i in ln)
            {
               string aN = i.Groups[1].Value;
               string a = TD(aN);
               if (a.Trim() == q.Trim())
               {
                  ht.Add(aN, 100);
               }
               else
               {
                  string[] aw = a.Split(' ');
                  string[] qw = q.Split(' ');
                  int n = 0;
                  int i2 = 0;
                  for (i2 = 0; i2 < aw.Length; i2++)
                  {
                     if (qw.Length > i2)
                     {
                        if (aw[i2] == qw[i2])
                        {
                           n += 1;
                        }
                     }
                  }
                  ht.Add(aN, n * 80 / aw.Length + rnd.Next(0, 10));
               }
               ht2.Add(aN, i.Groups[2].Captures);
            }
            foreach (string i in ht.Keys)
            {
               if (ht[i] > maxp)
               {
                  max = i;
                  maxp = ht[i];
               }
            }
            if (maxp > f || !apprendi)
            {
               return ht2[max][rnd.Next(ht2[max].Count)].Value.Replace("<<", "");
            }
            else
            {
               return "";
            }
         }
         //Prende una domanda casuale
         public static string Getrq(bool q = false)
         {
            ArrayList qslist = new ArrayList();
            foreach (Match i in ln)
            {
               string val = i.Groups[1].Value;
               if (q == true && !val.EndsWith("?"))
               {
                  continue;
               }
               qslist.Add(val);
            }
            return (string)qslist[rnd.Next(qslist.Count)];
         }
         //Salva la risposta
         public static void Assocq(string q, string r)
         {
            q = q.Replace("\n", "");
            r = r.Replace("\n", "");
            if (TD(q) != "" && TD(r) != "")
            {
               string rd = System.IO.File.ReadAllText("DR.txt");
               string qq = "|" + q + "<<";
               if (TD(rd).Contains(TD(qq)))
               {
                  rd = rd.Replace(qq, qq + r + "<<");
               }
               else
               {
                  rd += qq + r;
               }
               System.IO.File.WriteAllText("DR.txt", rd);
               ln = ReadFile();
            }
         }
         //Legge il file
         public static MatchCollection ReadFile()
          {
            return Regex.Matches(System.IO.File.ReadAllText("DR.txt"), @"\|([\w\W-[<|]]+)(<<[\w\W-[<|]]+)+");
         }
         public static void Main(string[] args)
         {
            Console.WriteLine("(0: Rispondi e Apprendi) (1: Apprendi Sempre) (2: Rispondi Sempre)");
            switch (Console.ReadLine()[0])
            {
               case '1': rispondi = false; break;
               case '2': apprendi = false; break;
               default:
                  Console.WriteLine("Hai scelto Rispondi e Apprendi. Inserisci un numero da 1 a 50");
                  Console.WriteLine("Se il numero è molto alto, il programma risponderà solo a domande molto simili (e se non può rispondere, chiederà \"Tu cosa diresti\", salvando la nuova domanda), mentre con un numero molto basso, risponderà anche se le domande non ci somigliano molto\n(Consigliati 10 e 20)");
                  f = int.Parse(Console.ReadLine()) + 50;
                  break;
            }
            Read();
         }
      }
    }
    //Nix()

    Download EXE
     
    .
  2. fole2
     
    .

    User deleted


    Ciao volevo sapere se fosse possibile far eseguire dei comandi a questo bot; ovvero se per esempio voglio far aprire google, scrivo start google e lui lo esegue, Grazie :)
     
    .
  3.  
    .
    Avatar

    Utente del forum

    Group
    Member
    Posts
    203

    Status
    Offline
    anche io vorrei saperlo
     
    .
2 replies since 18/9/2010, 13:59   193 views
  Share  
.