Chatbot em Python

Publicado por Fernando (última atualização em 17/09/2015)

[ Hits: 12.062 ]

Homepage: https://github.com/phoemur/

Download 6285.chatbot.py




Este script escrito em Python 3 faz login em um canal de IRC e fica aguardando. Ele responderá a mensagens privadas, simulando uma conversa, utilizando o protocolo do chatbot ALICE: http://alice.pandorabots.com/

O A.L.I.C.E (Artificial Linguistic Internet Computer Entity) é um chatterbot criado na Lehigh University por Richard S. Wallace, ativada em 1995, sendo um dos robôs mais populares da atualidade. É um projeto da internet que faz parte do Projeto Pandora. Este projeto envolve a criação de bots de todos os tipos, especialmente aqueles em bate-papo.

Este script em particular pega a resposta via HTTP e joga para o IRC e vice-versa. Edite o script para configurar o canal e o nickname desejados. Depois entre no canal com seu cliente favorito e converse com o robô (APENAS EM INGLÊS).

  



Esconder código-fonte

#!/usr/bin/env python3

import os
import re
import socket
import time
import urllib.request
import urllib.parse
import http.cookiejar

from random import randint


# SETTINGS
SERVER = 'irc.freenode.net'
PORT = 6667
CHANNEL = '##slackware'
NICK = 'chatbot_test'


class chatter(object):
    def __init__(self):
        self.url='http://sheepridge.pandorabots.com/pandora/talk?botid=b69b8d517e345aba&skin=custom_input'
        self.cj = http.cookiejar.CookieJar()
        self.opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(self.cj))
        self.opener.addheaders = [('User-agent', 'Mozilla/5.0 (Windows; U; Windows NT 6.1; rv:2.2) Gecko/20110201'),
                                  ('Accept', 'text/html, text/plain, text/css, text/sgml, */*;q=0.01'),
                                  ('Cache-Control', 'no-cache')]

    def talk(self, m):
        self.data = {'input': str(m)}

        with self.opener.open(self.url, urllib.parse.urlencode(self.data).encode('UTF-8')) as url:
            content = url.read().decode('UTF-8')

        repl = re.search('<b>A.L.I.C.E.:</b> (.*)<br/>', content)
        return str(repl.group(1))


def main():

    # Create socket and log in
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.connect((SERVER, PORT))
    s.send('NICK {}\r\n'.format(NICK).encode('ISO-8859-1'))
    s.send('USER {} {} {} .:\n'.format(NICK, NICK, NICK).encode('ISO-8859-1'))
    s.send('JOIN {}\r\n'.format(CHANNEL).encode('ISO-8859-1'))
    time.sleep(2)
    print(s.recv(1024).decode('ISO-8859-1'))

    # Mainloop
    chatbot = chatter()
    while True:
        msg = s.recv(4096).decode('ISO-8859-1')
        if len(msg) > 0:
            print(msg)
        if msg[0:4] == 'PING':
            s.send(msg.replace('PING', 'PONG').encode('ISO-8859-1'))
        if re.search('PRIVMSG {} :'.format(NICK), msg):
            try:
                subject = msg.split('!')[0].lstrip(':')
                question = msg.split(':')[2].rstrip()
                answer = chatbot.talk(question)
                if re.search('[Jj]udge', answer):
                    answer = re.sub('[Jj]udge', subject, answer)

                time.sleep(randint(3, 12))
                s.send('PRIVMSG {} :{}\r\n'.format(subject, answer).encode('ISO-8859-1'))
            except:
                continue


if __name__ == '__main__':
    main()

Scripts recomendados

hicmp - Detector de hosts

Cliente/Servidor Usando Python

Conversor de String em Hex para String plana

Quebrador de links

omdb-gui


  

Comentários

Nenhum comentário foi encontrado.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts