Created
July 28, 2014 17:06
-
-
Save bgola/a38209d77b28b4e15368 to your computer and use it in GitHub Desktop.
telegram markov chain bot
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/python2 | |
# coding: utf-8 | |
from subprocess import Popen, PIPE, STDOUT | |
from functools import partial | |
import re, datetime, random, time | |
from glob import glob | |
CHAIN_LENGTH=2 | |
END = '\0' | |
ansi_escape = re.compile(r'\x1b[^m]+m') | |
data = {} | |
molejo = """Acorda criancada ta na hora da gente brincar (oba) | |
Brincar de pique-esconde,pique-cola e de pique-ta, ta, ta, ta | |
Nessa brincadeira tambam tem pique-bandeira e amarelinha pra quem gosta de pular | |
E aquela brincadeira de beijar. | |
Eh essa ? nao, | |
Eh essa ? eh | |
Pera, uva, maca ou salada mista ? | |
Salada mista (beija beija) | |
Brincadeira de crianca | |
Como e bom, como e bom | |
Guardo ainda na lembranca | |
Paz, amor e esperanca | |
Diga aonde voce vai | |
Que eu vou varrendo | |
Vou varrendo, vou varrendo, vou varrendo, vou varrendo | |
Oh menininha eu sou seu fan | |
Danco contigo ate de manha | |
Na danca da bruxinha | |
Danca preta, danca loura | |
Agora todo mundo | |
Na dancinha da vassoura | |
Varre pra esquerda | |
Varre pra direita | |
Levanta poeira | |
Que essa danca eh porreta... | |
Piti pi piti pi piti pau! | |
Mas tome cuidado | |
Com o cabo da vassoura | |
Eh pior do que cenoura | |
Voce pode se dar mal...""" | |
funk = """é o pet é o pet | |
Na madruga boladona sentada na esquina | |
se ela dança eu danço | |
pra dançar créu tem que ter disposição | |
pra dançar créu tem que ter habilidade | |
traição é traição, romance é romance, amor é amor e um lance é um lance | |
vem tchuchuca linda senta aqui com seu pretinho | |
Agora eu tô solteira e ninguém vai me segurar | |
Vem que vem que vem kicando | |
bota o dedinho na boca e faz cara de tarada | |
foge foge mulher maravilha foge com o super man | |
Eu vou pro baile procurar o meu negão | |
ela balança mas não pára | |
pra te enlouquecer todas que provaram não conseguem esquecer | |
Mas não se esqueça que eu sou vagabundo depois que a putaria começou rolar no mundo | |
Sou foda, Eu sou sinistro | |
Eu sou sinistro melhor que seu marido esculacho seu amigo no escuro eu sou um perigo | |
Faz quadradinho de 4 | |
Papai jogo mel , e mamãe deu carinho , essa mulher , e pedaço de mal caminho | |
Ela desce ela kika , ela sobe ela empina | |
Olha os amigos lá em cima , jogando dinheiro do camarote | |
Bate o pé , treme a bunda e faz meu bonde passar mal | |
Ostentação fora do normal , quem tem moto faz amor e quem não tem passa mal | |
Garoto sem limite, se amarra em Red Bull com Whisky | |
Ela só pensa em beijar, beijar, beijar, beijar | |
Glamurosaaaaaa | |
Pre-pa-ra | |
To com o cu pegando fogo! | |
Beijinho no ombro pro recalque passar longe!""" | |
def split(msg): | |
m = msg.split() | |
m.append(END) | |
for i in range(len(m) - CHAIN_LENGTH): | |
yield m[i:i + CHAIN_LENGTH + 1] | |
def process(m): | |
m = m.lower() | |
m.replace("(", "") | |
m.replace(")", "") | |
m.replace("[", "") | |
m.replace("]", "") | |
for y in re.split("[.!?;\n]", m): | |
for x in split(y): | |
key = tuple(z.replace(",", "") for z in x[:2]) | |
value = x[2] | |
data[key] = data.get(key, []) + [value] | |
def say(m): | |
m = m.replace(",", "") | |
x = m.split() | |
f = END | |
for i,w in enumerate(x[:-1]): | |
print data.get((w, x[i+1]), [END]) | |
f = random.choice(data.get((w, x[i+1]), [END])) | |
if f != END: | |
break | |
if f == END: | |
return m | |
return x[i] + " " + say("%s %s" % (x[i+1], f)) | |
try: | |
for line in open("input.txt"): | |
process(line) | |
except IOError: | |
pass | |
process(funk) | |
process(molejo) | |
p = Popen(['telegram'], stdin=PIPE, stdout=PIPE, stderr=STDOUT) | |
p.stdout.read(255) # read first bytes... | |
print "started" | |
line = "" | |
title = "voltei" | |
bomdia = """DYA! | |
Bundinha!! | |
Bom dia :D | |
Dia !!! :)""" | |
def chance(perc): | |
return random.randint(0, 99) > (100 - perc) | |
def wrt(m): | |
p.stdin.write("msg " + title.replace(" ", "_") + " " + m + "\n") | |
def img(i): | |
p.stdin.write("send_photo " + title.replace(" ", "_") + " " + i + "\n") | |
reading_msg = False | |
while True: | |
if line: | |
if ansi_escape.sub("", line)[0].startswith("[") or line.startswith(">"): | |
reading_msg = False | |
if "changed title" in line: | |
reading_msg = False | |
title = line.split("changed title to ")[-1].strip() | |
title = ansi_escape.sub("", title) | |
elif line.startswith("Chat "): | |
reading_msg = False | |
title = ":".join(line.split("Chat ")[1].split(":")[:-1]) | |
title = ansi_escape.sub("", title) | |
#img("disco.png") | |
elif title in line and ">>>" in line or reading_msg: | |
reading_msg = True | |
msg = line.split(">>> ")[-1] | |
if title in line: | |
user = ansi_escape.sub("", line.split(">>> ")[0].split(title)[-1].strip()) | |
else: | |
user = 'noone' | |
if "robo " in user.lower(): | |
pass | |
else: | |
if msg.lower().startswith("qotd"): | |
wrt("%s" % (Popen(["fortune"], stdout=PIPE).stdout.read().replace("\n", " "))) | |
elif msg.lower().startswith("hora certa do pupi") or msg.lower().startswith("pupi ta chegando?"): | |
wrt(random.choice(["atrasado ...", "chegando..", "quase la..", "hm...", "que horas sao?"])) | |
elif msg.startswith("hora certa"): | |
wrt(datetime.datetime.now().strftime("%H:%M:%S")) | |
elif "molejao" in msg.lower() and chance(70): | |
wrt("%s" % random.choice(molejo.split("\n"))) | |
elif "funk" in msg.lower(): | |
wrt("%s" % random.choice(funk.split("\n"))) | |
elif "piroca" in msg.lower(): | |
wrt("8%sD" % ("="*random.randint(1,40))) | |
elif "xxt" in msg.lower() or "xoxota" in msg.lower(): | |
img(random.choice(glob("pussy*.jpg"))) | |
elif msg.lower().startswith("dia ") or msg.lower().startswith("dia!") or msg.lower().startswith("dya") or "bom dia" in msg.lower() or "bom dya" in msg.lower() or "dia!" in msg.lower(): | |
wrt("%s" % (random.choice(bomdia.split("\n")))) | |
elif "perd" in msg.lower(): | |
wrt("queria dizer que: PERDI!!%s" % ("!" * random.randint(0,20))) | |
else: | |
ss = say(msg.lower()) | |
if ss.strip()[:-1] in msg.lower().strip().replace(",", ""): | |
print "SAME:", ss | |
pass #img(random.choice(glob("*.jpg") + glob("*.png"))) | |
else: | |
wrt(ss) | |
mm = msg.lower().strip().replace("\x1b[0m", "") | |
process(mm) | |
f = open("input.txt", 'a') | |
f.writelines([mm + "\n"]) | |
f.close() | |
time.sleep(0.5) | |
line_old = line | |
line = p.stdout.readline() | |
if line == line_old: | |
line = "" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment