Clean up new main() function
This commit is contained in:
parent
3ad2374dac
commit
4e9b7051fb
33
newbot.py
33
newbot.py
@ -1,7 +1,7 @@
|
|||||||
# Welcome to WelcomeBot. Find source, documentation, etc here: https://github.com/shaunagm/WelcomeBot/ Licensed https://creativecommons.org/licenses/by-sa/2.0/
|
# Welcome to WelcomeBot. Find source, documentation, etc here: https://github.com/shaunagm/WelcomeBot/ Licensed https://creativecommons.org/licenses/by-sa/2.0/
|
||||||
|
|
||||||
# Import some necessary libraries.
|
# Import some necessary libraries.
|
||||||
import socket, sys, time, csv, Queue, random, re, pdb
|
import socket, sys, time, csv, Queue, random, re, pdb, select
|
||||||
from threading import Thread
|
from threading import Thread
|
||||||
|
|
||||||
# Some basic variables used to configure the bot.
|
# Some basic variables used to configure the bot.
|
||||||
@ -62,28 +62,21 @@ class NewComer(object):
|
|||||||
def irc_start(): # pragma: no cover (this excludes this function from testing)
|
def irc_start(): # pragma: no cover (this excludes this function from testing)
|
||||||
ircsock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
ircsock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||||||
ircsock.connect((server, 6667)) # Here we connect to server using port 6667.
|
ircsock.connect((server, 6667)) # Here we connect to server using port 6667.
|
||||||
|
return ircsock
|
||||||
|
|
||||||
|
def join_irc(ircsock):
|
||||||
ircsock.send("USER {0} {0} {0} :This is http://openhatch.org/'s greeter bot"
|
ircsock.send("USER {0} {0} {0} :This is http://openhatch.org/'s greeter bot"
|
||||||
".\n".format(botnick)) # bot authentication
|
".\n".format(botnick)) # bot authentication
|
||||||
ircsock.send("NICK {}\n".format(botnick)) # Assign the nick to the bot.
|
ircsock.send("NICK {}\n".format(botnick)) # Assign the nick to the bot.
|
||||||
ircsock.send("JOIN {} \n".format(channel)) # Joins channel
|
ircsock.send("JOIN {} \n".format(channel)) # Joins channel
|
||||||
return ircsock
|
|
||||||
|
|
||||||
# Creates a separate thread for incoming messages (to combat concurrency issues)
|
|
||||||
def thread_start(ircsock): # pragma: no cover (this excludes this function from testing)
|
|
||||||
global q
|
|
||||||
q = queue.Queue() # Creates a Queue that will hold the incoming messages.
|
|
||||||
t = Thread(target=msg_handler(ircsock)) # Creates a separate thread running msg_hander function (below)
|
|
||||||
t.daemon = True
|
|
||||||
t.start()
|
|
||||||
|
|
||||||
# Reads the messages from the server and adds them to the Queue and prints
|
# Reads the messages from the server and adds them to the Queue and prints
|
||||||
# them to the console. This function will be run in a thread, see below.
|
# them to the console. This function will be run in a thread, see below.
|
||||||
def msg_handler(ircsock): # pragma: no cover (this excludes this function from testing)
|
def msg_handler(ircsock): # pragma: no cover (this excludes this function from testing)
|
||||||
while True:
|
new_msg = ircsock.recv(2048) # receive data from the server
|
||||||
new_msg = ircsock.recv(2048) # receive data from the server
|
new_msg = new_msg.strip('\n\r') # removing any unnecessary linebreaks
|
||||||
new_msg = new_msg.strip('\n\r') # removing any unnecessary linebreaks
|
print(new_msg) #### Potentially make this a log instead?
|
||||||
q.put(new_msg) # put in queue for main loop to read
|
return new_msg
|
||||||
print(new_msg) #### Potentially make this a log instead?
|
|
||||||
|
|
||||||
# Called by bot on startup. Builds a regex that matches one of the options + (space) botnick.
|
# Called by bot on startup. Builds a regex that matches one of the options + (space) botnick.
|
||||||
def get_regex(options):
|
def get_regex(options):
|
||||||
@ -213,12 +206,14 @@ def pong(ircsock):
|
|||||||
|
|
||||||
def main():
|
def main():
|
||||||
ircsock = irc_start()
|
ircsock = irc_start()
|
||||||
thread_start(ircsock)
|
join_irc(ircsock)
|
||||||
WelcomeBot = Bot()
|
WelcomeBot = Bot()
|
||||||
while 1: # Loop forever
|
while 1: # Loop forever
|
||||||
process_newcomers(WelcomeBot, ircsock, [i for i in WelcomeBot.newcomers if i.around_for() > WelcomeBot.wait_time])
|
ready_to_read, b, c = select.select([ircsock],[],[], 1) # ignore b&c, doesn't allow keywords
|
||||||
if q.empty() == 0: # If the queue is not empty...
|
if ready_to_read:
|
||||||
ircmsg, actor = parse_messages(q.get()) # parse the next msg in the queue
|
ircmsg = msg_handler(ircsock)
|
||||||
|
process_newcomers(WelcomeBot, [i for i in WelcomeBot.newcomers if i.around_for() > WelcomeBot.wait_time],ircsock)
|
||||||
|
ircmsg, actor = parse_messages(ircmsg) # parse the next msg in the queue
|
||||||
if ircmsg is not None: # If we were able to parse it
|
if ircmsg is not None: # If we were able to parse it
|
||||||
message_response(WelcomeBot, ircmsg, actor, ircsock) # Respond to the parsed message
|
message_response(WelcomeBot, ircmsg, actor, ircsock) # Respond to the parsed message
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user