Page 1 sur 1

BOT IRC

Publié : sam. 04/sept./2004 22:47
par Oliv
Il est pas encore très bien codé mais il fonctionne bien donc je vous le donne :wink:

Code : Tout sélectionner

InitNetwork()

;- Declarations
; Constantes
Enumeration
  #Messages
  #OK
  #Envoi
EndEnumeration

; Structure
Structure Infos
  Serveur.s
  Port.l
  Nom.s
  CID.l
  Salle.s
EndStructure

; Mémoires
*Buffer.l = AllocateMemory(1)

; Variables
Eol.s = Chr(13) + Chr(10)
Global Sortie.b,Message.s,Infos.Infos,Eol,Nombre_De_Messages.f,*Buffer

Infos\Serveur ="irc.memphisnet.org" ;"irc.quakenet.org" ; "irc.memphisnet.org"
Infos\Port = 6667
Infos\Nom = "Barman"
Infos\Salle = "#help"


Infos\CID = OpenNetworkConnection(Infos\Serveur,Infos\Port)
If Infos\CID = 0
  End
EndIf

OpenWindow(0,0,0,600,400,#PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_ScreenCentered,"Barman") 
CreateGadgetList(WindowID(0))
  EditorGadget(#Messages,5,5,590,335)
  StringGadget(#Envoi,5,345,520,50,"")
  ButtonGadget(#OK,530,345,65,50,"OK")
  
Procedure Parole(Texte.s)
  SendNetworkString(Infos\CID,"PRIVMSG " + Infos\Salle + " :" + Texte + Eol)
EndProcedure

Procedure Bot()
  text$ = PeekS(*Buffer)
  text$ = LCase(text$)
  Nombre_De_Messages + 1
  Pseudo.s = StringField(text$,1,"!")
  Pseudo = Right(Pseudo,Len(Pseudo) - 1 )
  If (FindString(LCase(text$),"salut",1) Or FindString(LCase(text$),"hello",1) Or FindString(LCase(text$),"bonjour",1)) And Pseudo <> Infos\Nom
    Parole("Bienvenue à toi " + Pseudo + ",que puis-je pour toi ?")
  EndIf
  If (FindString(RemoveString(LCase(text$)," "),"aurevoir",1) Or FindString(RemoveString(LCase(text$)," "),"++",1) Or FindString(RemoveString(LCase(text$)," "),"a+",1)) And Pseudo <> Infos\Nom
    Select Random(4)
      Case 0
        Parole("N'oubliez pas le pourboire, merci.")
      Case 1
        Parole("A bientôt " + Pseudo + ".")
      Default
        Parole("Aurevoir " + Pseudo + ".")
    EndSelect
  EndIf
  If FindString(RemoveString(LCase(text$)," "),"bonnenuit",1)And Pseudo <> Infos\Nom
    If Hour(Date()) < 20  And Hour(Date()) > 8
      ParOL.s = "Il n'est pas l'heure de se coucher"
    Else
      ParOL.s = "Bonne nuit " + pseudo$
    EndIf
  EndIf
    If FindString(text$,"*biberon",1)
      Parole("Tiens mon petit")
    EndIf
    If FindString(text$,"*cafe",1)
      Parole("Vous avez raison, ce serait agréable, toutefois je n'ai pas envie d'en servir maintenant.")
    EndIf
    If FindString(text$,"*heure",1)
      Parole("Il est " + Str(Hour(Date())) + "H" + Str(Minute(Date())))
    EndIf
    If FindString(text$,"*date",1)
      Parole("Nous sommes le " + Str(Day(Date())) + "/" + Str(Month(Date())) + "/" + Str(Year(Date())) + " et il est " + Str(Hour(Date())) + "H" + Str(Minute(Date())))
    EndIf
    If FindString(text$,"*coca",1)
      Parole("Un Coca pour " + Pseudo + ".")
    EndIf
    If FindString(text$,"*biere",1) Or FindString(text$,"*bierre",1)
      Parole("Cette biere est-elle assez fraîche " + Pseudo + " ?")
    EndIf
    If FindString(text$,"*nombre de messages",1)
      Parole("Il y a eu " + Str(Nombre_de_Messages) + " messages depuis que je suis en service.")
    EndIf
    If FindString(text$,"ptin",1) Or FindString(text$,"putain",1) Or FindString(text$,"fuck",1) Or FindString(text$,"ta gueule",1) Or FindString(text$,"encule",1) Or FindString(text$,"enculé",1) Or FindString(text$,"salop",1) Or FindString(text$,"salope",1) Or FindString(text$,"encul",1)
      Parole("tu pourrais être plus poli(e) " + Pseudo + ".")
    EndIf
    If FindString(text$,"shit",1) Or FindString(text$,"cocaine",1) Or FindString(text$,"cocaïne",1) Or FindString(text$,"petard",1)
      Parole("La drogue est illégale, mais parfois c'est bien de ce détendre...")
    EndIf
    If FindString(text$,"*barman help",1)
      ParOL.s = "Je répond à un synonyme de " + Chr(34) + "Bonjour" + Chr(34) + Chr(10)
      ParOL + "Je répond à "  + Chr(34) + "Aurevoir , a+ , ++" + Chr(34) + Chr(10)
      Parole("Je donne le biberon à la commande "  + Chr(34) + "*Biberon" + Chr(34))
      Parole("Je donne l'heure à la commande "  + Chr(34) + "*Heure" + Chr(34))
      Parole("Je donne le nombre de messages que j'ai vu avec la commande "  + Chr(34) + "*Nombre de messages" + Chr(34))
      Parole("Je donne un cafe à la commande "  + Chr(34) + "*Cafe" + Chr(34))
      Parole("Je donne une bierre à la commande "  + Chr(34) + "*Biere" + Chr(34))
      Parole("Je donne un coca à la commande "  + Chr(34) + "*Coca" + Chr(34))
      Parole("Je donne de l'aide à la commande  "  + Chr(34) + "*Barman help" + Chr(34))
      Parole("Je donne la date (Jour/Mois/Année) et l'heure à la commande "  + Chr(34) + "*Date" + Chr(34))
      Parole("Je réagis à certains noms de drogues")
      Parole("Je réagis aux insultes")
      Parole("Vous n'êtes pas obligés de respecter la casse des commandes.")
    EndIf
EndProcedure


Procedure IRC()
  Select NetworkClientEvent(Infos\CID)
    Case 2
      FreeMemory(*Buffer)
      *Buffer = AllocateMemory(64000)
      ReceiveNetworkData(Infos\CID,*Buffer,64000)
      AddGadgetItem(#Messages,-1,PeekS(*Buffer))
      
      ; Connection
      If FindString(PeekS(*Buffer),"Looking up your hostname",1)
        SendNetworkString(Infos\CID,"NICK " + Infos\Nom + EOL)
        SendNetworkString(Infos\CID,"USER Fragmentedrain localhost irc_server :SilEntBob" + EOL)
        SendNetworkString(Infos\CID,"JOIN " + "mulderland" + EOL)
        SendNetworkString(Infos\CID,"JOIN " + Infos\Nom + EOL)
        AddGadgetItem(#Messages,-1,"passe")
      EndIf
      
      ; Ping/Pong
      If FindString(PeekS(*Buffer),"PING",1)
        Message.s = StringField(PeekS(*Buffer),2,"PING :")
        SendNetworkString(Infos\CID,"PONG " + Mid(Message,6,8) + EOL)
      EndIf

      Bot()
      
  EndSelect
EndProcedure



Repeat
  Select WindowEvent()
    Case #PB_Event_CloseWindow
      Sortie = 1
    Case #PB_Event_Gadget
      Select EventGadgetID()
        Case #OK
          Select LCase(GetGadgetText(#Envoi))
            Case "join"
              SendNetworkString(Infos\CID,"JOIN " + Infos\Salle + EOL)
            Default
              ; SendNetworkString(Infos\CID,"PRIVMSG " + Infos\Salle + " :" + GetGadgetText(#Envoi) + EOL)
              SendNetworkString(Infos\CID,GetGadgetText(#Envoi) + EOL)
              Debug GetGadgetText(#Envoi) + EOL
          EndSelect
          SetGadgetText(#Envoi,"")
      EndSelect
  EndSelect
  IRC()
  Delay(5)
Until Sortie = 1