another big diff. tested some things
This commit is contained in:
parent
99cf1c5822
commit
649a56f6c2
|
@ -0,0 +1,2 @@
|
||||||
|
*.pyc
|
||||||
|
__pycache__/
|
|
@ -10,6 +10,7 @@ import fileinput
|
||||||
import random
|
import random
|
||||||
import re
|
import re
|
||||||
import subprocess
|
import subprocess
|
||||||
|
import textwrap
|
||||||
import time
|
import time
|
||||||
import datetime
|
import datetime
|
||||||
|
|
||||||
|
@ -17,7 +18,6 @@ import inflect
|
||||||
from rhymesWith import getRhymes
|
from rhymesWith import getRhymes
|
||||||
from rhymesWith import rhymeZone
|
from rhymesWith import rhymeZone
|
||||||
from defineWord import defWord
|
from defineWord import defWord
|
||||||
from rainbow import makeRainbow
|
|
||||||
import welch
|
import welch
|
||||||
import evil
|
import evil
|
||||||
import tumblr
|
import tumblr
|
||||||
|
@ -49,7 +49,7 @@ parser.add_option(
|
||||||
"-n",
|
"-n",
|
||||||
"--nick",
|
"--nick",
|
||||||
dest="nick",
|
dest="nick",
|
||||||
default="tildebot",
|
default="banterbot",
|
||||||
help="the nick to use",
|
help="the nick to use",
|
||||||
metavar="NICK",
|
metavar="NICK",
|
||||||
)
|
)
|
||||||
|
@ -200,7 +200,7 @@ def define_word(channel, user, text):
|
||||||
|
|
||||||
|
|
||||||
def make_rainbow(channel, user, text):
|
def make_rainbow(channel, user, text):
|
||||||
rbword = makeRainbow(text[9:])
|
rbword = util.makeRainbow(text[9:])
|
||||||
util.sendmsg(ircsock, channel, rbword)
|
util.sendmsg(ircsock, channel, rbword)
|
||||||
|
|
||||||
|
|
||||||
|
@ -320,37 +320,28 @@ def mug_off(channel):
|
||||||
|
|
||||||
|
|
||||||
def rollcall(channel):
|
def rollcall(channel):
|
||||||
util.sendmsg(
|
text = """
|
||||||
ircsock,
|
|
||||||
channel,
|
|
||||||
"""
|
|
||||||
U wot m8? I score all the top drawer #banter and #bantz on this channel!
|
U wot m8? I score all the top drawer #banter and #bantz on this channel!
|
||||||
Find new top-shelf banter with !newbanter, !rhymes, and !define.
|
Find new top-shelf banter with !newbanter, !rhymes, and !define.
|
||||||
Look up things with !acronym and !whosaid.
|
Look up things with !acronym and !whosaid.
|
||||||
Make your chatter #legend with !rainbow, !toilet, and !figlet.
|
Make your chatter #legend with !rainbow, !toilet, and !figlet.
|
||||||
Find interesting things with !xkcd and !wiki-philosophy.
|
Find interesting things with !xkcd and !wiki-philosophy.
|
||||||
Get jokes with !welch and !evil
|
Get jokes with !welch and !evil
|
||||||
""",
|
"""
|
||||||
)
|
for line in textwrap.dedent(text).split("\n"):
|
||||||
|
if line == "":
|
||||||
|
continue
|
||||||
def get_user_from_message(msg):
|
util.sendmsg(ircsock, channel, line)
|
||||||
try:
|
|
||||||
i1 = msg.index(":") + 1
|
|
||||||
i2 = msg.index("!")
|
|
||||||
return msg[i1:i2]
|
|
||||||
except ValueError:
|
|
||||||
return ""
|
|
||||||
|
|
||||||
|
|
||||||
def listen(botnick):
|
def listen(botnick):
|
||||||
while 1:
|
while 1:
|
||||||
|
|
||||||
ircmsg = ircsock.recv(2048)
|
ircmsg = ircsock.recv(2048).decode()
|
||||||
ircmsg = ircmsg.strip("\n\r")
|
ircmsg = ircmsg.strip("\n\r")
|
||||||
|
|
||||||
if ircmsg[:4] == "PING":
|
if ircmsg[:4] == "PING":
|
||||||
ping(ircmsg.split(" ")[1])
|
util.ping(ircsock, ircmsg)
|
||||||
|
|
||||||
formatted = util.format_message(ircmsg)
|
formatted = util.format_message(ircmsg)
|
||||||
|
|
||||||
|
@ -359,7 +350,7 @@ def listen(botnick):
|
||||||
|
|
||||||
# print formatted
|
# print formatted
|
||||||
|
|
||||||
time, user, command, channel, messageText = formatted.split("\t")
|
_time, user, _command, channel, messageText = formatted.split("\t")
|
||||||
|
|
||||||
if ircmsg.find("#banter") != -1 or ircmsg.find("#bantz") != -1:
|
if ircmsg.find("#banter") != -1 or ircmsg.find("#bantz") != -1:
|
||||||
score_banter(channel, user, messageText)
|
score_banter(channel, user, messageText)
|
||||||
|
@ -418,7 +409,7 @@ def listen(botnick):
|
||||||
mug_off(channel)
|
mug_off(channel)
|
||||||
|
|
||||||
if ircmsg[:4] == "PING":
|
if ircmsg[:4] == "PING":
|
||||||
util.ping(ircsock, msg)
|
util.ping(ircsock, ircmsg)
|
||||||
|
|
||||||
sys.stdout.flush()
|
sys.stdout.flush()
|
||||||
time.sleep(1)
|
time.sleep(1)
|
||||||
|
|
|
@ -5,7 +5,7 @@ import random
|
||||||
|
|
||||||
def define(word):
|
def define(word):
|
||||||
defs = []
|
defs = []
|
||||||
url = "http://www.merriam-webster.com/dictionary/%s" % word
|
url = "http://www.merriam-webster.com/dictionary/{}".format(word)
|
||||||
soup = BeautifulSoup(urllib.urlopen(url).read(), "html.parser")
|
soup = BeautifulSoup(urllib.urlopen(url).read(), "html.parser")
|
||||||
head = soup.find("div", id="headword")
|
head = soup.find("div", id="headword")
|
||||||
if head:
|
if head:
|
||||||
|
@ -19,9 +19,8 @@ key = open("/home/krowbar/.secret/key").readline().rstrip()
|
||||||
|
|
||||||
def defWord(word, short=True):
|
def defWord(word, short=True):
|
||||||
defs = []
|
defs = []
|
||||||
url = "http://www.dictionaryapi.com/api/v1/references/collegiate/xml/%s?key=%s" % (
|
url = "http://www.dictionaryapi.com/api/v1/references/collegiate/xml/{}?key={}".format(
|
||||||
word,
|
word, key
|
||||||
key,
|
|
||||||
)
|
)
|
||||||
soup = BeautifulSoup(urllib.urlopen(url).read(), "html5lib")
|
soup = BeautifulSoup(urllib.urlopen(url).read(), "html5lib")
|
||||||
entry = soup.find("entry")
|
entry = soup.find("entry")
|
||||||
|
|
|
@ -7,8 +7,9 @@ dictionary = "/usr/share/dict/american-english-small"
|
||||||
BAD_WORDS_FILE = "badwords.txt"
|
BAD_WORDS_FILE = "badwords.txt"
|
||||||
|
|
||||||
|
|
||||||
def get_wordlist():
|
def gen_wordlist():
|
||||||
# I feel weird calling this "get_wordlist" when it's a generator without calling out that I do in fact realise it's weird - ~deltawitch
|
# I feel weird calling this "get_wordlist" when it's a generator without calling out that I do in fact realise it's weird - ~deltawitch
|
||||||
|
# how about gen_wordlist
|
||||||
with open(BAD_WORDS_FILE, "r") as fp:
|
with open(BAD_WORDS_FILE, "r") as fp:
|
||||||
bad_words = set(fp)
|
bad_words = set(fp)
|
||||||
|
|
||||||
|
@ -18,14 +19,11 @@ def get_wordlist():
|
||||||
|
|
||||||
|
|
||||||
def get_puzzle():
|
def get_puzzle():
|
||||||
dict_words = list(get_wordlist())
|
dict_words = list(gen_wordlist())
|
||||||
words = random.sample(dict_words, 3)
|
words = random.sample(dict_words, 3)
|
||||||
key = random.randrange(0, 3) # get values 1-3
|
key = random.randrange(0, 3) # get values 1-3
|
||||||
puzzle = (
|
puzzle = "When alphebetized, what is the {} in {}?".format(
|
||||||
"When alphebetized, what is the "
|
p.ordinal(p.number_to_words(key + 1)), ", ".join(words)
|
||||||
+ p.ordinal(p.number_to_words(key + 1))
|
|
||||||
+ " in "
|
|
||||||
+ ", ".join(words)
|
|
||||||
)
|
)
|
||||||
words.sort()
|
words.sort()
|
||||||
answer = words[key]
|
answer = words[key]
|
||||||
|
@ -34,14 +32,12 @@ def get_puzzle():
|
||||||
|
|
||||||
def get_anagram(maxlen=6):
|
def get_anagram(maxlen=6):
|
||||||
dict_words = [
|
dict_words = [
|
||||||
word for word in get_wordlist() if len(word) > 2 and len(word) <= maxlen + 1
|
word for word in gen_wordlist() if len(word) > 2 and len(word) < maxlen + 1
|
||||||
]
|
]
|
||||||
word = random.choice(dict_words)
|
word = random.choice(dict_words)
|
||||||
while True:
|
anagram = list(word)
|
||||||
anagram = "".join(random.sample(word, len(word)))
|
random.shuffle(anagram)
|
||||||
if anagram != word:
|
anagram = "".join(anagram)
|
||||||
break
|
|
||||||
puzzle = "Unscramble the following word: '" + anagram + "'"
|
|
||||||
|
|
||||||
# Anagrams can have multiple answers, so we provide a check function that accepts all possibilities
|
# Anagrams can have multiple answers, so we provide a check function that accepts all possibilities
|
||||||
def answer_checker(guess):
|
def answer_checker(guess):
|
||||||
|
@ -52,6 +48,7 @@ def get_anagram(maxlen=6):
|
||||||
if sorted(guess) != sorted(word):
|
if sorted(guess) != sorted(word):
|
||||||
return False
|
return False
|
||||||
# Ok, gotta actually check if it's a word now
|
# Ok, gotta actually check if it's a word now
|
||||||
return any(guess == item for item in get_wordlist())
|
return any(guess == item for item in gen_wordlist())
|
||||||
|
|
||||||
return [answer_checker, puzzle]
|
challenge_text = "Unscramble the following word: '{}'".format(anagram)
|
||||||
|
return [answer_checker, challenge_text]
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
|
import requests
|
||||||
import urllib
|
import urllib
|
||||||
import urllib2
|
|
||||||
import json as j
|
import json as j
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
|
@ -50,12 +50,9 @@ def query(
|
||||||
encparams = urllib.urlencode(params)
|
encparams = urllib.urlencode(params)
|
||||||
url = "http://api.duckduckgo.com/?" + encparams
|
url = "http://api.duckduckgo.com/?" + encparams
|
||||||
|
|
||||||
request = urllib2.Request(url, headers={"User-Agent": useragent})
|
request = requests.get(url, headers={"User-Agent": useragent})
|
||||||
response = urllib2.urlopen(request)
|
|
||||||
json = j.loads(response.read())
|
|
||||||
response.close()
|
|
||||||
|
|
||||||
return Results(json)
|
return Results(request.json())
|
||||||
|
|
||||||
|
|
||||||
class Results(object):
|
class Results(object):
|
||||||
|
|
|
@ -1,115 +0,0 @@
|
||||||
# integer number to english word conversion
|
|
||||||
# can be used for numbers as large as 999 vigintillion
|
|
||||||
# (vigintillion --> 10 to the power 60)
|
|
||||||
# tested with Python24 vegaseat 07dec2006
|
|
||||||
def int2word(n):
|
|
||||||
"""
|
|
||||||
convert an integer number n into a string of english words
|
|
||||||
"""
|
|
||||||
# break the number into groups of 3 digits using slicing
|
|
||||||
# each group representing hundred, thousand, million, billion, ...
|
|
||||||
n3 = []
|
|
||||||
r1 = ""
|
|
||||||
# create numeric string
|
|
||||||
ns = str(n)
|
|
||||||
for k in range(3, 33, 3):
|
|
||||||
r = ns[-k:]
|
|
||||||
q = len(ns) - k
|
|
||||||
# break if end of ns has been reached
|
|
||||||
if q < -2:
|
|
||||||
break
|
|
||||||
else:
|
|
||||||
if q >= 0:
|
|
||||||
n3.append(int(r[:3]))
|
|
||||||
elif q >= -1:
|
|
||||||
n3.append(int(r[:2]))
|
|
||||||
elif q >= -2:
|
|
||||||
n3.append(int(r[:1]))
|
|
||||||
r1 = r
|
|
||||||
|
|
||||||
# print n3 # test
|
|
||||||
|
|
||||||
# break each group of 3 digits into
|
|
||||||
# ones, tens/twenties, hundreds
|
|
||||||
# and form a string
|
|
||||||
nw = ""
|
|
||||||
for i, x in enumerate(n3):
|
|
||||||
b1 = x % 10
|
|
||||||
b2 = (x % 100) // 10
|
|
||||||
b3 = (x % 1000) // 100
|
|
||||||
# print b1, b2, b3 # test
|
|
||||||
if x == 0:
|
|
||||||
continue # skip
|
|
||||||
else:
|
|
||||||
t = thousands[i]
|
|
||||||
if b2 == 0:
|
|
||||||
nw = ones[b1] + t + nw
|
|
||||||
elif b2 == 1:
|
|
||||||
nw = tens[b1] + t + nw
|
|
||||||
elif b2 > 1:
|
|
||||||
nw = twenties[b2] + ones[b1] + t + nw
|
|
||||||
if b3 > 0:
|
|
||||||
nw = ones[b3] + "hundred " + nw
|
|
||||||
return nw
|
|
||||||
|
|
||||||
|
|
||||||
############# globals ################
|
|
||||||
ones = [
|
|
||||||
"",
|
|
||||||
"one ",
|
|
||||||
"two ",
|
|
||||||
"three ",
|
|
||||||
"four ",
|
|
||||||
"five ",
|
|
||||||
"six ",
|
|
||||||
"seven ",
|
|
||||||
"eight ",
|
|
||||||
"nine ",
|
|
||||||
]
|
|
||||||
tens = [
|
|
||||||
"ten ",
|
|
||||||
"eleven ",
|
|
||||||
"twelve ",
|
|
||||||
"thirteen ",
|
|
||||||
"fourteen ",
|
|
||||||
"fifteen ",
|
|
||||||
"sixteen ",
|
|
||||||
"seventeen ",
|
|
||||||
"eighteen ",
|
|
||||||
"nineteen ",
|
|
||||||
]
|
|
||||||
twenties = [
|
|
||||||
"",
|
|
||||||
"",
|
|
||||||
"twenty ",
|
|
||||||
"thirty ",
|
|
||||||
"forty ",
|
|
||||||
"fifty ",
|
|
||||||
"sixty ",
|
|
||||||
"seventy ",
|
|
||||||
"eighty ",
|
|
||||||
"ninety ",
|
|
||||||
]
|
|
||||||
thousands = [
|
|
||||||
"",
|
|
||||||
"thousand ",
|
|
||||||
"million ",
|
|
||||||
"billion ",
|
|
||||||
"trillion ",
|
|
||||||
"quadrillion ",
|
|
||||||
"quintillion ",
|
|
||||||
"sextillion ",
|
|
||||||
"septillion ",
|
|
||||||
"octillion ",
|
|
||||||
"nonillion ",
|
|
||||||
"decillion ",
|
|
||||||
"undecillion ",
|
|
||||||
"duodecillion ",
|
|
||||||
"tredecillion ",
|
|
||||||
"quattuordecillion ",
|
|
||||||
"sexdecillion ",
|
|
||||||
"septendecillion ",
|
|
||||||
"octodecillion ",
|
|
||||||
"novemdecillion ",
|
|
||||||
"vigintillion ",
|
|
||||||
]
|
|
Binary file not shown.
|
@ -43,54 +43,46 @@ def make_puzzle(obfuscate=True):
|
||||||
|
|
||||||
if roll == 0:
|
if roll == 0:
|
||||||
answer = var1 + var2
|
answer = var1 + var2
|
||||||
puzzle += (
|
puzzle += "{} {} {}".format(
|
||||||
p.number_to_words(var1)
|
p.number_to_words(var1),
|
||||||
+ " "
|
random.choice(["and", "plus", "sum", "add"]),
|
||||||
+ random.choice(["and", "plus", "sum", "add"])
|
p.number_to_words(var2),
|
||||||
+ " "
|
|
||||||
+ p.number_to_words(var2)
|
|
||||||
)
|
)
|
||||||
|
|
||||||
elif roll == 1:
|
elif roll == 1:
|
||||||
answer = var1 * var2
|
answer = var1 * var2
|
||||||
puzzle += (
|
puzzle += "{} {} {}".format(
|
||||||
p.number_to_words(var1)
|
p.number_to_words(var1),
|
||||||
+ " "
|
random.choice(["times", "multiply", "multiplied by", "product"]),
|
||||||
+ random.choice(["times", "multiply", "multiplied by", "product"])
|
p.number_to_words(var2),
|
||||||
+ " "
|
|
||||||
+ p.number_to_words(var2)
|
|
||||||
)
|
)
|
||||||
|
|
||||||
elif roll == 2:
|
elif roll == 2:
|
||||||
if var2 > var1:
|
if var2 > var1:
|
||||||
var1, var2 = var2, var1
|
var1, var2 = var2, var1
|
||||||
answer = var1 - var2
|
answer = var1 - var2
|
||||||
puzzle += (
|
puzzle += "{} {} {}".format(
|
||||||
p.number_to_words(var1)
|
p.number_to_words(var1),
|
||||||
+ " "
|
random.choice(["minus", "subtract", "take away", "less"]),
|
||||||
+ random.choice(["minus", "subtract", "take away", "less"])
|
p.number_to_words(var2),
|
||||||
+ " "
|
|
||||||
+ p.number_to_words(var2)
|
|
||||||
)
|
)
|
||||||
|
|
||||||
elif roll == 3:
|
elif roll == 3:
|
||||||
if var2 > var1:
|
if var2 > var1:
|
||||||
var1, var2 = var2, var1
|
var1, var2 = var2, var1
|
||||||
answer = var1 * 2 / var2
|
answer = var1 * 2 / var2
|
||||||
puzzle += (
|
puzzle += "{} {} {} (no remainder)".format(
|
||||||
p.number_to_words(var1 * 2)
|
p.number_to_words(var1 * 2),
|
||||||
+ " "
|
random.choice(["divided by", "over"]),
|
||||||
+ random.choice(["divided by", "over"])
|
p.number_to_words(var2),
|
||||||
+ " "
|
|
||||||
+ p.number_to_words(var2)
|
|
||||||
+ " (no remainder)"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
elif roll == 4:
|
elif roll == 4:
|
||||||
answer = var1 ** var2
|
answer = var1 ** var2
|
||||||
puzzle += (
|
puzzle += "{} to the {} power".format(
|
||||||
p.number_to_words(var1)
|
p.number_to_words(var1), p.ordinal(p.number_to_words(var2))
|
||||||
+ " to the "
|
|
||||||
+ p.ordinal(p.number_to_words(var2))
|
|
||||||
+ " power"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
elif roll == 5:
|
elif roll == 5:
|
||||||
p1 = random.choice(primes)
|
p1 = random.choice(primes)
|
||||||
p2 = random.choice(primes)
|
p2 = random.choice(primes)
|
||||||
|
@ -103,10 +95,10 @@ def make_puzzle(obfuscate=True):
|
||||||
return attempt == correct
|
return attempt == correct
|
||||||
|
|
||||||
bonus = 1
|
bonus = 1
|
||||||
puzzle += (
|
puzzle += "{} when factored into its two primes (answer in the form of the two primes with a comma between)".format(
|
||||||
p.number_to_words(p1 * p2)
|
p.number_to_words(p1 * p2)
|
||||||
+ " when factored into its two primes (answer in the form of the two primes with a comma between)"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
elif roll == 6:
|
elif roll == 6:
|
||||||
prime = random.choice(primes)
|
prime = random.choice(primes)
|
||||||
answer = prime % var1
|
answer = prime % var1
|
||||||
|
@ -115,57 +107,43 @@ def make_puzzle(obfuscate=True):
|
||||||
if let1_ord + var1 > ord("z"):
|
if let1_ord + var1 > ord("z"):
|
||||||
let1_ord -= var1
|
let1_ord -= var1
|
||||||
answer = chr(let1_ord + var1)
|
answer = chr(let1_ord + var1)
|
||||||
puzzle = (
|
puzzle += "What letter comes {} letters after '{}'".format(
|
||||||
"What letter comes "
|
p.number_to_words(var1), chr(let1_ord)
|
||||||
+ p.number_to_words(var1)
|
|
||||||
+ " letters after '"
|
|
||||||
+ chr(let1_ord)
|
|
||||||
+ "'"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
obfuscate = False
|
obfuscate = False
|
||||||
elif roll == 8:
|
elif roll == 8:
|
||||||
if let1_ord - var1 < ord("a"):
|
if let1_ord - var1 < ord("a"):
|
||||||
let1_ord += var1
|
let1_ord += var1
|
||||||
answer = chr(let1_ord - var1)
|
answer = chr(let1_ord - var1)
|
||||||
puzzle = (
|
puzzle += "What letter comes {} letters before '{}'".format(
|
||||||
"What letter comes "
|
p.number_to_words(var1), chr(let1_ord)
|
||||||
+ p.number_to_words(var1)
|
|
||||||
+ " letters before '"
|
|
||||||
+ chr(let1_ord)
|
|
||||||
+ "'"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
obfuscate = False
|
obfuscate = False
|
||||||
elif roll == 9:
|
elif roll == 9:
|
||||||
answer, puzzle = quote_puzzle.get_quote()
|
answer, puzzle = quote_puzzle.get_quote()
|
||||||
obfuscate = False
|
obfuscate = False
|
||||||
elif roll == 10:
|
elif roll == 10:
|
||||||
answer = str(min(var1, var2, var3, var4))
|
answer = str(min(var1, var2, var3, var4))
|
||||||
puzzle = (
|
puzzle += "What is the {} of {}, {}, {}, and {}".format(
|
||||||
"What is the "
|
random.choice(["smallest", "lowest"]),
|
||||||
+ random.choice(["smallest", "lowest"])
|
p.number_to_words(var1),
|
||||||
+ " of "
|
p.number_to_words(var2),
|
||||||
+ p.number_to_words(var1)
|
p.number_to_words(var3),
|
||||||
+ ", "
|
p.number_to_words(var4),
|
||||||
+ p.number_to_words(var2)
|
|
||||||
+ ", "
|
|
||||||
+ p.number_to_words(var3)
|
|
||||||
+ ", and "
|
|
||||||
+ p.number_to_words(var4)
|
|
||||||
)
|
)
|
||||||
|
|
||||||
elif roll == 11:
|
elif roll == 11:
|
||||||
answer = str(max(var1, var2, var3, var4))
|
answer = str(max(var1, var2, var3, var4))
|
||||||
puzzle = (
|
puzzle += "What is the {} of {}, {}, {}, and {}".format(
|
||||||
"What is the "
|
random.choice(["biggest", "largest"]),
|
||||||
+ random.choice(["biggest", "largest"])
|
p.number_to_words(var1),
|
||||||
+ " of "
|
p.number_to_words(var2),
|
||||||
+ p.number_to_words(var1)
|
p.number_to_words(var3),
|
||||||
+ ", "
|
p.number_to_words(var4),
|
||||||
+ p.number_to_words(var2)
|
|
||||||
+ ", "
|
|
||||||
+ p.number_to_words(var3)
|
|
||||||
+ ", and "
|
|
||||||
+ p.number_to_words(var4)
|
|
||||||
)
|
)
|
||||||
|
|
||||||
elif roll <= 14: # 12-14
|
elif roll <= 14: # 12-14
|
||||||
answer, puzzle = dict_puzzle.get_puzzle()
|
answer, puzzle = dict_puzzle.get_puzzle()
|
||||||
obfuscate = False
|
obfuscate = False
|
||||||
|
|
|
@ -31,7 +31,7 @@ parser.add_option(
|
||||||
"-n",
|
"-n",
|
||||||
"--nick",
|
"--nick",
|
||||||
dest="nick",
|
dest="nick",
|
||||||
default="quote_bot",
|
default="quotebot",
|
||||||
help="the nick to use",
|
help="the nick to use",
|
||||||
metavar="NICK",
|
metavar="NICK",
|
||||||
)
|
)
|
||||||
|
@ -51,19 +51,10 @@ def haiku(channel):
|
||||||
util.sendmsg(ircsock, channel, h)
|
util.sendmsg(ircsock, channel, h)
|
||||||
|
|
||||||
|
|
||||||
def get_user_from_message(msg):
|
|
||||||
try:
|
|
||||||
i1 = msg.index(":") + 1
|
|
||||||
i2 = msg.index("!")
|
|
||||||
return msg[i1:i2]
|
|
||||||
except ValueError:
|
|
||||||
return ""
|
|
||||||
|
|
||||||
|
|
||||||
def say_mentions(user, message):
|
def say_mentions(user, message):
|
||||||
nick = get_user_from_message(message)
|
nick = util.get_user_from_message(message)
|
||||||
menschns = (
|
menschns = (
|
||||||
os.popen("/home/karlen/bin/mensch -u %s -t 24 -z +0" % (user))
|
os.popen("/home/karlen/bin/mensch -u {} -t 24 -z +0".format(user))
|
||||||
.read()
|
.read()
|
||||||
.replace("\t", ": ")
|
.replace("\t", ": ")
|
||||||
.split("\n")
|
.split("\n")
|
||||||
|
@ -86,8 +77,8 @@ def say_chatty(channel):
|
||||||
def listen():
|
def listen():
|
||||||
while 1:
|
while 1:
|
||||||
|
|
||||||
ircmsg = ircsock.recv(2048)
|
ircmsg = ircsock.recv(2048).decode()
|
||||||
ircmsg = ircmsg.strip("\n\r")
|
ircmsg = ircmsg.strip("\r\n")
|
||||||
|
|
||||||
formatted = util.format_message(ircmsg)
|
formatted = util.format_message(ircmsg)
|
||||||
|
|
||||||
|
@ -96,7 +87,7 @@ def listen():
|
||||||
|
|
||||||
print(formatted)
|
print(formatted)
|
||||||
|
|
||||||
time, user, messageText = formatted.split("\t")
|
user = formatted.split("\t")[1]
|
||||||
|
|
||||||
if ircmsg.find(":!quote") != -1:
|
if ircmsg.find(":!quote") != -1:
|
||||||
random_quote(options.channel)
|
random_quote(options.channel)
|
||||||
|
@ -111,10 +102,10 @@ def listen():
|
||||||
haiku(options.channel)
|
haiku(options.channel)
|
||||||
|
|
||||||
if ircmsg[:4] == "PING":
|
if ircmsg[:4] == "PING":
|
||||||
ping(ircmsg.split(" ")[1])
|
util.ping(ircsock, ircmsg)
|
||||||
|
|
||||||
sys.stdout.flush()
|
sys.stdout.flush()
|
||||||
time.sleep(1)
|
# time.sleep(1)
|
||||||
|
|
||||||
|
|
||||||
ircsock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
ircsock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||||||
|
|
|
@ -1,124 +0,0 @@
|
||||||
#!/usr/bin/python
|
|
||||||
# http://wiki.shellium.org/w/Writing_an_IRC_bot_in_Python
|
|
||||||
|
|
||||||
# Import some necessary libraries.
|
|
||||||
import socket
|
|
||||||
import os
|
|
||||||
import sys
|
|
||||||
from optparse import OptionParser
|
|
||||||
|
|
||||||
import get_users
|
|
||||||
import mentions
|
|
||||||
import formatter
|
|
||||||
|
|
||||||
parser = OptionParser()
|
|
||||||
|
|
||||||
parser.add_option(
|
|
||||||
"-s",
|
|
||||||
"--server",
|
|
||||||
dest="server",
|
|
||||||
default="127.0.0.1",
|
|
||||||
help="the server to connect to",
|
|
||||||
metavar="SERVER",
|
|
||||||
)
|
|
||||||
parser.add_option(
|
|
||||||
"-c",
|
|
||||||
"--channel",
|
|
||||||
dest="channel",
|
|
||||||
default="#bot_test",
|
|
||||||
help="the channel to join",
|
|
||||||
metavar="CHANNEL",
|
|
||||||
)
|
|
||||||
parser.add_option(
|
|
||||||
"-n",
|
|
||||||
"--nick",
|
|
||||||
dest="nick",
|
|
||||||
default="tilde_bot",
|
|
||||||
help="the nick to use",
|
|
||||||
metavar="NICK",
|
|
||||||
)
|
|
||||||
|
|
||||||
(options, args) = parser.parse_args()
|
|
||||||
|
|
||||||
|
|
||||||
def ping(pong):
|
|
||||||
ircsock.send("PONG {}\n".format(pong))
|
|
||||||
|
|
||||||
|
|
||||||
def sendmsg(chan, msg):
|
|
||||||
ircsock.send("PRIVMSG " + chan + " :" + msg + "\n")
|
|
||||||
|
|
||||||
|
|
||||||
def joinchan(chan):
|
|
||||||
ircsock.send("JOIN " + chan + "\n")
|
|
||||||
|
|
||||||
|
|
||||||
def hello():
|
|
||||||
ircsock.send("PRIVMSG " + channel + " :Hello!\n")
|
|
||||||
|
|
||||||
|
|
||||||
def tilde(channel, user, time):
|
|
||||||
# h = os.popen("haiku").read().replace("\n", " // ")
|
|
||||||
msg = time + ":" + user
|
|
||||||
print(msg)
|
|
||||||
ircsock.send("PRIVMSG " + channel + " :" + msg + "\n")
|
|
||||||
|
|
||||||
|
|
||||||
def connect(server, channel, botnick):
|
|
||||||
ircsock.connect((server, 6667))
|
|
||||||
ircsock.send(
|
|
||||||
"USER "
|
|
||||||
+ botnick
|
|
||||||
+ " "
|
|
||||||
+ botnick
|
|
||||||
+ " "
|
|
||||||
+ botnick
|
|
||||||
+ " :This bot is a result of a tutoral covered on http://shellium.org/wiki.\n"
|
|
||||||
) # user authentication
|
|
||||||
ircsock.send("NICK " + botnick + "\n")
|
|
||||||
|
|
||||||
joinchan(channel)
|
|
||||||
|
|
||||||
|
|
||||||
def get_user_from_message(msg):
|
|
||||||
try:
|
|
||||||
i1 = msg.index(":") + 1
|
|
||||||
i2 = msg.index("!")
|
|
||||||
return msg[i1:i2]
|
|
||||||
except ValueError:
|
|
||||||
return ""
|
|
||||||
|
|
||||||
|
|
||||||
def listen():
|
|
||||||
while 1:
|
|
||||||
|
|
||||||
ircmsg = ircsock.recv(2048)
|
|
||||||
ircmsg = ircmsg.strip("\n\r")
|
|
||||||
|
|
||||||
if ircmsg[:4] == "PING":
|
|
||||||
ping(ircmsg.split(" ")[1])
|
|
||||||
|
|
||||||
formatted = formatter.format_message(ircmsg)
|
|
||||||
|
|
||||||
if "" == formatted:
|
|
||||||
continue
|
|
||||||
|
|
||||||
print(formatted)
|
|
||||||
|
|
||||||
split = formatted.split("\t")
|
|
||||||
time = split[0]
|
|
||||||
user = split[1]
|
|
||||||
messageText = split[2]
|
|
||||||
|
|
||||||
if ircmsg.find(":!tilde") != -1:
|
|
||||||
tilde(options.channel, user, time)
|
|
||||||
|
|
||||||
if ircmsg[:4] == "PING":
|
|
||||||
ping(ircmsg.split(" ")[1])
|
|
||||||
|
|
||||||
sys.stdout.flush()
|
|
||||||
|
|
||||||
|
|
||||||
ircsock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
|
||||||
connect(options.server, options.channel, options.nick)
|
|
||||||
listen()
|
|
|
@ -48,7 +48,7 @@ challenges = {}
|
||||||
SCORE_FILE = "tildescores.txt"
|
SCORE_FILE = "tildescores.txt"
|
||||||
JACKPOT_FILE = "tildejackpot.txt"
|
JACKPOT_FILE = "tildejackpot.txt"
|
||||||
JACKPOT_MIN = 3
|
JACKPOT_MIN = 3
|
||||||
DEBUG = False
|
DEBUG = True
|
||||||
|
|
||||||
|
|
||||||
def too_recent(time1, time2):
|
def too_recent(time1, time2):
|
||||||
|
@ -190,7 +190,7 @@ def get_prize(name, isHuman, bonus=0):
|
||||||
prize,
|
prize,
|
||||||
"{}: {}! You are {} and get {} tildes!".format(
|
"{}: {}! You are {} and get {} tildes!".format(
|
||||||
name,
|
name,
|
||||||
(get_positive() if isHuman else get_negative),
|
(get_positive() if isHuman else get_negative()),
|
||||||
get_superlative(prize),
|
get_superlative(prize),
|
||||||
p.number_to_words(prize),
|
p.number_to_words(prize),
|
||||||
),
|
),
|
||||||
|
@ -240,10 +240,10 @@ def give_tilde(channel, user, name, time, human, bonus=0):
|
||||||
scorefile.seek(0)
|
scorefile.seek(0)
|
||||||
scorefile.truncate()
|
scorefile.truncate()
|
||||||
for score in scores:
|
for score in scores:
|
||||||
person = score.strip("\n").split("&^%")
|
name, score_on_file, timestamp = score.strip("\n").split("&^%")
|
||||||
if person[0] == user:
|
if name == user:
|
||||||
found = True
|
found = True
|
||||||
if too_recent(time, person[2]) and not DEBUG:
|
if too_recent(time, timestamp) and not DEBUG:
|
||||||
util.sendmsg(
|
util.sendmsg(
|
||||||
ircsock,
|
ircsock,
|
||||||
channel,
|
channel,
|
||||||
|
@ -252,22 +252,22 @@ def give_tilde(channel, user, name, time, human, bonus=0):
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
prize = get_prize(name, human, bonus)
|
prizevalue, prizetext = get_prize(name, human, bonus)
|
||||||
score = "{}&^%{}&^%{}\n".format(
|
score = "{}&^%{}&^%{}\n".format(
|
||||||
person[0], int(person[1] + prize[0]), time
|
name, str(int(score_on_file) + prizevalue), time
|
||||||
)
|
)
|
||||||
util.sendmsg(ircsock, channel, prize[1])
|
util.sendmsg(ircsock, channel, prizetext)
|
||||||
scorefile.write(score)
|
scorefile.write(score)
|
||||||
if not found:
|
if not found:
|
||||||
prize = get_prize(name, True, bonus)
|
prizevalue, prizetext = get_prize(name, True, bonus)
|
||||||
util.sendmsg(
|
util.sendmsg(
|
||||||
ircsock,
|
ircsock,
|
||||||
channel,
|
channel,
|
||||||
"Welcome to the tilde game! Here's {} free tilde(s) to start you off.".format(
|
"Welcome to the tilde game! Here's {} free tildes to start you off.".format(
|
||||||
p.number_to_words(prize[0] + 1)
|
p.number_to_words(prizevalue + 1)
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
scorefile.write("{}&^%{}&^%{}\n".format(user, str(prize[0] + 1), time))
|
scorefile.write("{}&^%{}&^%{}\n".format(user, str(prizevalue + 1), time))
|
||||||
|
|
||||||
|
|
||||||
def show_tildescore(channel, user, name):
|
def show_tildescore(channel, user, name):
|
||||||
|
@ -298,14 +298,13 @@ def challenge(channel, user, name, time):
|
||||||
global challenges
|
global challenges
|
||||||
challenge = puzzle.make_puzzle()
|
challenge = puzzle.make_puzzle()
|
||||||
challenges[user] = challenge[1:]
|
challenges[user] = challenge[1:]
|
||||||
# challenges[USER] = [ANSWER, BONUS]
|
util.sendmsg(ircsock, channel, "{}: {}".format(name, challenge[0]))
|
||||||
util.sendmsg(ircsock, channel, "{}: {}".format(name, challenge[1]))
|
|
||||||
|
|
||||||
|
|
||||||
def challenge_response(channel, user, name, time, msg):
|
def challenge_response(channel, user, name, time, msg):
|
||||||
global challenges
|
global challenges
|
||||||
print(msg)
|
print(msg)
|
||||||
if challenges.has_key(user):
|
if user in challenges:
|
||||||
answer, bonus = challenges[user]
|
answer, bonus = challenges[user]
|
||||||
if (callable(answer) and answer(msg.lower())) or (
|
if (callable(answer) and answer(msg.lower())) or (
|
||||||
msg.lower() == str(answer).lower() or msg == p.number_to_words(answer)
|
msg.lower() == str(answer).lower() or msg == p.number_to_words(answer)
|
||||||
|
@ -323,31 +322,10 @@ def rollcall(channel):
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
def connect(server, channel, botnick):
|
|
||||||
server, port = server.split(":")
|
|
||||||
ircsock.connect((server, port))
|
|
||||||
ircsock.send("USER {0} {0} {0} :krowbar\r\n".format(botnick)) # user authentication
|
|
||||||
ircsock.send("NICK {}\r\n".format(botnick))
|
|
||||||
ircsock.send("MODE +B {}\r\n".format(botnick))
|
|
||||||
|
|
||||||
joinchan(channel)
|
|
||||||
if not DEBUG:
|
|
||||||
joinchan("#bots")
|
|
||||||
|
|
||||||
|
|
||||||
def get_user_from_message(msg):
|
|
||||||
try:
|
|
||||||
i1 = msg.index(":") + 1
|
|
||||||
i2 = msg.index("!")
|
|
||||||
return msg[i1:i2]
|
|
||||||
except ValueError:
|
|
||||||
return ""
|
|
||||||
|
|
||||||
|
|
||||||
def listen():
|
def listen():
|
||||||
while 1:
|
while 1:
|
||||||
|
|
||||||
ircmsg = ircsock.recv(2048)
|
ircmsg = ircsock.recv(2048).decode()
|
||||||
for msg in ircmsg.split("\n"):
|
for msg in ircmsg.split("\n"):
|
||||||
msg = msg.strip("\n\r")
|
msg = msg.strip("\n\r")
|
||||||
|
|
||||||
|
@ -356,20 +334,19 @@ def listen():
|
||||||
continue
|
continue
|
||||||
|
|
||||||
formatted = util.format_message(msg)
|
formatted = util.format_message(msg)
|
||||||
|
print(formatted)
|
||||||
|
|
||||||
if "" == formatted:
|
if "" == formatted:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
# print formatted
|
|
||||||
|
|
||||||
iTime, user, command, channel, messageText = formatted.split("\t")
|
iTime, user, command, channel, messageText = formatted.split("\t")
|
||||||
name = util.get_name(user)
|
name = util.get_name(user)
|
||||||
|
|
||||||
if msg.find(":!tildescore") != -1:
|
if msg.find(":!tildescore") != -1:
|
||||||
show_tildescore(channel, user, name)
|
show_tildescore(channel, user, name)
|
||||||
elif msg.find(":!tilde") != -1 and not challenges.has_key(user):
|
elif msg.find(":!tilde") != -1 and user not in challenges:
|
||||||
challenge(channel, user, name, iTime)
|
challenge(channel, user, name, iTime)
|
||||||
elif challenges.has_key(user) and (channel == "#bots" or DEBUG):
|
elif user in challenges and (channel == "#bots" or DEBUG):
|
||||||
challenge_response(channel, user, name, iTime, messageText)
|
challenge_response(channel, user, name, iTime, messageText)
|
||||||
|
|
||||||
if msg.find(":!jackpot") != -1:
|
if msg.find(":!jackpot") != -1:
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
111
|
|
@ -122,14 +122,4 @@ x4464&^%1&^%1532028546
|
||||||
pounce&^%19&^%1532133325
|
pounce&^%19&^%1532133325
|
||||||
von_&^%5&^%1532502104
|
von_&^%5&^%1532502104
|
||||||
livix&^%7&^%1533603142
|
livix&^%7&^%1533603142
|
||||||
ben&^%3&^%1533767627
|
ben&^%28&^%1539065026
|
||||||
npa&^%78&^%1536235183
|
|
||||||
ezo&^%6&^%1533883842
|
|
||||||
aliasless&^%30&^%1537198276
|
|
||||||
kirch&^%41&^%1535571833
|
|
||||||
root&^%2&^%1535558514
|
|
||||||
byte&^%5&^%1536416308
|
|
||||||
qbe&^%6&^%1537112151
|
|
||||||
informati&^%3&^%1536733938
|
|
||||||
h00fi&^%1&^%1537050053
|
|
||||||
fantoro&^%4&^%1537106482
|
|
||||||
|
|
|
@ -10,12 +10,8 @@ import fileinput
|
||||||
import random
|
import random
|
||||||
import time
|
import time
|
||||||
|
|
||||||
import formatter
|
|
||||||
import get_users
|
|
||||||
import mentions
|
|
||||||
import pretty_date
|
|
||||||
import inflect
|
import inflect
|
||||||
import names
|
import util
|
||||||
|
|
||||||
parser = OptionParser()
|
parser = OptionParser()
|
||||||
|
|
||||||
|
@ -23,7 +19,7 @@ parser.add_option(
|
||||||
"-s",
|
"-s",
|
||||||
"--server",
|
"--server",
|
||||||
dest="server",
|
dest="server",
|
||||||
default="127.0.0.1",
|
default="127.0.0.1:6667",
|
||||||
help="the server to connect to",
|
help="the server to connect to",
|
||||||
metavar="SERVER",
|
metavar="SERVER",
|
||||||
)
|
)
|
||||||
|
@ -49,22 +45,6 @@ parser.add_option(
|
||||||
p = inflect.engine()
|
p = inflect.engine()
|
||||||
|
|
||||||
|
|
||||||
def ping(pong):
|
|
||||||
ircsock.send("PONG {}\n".format(pong))
|
|
||||||
|
|
||||||
|
|
||||||
def sendmsg(chan, msg):
|
|
||||||
ircsock.send("PRIVMSG " + chan + " :" + msg + "\n")
|
|
||||||
|
|
||||||
|
|
||||||
def joinchan(chan):
|
|
||||||
ircsock.send("JOIN " + chan + "\n")
|
|
||||||
|
|
||||||
|
|
||||||
def hello():
|
|
||||||
ircsock.send("PRIVMSG " + channel + " :Hello!\n")
|
|
||||||
|
|
||||||
|
|
||||||
def get_topic(channel, user, time):
|
def get_topic(channel, user, time):
|
||||||
# topic scores are saved as <USER>&^%<GETS SCORE>&^%<SETS SCORE>
|
# topic scores are saved as <USER>&^%<GETS SCORE>&^%<SETS SCORE>
|
||||||
with open("topicscores.txt", "r") as scorefile:
|
with open("topicscores.txt", "r") as scorefile:
|
||||||
|
@ -84,19 +64,16 @@ def get_topic(channel, user, time):
|
||||||
|
|
||||||
with open("topics_" + channel + ".txt", "r") as topics:
|
with open("topics_" + channel + ".txt", "r") as topics:
|
||||||
topic = topics.readlines()[-1].strip("\n").split("&^%", 3)
|
topic = topics.readlines()[-1].strip("\n").split("&^%", 3)
|
||||||
byuser = names.get_name(topic[1])
|
byuser = util.get_name(topic[1])
|
||||||
ircsock.send(
|
util.sendmsg(
|
||||||
"PRIVMSG "
|
ircsock,
|
||||||
+ channel
|
channel,
|
||||||
+ " :I've told you "
|
"I've told you {} times! It's \"{}\" (set by {} {})".format(
|
||||||
+ p.number_to_words(userscore)
|
p.number_to_words(userscore),
|
||||||
+ " times! It's \""
|
topic[2],
|
||||||
+ topic[2]
|
byuser,
|
||||||
+ '" (Set by '
|
util.pretty_date(int(topic[0])),
|
||||||
+ byuser
|
),
|
||||||
+ " "
|
|
||||||
+ pretty_date.pretty_date(int(topic[0]))
|
|
||||||
+ ")\n"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@ -117,14 +94,10 @@ def count_topic(channel, user, time, msg):
|
||||||
scorefile.writelines(scores)
|
scorefile.writelines(scores)
|
||||||
if not found:
|
if not found:
|
||||||
scorefile.write(user + "&^%0&^%1")
|
scorefile.write(user + "&^%0&^%1")
|
||||||
ircsock.send(
|
util.sendmsg(
|
||||||
"PRIVMSG "
|
ircsock,
|
||||||
+ channel
|
channel,
|
||||||
+ " :"
|
"{} has changed the topic {} times!".format(user, p.number_to_words(userscore)),
|
||||||
+ user
|
|
||||||
+ " has changed the topic "
|
|
||||||
+ p.number_to_words(userscore)
|
|
||||||
+ " times!\n"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@ -139,29 +112,29 @@ def random_topic(channel, user, time, setTopic=False):
|
||||||
if setTopic:
|
if setTopic:
|
||||||
set_topic(channel, user, time, msg)
|
set_topic(channel, user, time, msg)
|
||||||
else:
|
else:
|
||||||
ircsock.send("PRIVMSG " + channel + " :Suggested Topic: " + msg + "\n")
|
util.sendmsg(ircsock, channel, "Suggested Topic: {}".format(msg))
|
||||||
|
|
||||||
|
|
||||||
def rollcall(channel):
|
def rollcall(channel):
|
||||||
ircsock.send(
|
util.sendmsg(
|
||||||
"PRIVMSG "
|
ircsock,
|
||||||
+ channel
|
channel,
|
||||||
+ " :topicbot reporting! I respond to !topic !settopic !suggesttopic !thistory\n"
|
"topicbot reporting! I respond to !topic !settopic !suggesttopic !thistory",
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
def topic_score(channel):
|
def topic_score(channel):
|
||||||
ircsock.send("PRIVMSG " + channel + " :Not implemented yet")
|
util.sendmsg(ircsock, channel, "Not implemented yet")
|
||||||
|
|
||||||
|
|
||||||
def topic_scores(channel):
|
def topic_scores(channel):
|
||||||
ircsock.send("PRIVMSG " + channel + " :Not implemented yet")
|
util.sendmsg(ircsock, channel, "Not implemented yet")
|
||||||
|
|
||||||
|
|
||||||
def topic_history(channel, user, count):
|
def topic_history(channel, user, count):
|
||||||
try:
|
try:
|
||||||
iCount = int(count.split()[1])
|
iCount = int(count.split()[1])
|
||||||
except (ValueError, IndexError) as e:
|
except (ValueError, IndexError):
|
||||||
iCount = 3
|
iCount = 3
|
||||||
if iCount > 10:
|
if iCount > 10:
|
||||||
iCount = 10
|
iCount = 10
|
||||||
|
@ -169,73 +142,40 @@ def topic_history(channel, user, count):
|
||||||
iCount = 3
|
iCount = 3
|
||||||
with open("topics_" + channel + ".txt", "r") as topicsfile:
|
with open("topics_" + channel + ".txt", "r") as topicsfile:
|
||||||
# topics = topicsfile.readlines()[-iCount:].reverse()
|
# topics = topicsfile.readlines()[-iCount:].reverse()
|
||||||
ircsock.send(
|
util.sendmsg(
|
||||||
"PRIVMSG "
|
ircsock,
|
||||||
+ channel
|
channel,
|
||||||
+ " :Ok, here were the last "
|
"Ok, here are the last {} topics".format(p.number_to_words(iCount)),
|
||||||
+ p.number_to_words(iCount)
|
|
||||||
+ " topics\n"
|
|
||||||
)
|
)
|
||||||
for idx, topic in enumerate(reversed(topicsfile.readlines()[-iCount:])):
|
for idx, topic in enumerate(reversed(topicsfile.readlines()[-iCount:])):
|
||||||
topic = topic.strip("\n").split("&^%", 3)
|
topic = topic.strip("\n").split("&^%", 3)
|
||||||
byuser = names.get_name(topic[1])
|
byuser = util.get_name(topic[1])
|
||||||
ircsock.send(
|
util.sendmsg(
|
||||||
"PRIVMSG "
|
ircsock,
|
||||||
+ channel
|
channel,
|
||||||
+ " :"
|
"{}: {} (set by {} {})".format(
|
||||||
+ str(idx + 1)
|
str(idx + 1), topic[2], byuser, util.pretty_date(int(topic[0]))
|
||||||
+ ': "'
|
),
|
||||||
+ topic[2]
|
|
||||||
+ '" (Set by '
|
|
||||||
+ byuser
|
|
||||||
+ " "
|
|
||||||
+ pretty_date.pretty_date(int(topic[0]))
|
|
||||||
+ ")\n"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
def connect(server, channel, botnick):
|
|
||||||
ircsock.connect((server, 6667))
|
|
||||||
ircsock.send(
|
|
||||||
"USER " + botnick + " " + botnick + " " + botnick + " :krowbar\n"
|
|
||||||
) # user authentication
|
|
||||||
ircsock.send("NICK " + botnick + "\n")
|
|
||||||
|
|
||||||
joinchan(channel)
|
|
||||||
joinchan("#bots")
|
|
||||||
|
|
||||||
|
|
||||||
def get_user_from_message(msg):
|
|
||||||
try:
|
|
||||||
i1 = msg.index(":") + 1
|
|
||||||
i2 = msg.index("!")
|
|
||||||
return msg[i1:i2]
|
|
||||||
except ValueError:
|
|
||||||
return ""
|
|
||||||
|
|
||||||
|
|
||||||
def listen():
|
def listen():
|
||||||
while 1:
|
while 1:
|
||||||
|
|
||||||
ircmsg = ircsock.recv(2048)
|
ircmsg = ircsock.recv(2048).decode()
|
||||||
ircmsg = ircmsg.strip("\n\r")
|
ircmsg = ircmsg.strip("\n\r")
|
||||||
|
|
||||||
if ircmsg[:4] == "PING":
|
if ircmsg[:4] == "PING":
|
||||||
ping(ircmsg.split(" ")[1])
|
util.ping(ircsock, ircmsg)
|
||||||
|
|
||||||
formatted = formatter.format_message(ircmsg)
|
formatted = util.format_message(ircmsg)
|
||||||
|
|
||||||
if "" == formatted:
|
if "" == formatted:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
# print formatted
|
# print formatted
|
||||||
|
|
||||||
split = formatted.split("\t")
|
msgtime, user, command, channel, messageText = formatted.split("\t")
|
||||||
msgtime = split[0]
|
|
||||||
user = split[1]
|
|
||||||
command = split[2]
|
|
||||||
channel = split[3]
|
|
||||||
messageText = split[4]
|
|
||||||
|
|
||||||
if command == "TOPIC" and user != options.nick:
|
if command == "TOPIC" and user != options.nick:
|
||||||
count_topic(channel, user, msgtime, messageText)
|
count_topic(channel, user, msgtime, messageText)
|
||||||
|
@ -262,13 +202,10 @@ def listen():
|
||||||
if ircmsg.find(":!rollcall") != -1:
|
if ircmsg.find(":!rollcall") != -1:
|
||||||
rollcall(channel)
|
rollcall(channel)
|
||||||
|
|
||||||
if ircmsg[:4] == "PING":
|
|
||||||
ping(ircmsg.split(" ")[1])
|
|
||||||
|
|
||||||
sys.stdout.flush()
|
sys.stdout.flush()
|
||||||
time.sleep(1)
|
time.sleep(1)
|
||||||
|
|
||||||
|
|
||||||
ircsock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
ircsock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||||||
connect(options.server, options.channel, options.nick)
|
util.connect(ircsock, options)
|
||||||
listen()
|
listen()
|
||||||
|
|
|
@ -1 +1,2 @@
|
||||||
vilmibm&^%0&^%2
|
vilmibm&^%0&^%2
|
||||||
|
ben&^%3&^%0
|
||||||
|
|
|
@ -4,30 +4,44 @@ import random
|
||||||
import re
|
import re
|
||||||
|
|
||||||
|
|
||||||
def hello(ircsock, chan):
|
def ping(ircsock, msg):
|
||||||
sendmsg(ircsock, chan, "Hello!")
|
ircsock.send("PONG {}\n".format(msg.split(" ")[1]).encode())
|
||||||
|
|
||||||
|
|
||||||
def ping(pong):
|
|
||||||
ircsock.send("PONG {}\n".format(pong.split(" ")[1]))
|
|
||||||
|
|
||||||
|
|
||||||
def sendmsg(ircsock, chan, msg):
|
def sendmsg(ircsock, chan, msg):
|
||||||
ircsock.send("PRIVMSG {} :{}\r\n".format(chan, msg))
|
print("sending {} to {}".format(msg, chan))
|
||||||
|
ircsock.send("PRIVMSG {} :{}\r\n".format(chan, msg).encode())
|
||||||
|
|
||||||
|
|
||||||
def joinchan(ircsock, chan):
|
def joinchan(ircsock, chan):
|
||||||
ircsock.send("JOIN {}\r\n".format(chan))
|
print("joining {}".format(chan))
|
||||||
|
ircsock.send("JOIN {}\r\n".format(chan).encode())
|
||||||
|
|
||||||
|
|
||||||
|
def get_user_from_message(msg):
|
||||||
|
try:
|
||||||
|
i1 = msg.index(":") + 1
|
||||||
|
i2 = msg.index("!")
|
||||||
|
return msg[i1:i2]
|
||||||
|
except ValueError:
|
||||||
|
return ""
|
||||||
|
|
||||||
|
|
||||||
def connect(ircsock, options):
|
def connect(ircsock, options):
|
||||||
server, channel, botnick = options
|
print(options)
|
||||||
server, port = server.split(":")
|
server, port = options.server.split(":")
|
||||||
ircsock.connect((server, port))
|
ircsock.connect((server, int(port)))
|
||||||
ircsock.send("USER {0} {0} {0} :krowbar".format(botnick))
|
print(ircsock)
|
||||||
ircsock.send("NICK {}\r\n".format(botnick))
|
nick = "NICK {}\r\n".format(options.nick).encode()
|
||||||
ircsock.send("MODE +B {}\r\n".format(botnick))
|
print(nick)
|
||||||
joinchan(channel)
|
ircsock.send(nick)
|
||||||
|
login = "USER {0} {0} {0} {0}".format(options.nick).encode()
|
||||||
|
print(login)
|
||||||
|
ircsock.send(login)
|
||||||
|
mode = "MODE +B {}\r\n".format(options.nick).encode()
|
||||||
|
print(mode)
|
||||||
|
ircsock.send(mode)
|
||||||
|
joinchan(ircsock, options.channel)
|
||||||
|
|
||||||
|
|
||||||
# integer number to english word conversion
|
# integer number to english word conversion
|
||||||
|
|
|
@ -37,7 +37,7 @@ parser.add_option(
|
||||||
"-n",
|
"-n",
|
||||||
"--nick",
|
"--nick",
|
||||||
dest="nick",
|
dest="nick",
|
||||||
default="numberwang_bot",
|
default="wangbot",
|
||||||
help="the nick to use",
|
help="the nick to use",
|
||||||
metavar="NICK",
|
metavar="NICK",
|
||||||
)
|
)
|
||||||
|
@ -274,27 +274,18 @@ def rollcall(channel):
|
||||||
util.sendmsg(
|
util.sendmsg(
|
||||||
ircsock,
|
ircsock,
|
||||||
channel,
|
channel,
|
||||||
" :Is it time for Numberwang? It might be! Start a new game with !numberwang or stop a current game with !wangernumb Get your score with !myscore and the list of top wangers with !topwangers",
|
"Is it time for Numberwang? It might be! Start a new game with !numberwang or stop a current game with !wangernumb Get your score with !myscore and the list of top wangers with !topwangers",
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
def get_user_from_message(msg):
|
|
||||||
try:
|
|
||||||
i1 = msg.index(":") + 1
|
|
||||||
i2 = msg.index("!")
|
|
||||||
return msg[i1:i2]
|
|
||||||
except ValueError:
|
|
||||||
return ""
|
|
||||||
|
|
||||||
|
|
||||||
def listen():
|
def listen():
|
||||||
while 1:
|
while 1:
|
||||||
|
|
||||||
ircmsg = ircsock.recv(2048)
|
ircmsg = ircsock.recv(2048).decode()
|
||||||
ircmsg = ircmsg.strip("\n\r")
|
ircmsg = ircmsg.strip("\n\r")
|
||||||
|
|
||||||
if ircmsg[:4] == "PING":
|
if ircmsg[:4] == "PING":
|
||||||
ping(ircmsg.split(" ")[1])
|
util.ping(ircsock, ircmsg)
|
||||||
|
|
||||||
formatted = util.format_message(ircmsg)
|
formatted = util.format_message(ircmsg)
|
||||||
|
|
||||||
|
@ -303,7 +294,7 @@ def listen():
|
||||||
|
|
||||||
# print formatted
|
# print formatted
|
||||||
|
|
||||||
time, user, command, channel, messageText = formatted.split("\t")
|
_time, user, _command, channel, messageText = formatted.split("\t")
|
||||||
|
|
||||||
if ircmsg.find(":!numberwang") != -1 and roundsLeft == 0:
|
if ircmsg.find(":!numberwang") != -1 and roundsLeft == 0:
|
||||||
start_numberwang(channel, user)
|
start_numberwang(channel, user)
|
||||||
|
|
Loading…
Reference in New Issue