Initial Commit
This commit is contained in:
parent
f59bd999d8
commit
e3ae91d766
2 changed files with 172972 additions and 0 deletions
152
ircbot.py
Normal file
152
ircbot.py
Normal file
|
@ -0,0 +1,152 @@
|
||||||
|
import socket
|
||||||
|
import random
|
||||||
|
import sys
|
||||||
|
import StringIO
|
||||||
|
import time
|
||||||
|
|
||||||
|
"""
|
||||||
|
For some reason this bot doens't join channels automatically so an admin has to
|
||||||
|
/msg BotName .join #chan
|
||||||
|
replacing botname with nick, and chan with chan from the config below
|
||||||
|
"""
|
||||||
|
|
||||||
|
#Config
|
||||||
|
nick = "Angstman" #define nick
|
||||||
|
network = "my.irc.server"
|
||||||
|
port = 6667
|
||||||
|
chan = "#lobby"
|
||||||
|
admins = ["sockspls", "SocksPls"]
|
||||||
|
|
||||||
|
with open("wordlist.txt") as f:
|
||||||
|
words = f.readlines()
|
||||||
|
|
||||||
|
def connect():
|
||||||
|
irc = socket.socket(socket.AF_INET, socket.SOCK_STREAM) #Define IRC network
|
||||||
|
|
||||||
|
print "[*] Connecting"
|
||||||
|
irc.connect((network,port))
|
||||||
|
print "[*] Connected"
|
||||||
|
|
||||||
|
irc.recv (4096)
|
||||||
|
irc.send('NICK ' + nick + '\r\n') #Set nick
|
||||||
|
irc.send('USER ' + nick + " " + nick + " " + nick + " " + nick + "\r\n") #Sent user info
|
||||||
|
irc.send('JOIN ' + chan + "\r\n")
|
||||||
|
return irc
|
||||||
|
|
||||||
|
def join(chan):
|
||||||
|
print("[*] Trying to join " + str(chan))
|
||||||
|
irc.send('JOIN ' + chan + "\r\n")
|
||||||
|
|
||||||
|
def ping(data):
|
||||||
|
irc.send('PONG ' + data.split()[1] + '\r\n') #Send back a PONG
|
||||||
|
|
||||||
|
def msgchan(msg, chan):
|
||||||
|
irc.send('PRIVMSG ' + chan + " :" + msg + "\r\n")
|
||||||
|
|
||||||
|
def voice(tovoice, chan):
|
||||||
|
irc.send("MODE " + chan + " v:" + tovoice + "\r\n")
|
||||||
|
|
||||||
|
qword = ""
|
||||||
|
def resetgame(gword=""):
|
||||||
|
global qword
|
||||||
|
if gword == "" and qword == "":
|
||||||
|
word = random.choice(words).strip()
|
||||||
|
elif qword != "":
|
||||||
|
word = qword
|
||||||
|
qword = ""
|
||||||
|
else:
|
||||||
|
word = gword
|
||||||
|
global word
|
||||||
|
correct = ""
|
||||||
|
global correct
|
||||||
|
incorrect = ""
|
||||||
|
global incorrect
|
||||||
|
resetgame()
|
||||||
|
|
||||||
|
def showboard(channel):
|
||||||
|
clue = ""
|
||||||
|
for letter in word:
|
||||||
|
if letter in correct:
|
||||||
|
clue = clue + " " + letter
|
||||||
|
else:
|
||||||
|
clue = clue + " " + "_"
|
||||||
|
clue = clue[1:]
|
||||||
|
if incorrect != "":
|
||||||
|
msgchan("Incorrect guesses: " + incorrect, channel)
|
||||||
|
msgchan(clue, channel)
|
||||||
|
|
||||||
|
irc = connect()
|
||||||
|
|
||||||
|
def privmsgdetails(data):
|
||||||
|
sender = data.split("!")[0][1:]
|
||||||
|
senderhostname = data.split()[0].split("!")[1]
|
||||||
|
fromchannel = data.split()[2]
|
||||||
|
messagesent = ":".join(data.split(":")[2:])
|
||||||
|
return(sender, senderhostname, fromchannel, messagesent)
|
||||||
|
|
||||||
|
resetgame() #Starts the first game
|
||||||
|
while True:
|
||||||
|
data = irc.recv (4096)
|
||||||
|
print data
|
||||||
|
if data.find('PING') != -1:
|
||||||
|
ping(data)
|
||||||
|
elif data.split()[1] == "PRIVMSG":
|
||||||
|
sender, senderhostname, fromchannel, messagesent = privmsgdetails(data)
|
||||||
|
if messagesent.startswith(".ping"):
|
||||||
|
msgchan("pong", fromchannel)
|
||||||
|
reg = 1
|
||||||
|
elif messagesent.startswith(".say"):
|
||||||
|
msgchan(messagesent[4:], fromchannel)
|
||||||
|
elif messagesent.startswith(".join") and sender in admins:
|
||||||
|
join(messagesent[6:])
|
||||||
|
print "Joining " + messagesent[6:]
|
||||||
|
elif messagesent.startswith(".quit") and sender in admins:
|
||||||
|
exit()
|
||||||
|
elif messagesent.startswith(".word") and sender in admins:
|
||||||
|
resetgame(messagesent[5:].strip())
|
||||||
|
elif messagesent.startswith(".qword") and sender in admins:
|
||||||
|
qword = messagesent[6:].strip()
|
||||||
|
elif messagesent.startswith(".reset") and sender in admins:
|
||||||
|
msgchan("Resetting game", chan)
|
||||||
|
resetgame()
|
||||||
|
showboard(chan)
|
||||||
|
elif messagesent.startswith(".g"):
|
||||||
|
errorcode = 0
|
||||||
|
try:
|
||||||
|
guess = messagesent[2:].strip()
|
||||||
|
guess = guess.lower() #Converts the guess to lowecase
|
||||||
|
except:
|
||||||
|
showboard(chan)
|
||||||
|
guess = ""
|
||||||
|
for letter in guess:
|
||||||
|
if letter not in "qwertyuiopasdfghjklzxcvbnm":
|
||||||
|
errorcode = 1
|
||||||
|
if errorcode == 1:
|
||||||
|
msgchan("Your guess can only contain letters", chan)
|
||||||
|
elif guess == "":
|
||||||
|
pass
|
||||||
|
elif len(guess) > 1: #Guessing a word
|
||||||
|
if guess == word:
|
||||||
|
msgchan("You win!", chan)
|
||||||
|
resetgame()
|
||||||
|
else:
|
||||||
|
msgchan("You guessed the incorrect word " + guess, chan)
|
||||||
|
elif guess in correct or guess in incorrect:
|
||||||
|
msgchan("You have already guessed the letter " + guess, chan)
|
||||||
|
else:
|
||||||
|
if guess in word and guess != "":
|
||||||
|
correct += guess
|
||||||
|
msgchan("You guessed the correct letter " + guess, chan)
|
||||||
|
winrar = 1
|
||||||
|
for current in word:
|
||||||
|
if current not in correct: #If any letters are in the word and you haven't guessed them
|
||||||
|
winrar = 0
|
||||||
|
if winrar == 1:
|
||||||
|
showboard(chan)
|
||||||
|
msgchan("You win! Resetting board", chan)
|
||||||
|
resetgame()
|
||||||
|
|
||||||
|
else:
|
||||||
|
incorrect += guess
|
||||||
|
msgchan("You have guessed the incorrect letter " + guess, chan)
|
||||||
|
showboard(chan)
|
172820
wordlist.txt
Normal file
172820
wordlist.txt
Normal file
File diff suppressed because it is too large
Load diff
Loading…
Add table
Reference in a new issue