示例#1
0
def procinput(inp):
    """ processes data received from eotl for potential
	user requests

	"""
    buf = ""  # Define scope for the buffer
    global feed
    #print inp

    # extract tells from input and acts on them, output is buffered
    # and returned in a block for delivery
    m = re.findall('^([A-Za-z]+) tells you: (.*)$', inp, re.M)
    m += re.findall('^\[-Gamez-\] ([A-Za-z]+): (.*)$', inp, re.M)
    for data in m:
        plname = string.lower(data[0])
        s = data[1][:-1].lstrip().rstrip()

        rg = re.match('!help$', s)
        if rg:
            buf += "echo ' Get a tinyurl with !tiny <url>' "+plname+"\n" \
             "echo ' ??foo   search by entry title' "+plname+"\n" \
             "echo ' **bar   search for bar within entry bodies' "+plname+"\n" \
             "echo '    - Multipe search terms can be seperated by &&' "+plname+"\n" \
             "echo '    - ie: tell rodney ** fire resistance && eating' "+plname+"\n" \
             "echo ' !rank  player rankings by ascensions' "+plname+"\n" \
             "echo ' !moonphase  lists current effects from the moon if any' "+plname+"\n" \
             "echo ' !gamesby <player>  shows statistics from players games' "+plname+"\n" \
             "echo ' -- Ascension gamedumps available at:' "+plname+"\n" \
             "echo '    'http://nethack.eotl.org/~tylinial/' "+plname+"\n"
            continue

        rg = re.match('!rank$', s)
        if rg:
            count = 0
            foo = halloffame()
            buf += "tell " + plname + " Ranking by Ascensions\n"
            for [name, score] in foo:
                count += 1
                buf += "tell " + plname + " " + str(
                    count) + "..  " + name + ": " + str(score) + "\n"

        rg = re.match('!gamesby (.*)$', s)
        if rg:
            foo = gamesby(rg.group(1))
            buf += "tell "+plname+" "+rg.group(1).capitalize()+" has played "+str(foo[0])+ \
            " with highest score "+str(foo[1])+", ascended "+str(foo[2])+", died "+str(foo[3])+\
            ", lifesaved "+str(foo[4])+", quit "+str(foo[5])+", escaped "+str(foo[6])+" times."

        rg = re.match('^\?\?(.*)\[(\d)\]$', s)
        if rg:
            d = rodlib.find(rg.group(1).lstrip(), int(rg.group(2)))
            for item in d:
                buf += "tell " + plname + " " + item[1] + ": " + item[2] + "\n"
            if not d:
                buf += "tell " + plname + " No results, try without the index.\n"
            continue
        rg = re.match('^\?\?(.*)$', s)
        if rg:
            d = rodlib.find(rg.group(1).lstrip())
            for item in d:
                buf += "tell " + plname + " " + item[1] + ": " + item[2] + "\n"
            if not d:
                buf += "tell " + plname + " No results, try a search.\n"
            continue

        rg = re.match('^\*\*(.*)$', s)
        if rg:
            d = rodlib.search(rg.group(1).lstrip())
            for item in d:
                buf += "tell " + plname + " " + item[1] + ": " + item[2] + "\n"
            if not d:
                buf += "tell " + plname + " No results.\n"
            continue

        rg = re.match('^!tiny (.*)$', s)
        if rg:
            buf += "tell " + plname + " " + tinyurl.getTinyurl(
                rg.group(1)) + "\n"
            continue

        rg = re.match('^!doupdatenow$', s)
        if rg:
            buf += "tell " + plname + " "
            if rodlib.update(True):
                rodlib.loaddata()
                buf += "Update complete.\n"
            else:
                buf += "Update failed.\n"
            continue

        rg = re.match('^!lastupdate$', s)
        if rg:
            buf += "tell " + plname + " Last update : " + time.ctime(
                rodlib.lastupdate()) + "\n"
            buf += "tell " + plname + " Current time: " + time.ctime() + "\n"
            continue

        rg = re.match('^!lastgame (.*)$', s)
        if rg:
            s = lastgame(rg.group(1))
            if s:
                buf += "tell " + plname + " " + s + "\n"
            else:
                buf += "tell " + plname + " Couldn't find a lastgame for " + rg.group(
                    1) + "\n"
            continue

        rg = re.match('^!moonphase$', s)
        if rg:
            if luckmsg:
                buf += "tell " + plname + " " + luckmsg + '\n'
            else:
                buf += "tell " + plname + " No unusual moon phase info right now\n"
            continue

        rg = re.match('^!updatefeed$', s)
        if rg:
            try:
                del feed
                reload(rodfeed)
                feed = rodfeed.Feed()
                buf += "tell " + plname + " Reloaded.\n"
            except:
                buf += "tell " + plname + " Reload failed.\n"
            continue

        rg = re.match('^!updatelib$', s)
        if rg:
            try:
                reload(rodlib)
                buf += "tell " + plname + " Reloaded.\n"
            except:
                buf += "tell " + plname + " Reload failed.\n"
            continue

        rg = re.match('^!clearfeed$', s)
        if rg:
            feedpoll = []
            buf += "tell " + plname + " Feeds cleared.\n"
            continue

    return buf
示例#2
0
文件: rodney.py 项目: zeffrin/rodney
def procinput(inp):
	""" processes data received from eotl for potential
	user requests

	"""
	buf = ""	# Define scope for the buffer
	global feed
	#print inp

	# extract tells from input and acts on them, output is buffered
	# and returned in a block for delivery
	m = re.findall('^([A-Za-z]+) tells you: (.*)$', inp, re.M)
	m += re.findall('^\[-Gamez-\] ([A-Za-z]+): (.*)$', inp, re.M)
	for data in m:
		plname = string.lower(data[0])
		s = data[1][:-1].lstrip().rstrip()
		
		rg = re.match('!help$', s)
		if rg:
			buf += "echo ' Get a tinyurl with !tiny <url>' "+plname+"\n" \
				"echo ' ??foo   search by entry title' "+plname+"\n" \
				"echo ' **bar   search for bar within entry bodies' "+plname+"\n" \
				"echo '    - Multipe search terms can be seperated by &&' "+plname+"\n" \
				"echo '    - ie: tell rodney ** fire resistance && eating' "+plname+"\n" \
				"echo ' !rank  player rankings by ascensions' "+plname+"\n" \
				"echo ' !moonphase  lists current effects from the moon if any' "+plname+"\n" \
				"echo ' !gamesby <player>  shows statistics from players games' "+plname+"\n" \
				"echo ' -- Ascension gamedumps available at:' "+plname+"\n" \
				"echo '    'http://nethack.eotl.org/~tylinial/' "+plname+"\n"
			continue
			
		rg = re.match('!rank$', s)
		if rg:
			count = 0
			foo = halloffame()
			buf += "tell "+plname+" Ranking by Ascensions\n"
			for [name,score] in foo:
				count += 1
				buf += "tell "+plname+" "+str(count)+"..  "+name+": "+str(score)+"\n"

		rg = re.match('!gamesby (.*)$', s)
		if rg:
			foo = gamesby(rg.group(1))
			buf += "tell "+plname+" "+rg.group(1).capitalize()+" has played "+str(foo[0])+ \
			" with highest score "+str(foo[1])+", ascended "+str(foo[2])+", died "+str(foo[3])+\
			", lifesaved "+str(foo[4])+", quit "+str(foo[5])+", escaped "+str(foo[6])+" times."

		rg = re.match('^\?\?(.*)\[(\d)\]$', s)
		if rg:
			d = rodlib.find(rg.group(1).lstrip(), int(rg.group(2)))
			for item in d:
				buf += "tell "+plname+" "+item[1]+": "+item[2]+"\n"
			if not d:
				buf += "tell "+plname+" No results, try without the index.\n"
			continue
		rg = re.match('^\?\?(.*)$', s)
		if rg:
			d = rodlib.find(rg.group(1).lstrip())
			for item in d:			
				buf += "tell "+plname+" "+item[1]+": "+item[2]+"\n"
			if not d:		
				buf += "tell "+plname+" No results, try a search.\n"
			continue

		rg = re.match('^\*\*(.*)$', s)
		if rg:
			d = rodlib.search(rg.group(1).lstrip())
			for item in d:
				buf += "tell "+plname+" "+item[1]+": "+item[2]+"\n"
			if not d:
				buf += "tell "+plname+" No results.\n"
			continue

		rg = re.match('^!tiny (.*)$', s)
		if rg:
			buf += "tell "+plname+" "+tinyurl.getTinyurl(rg.group(1))+"\n"
			continue

		rg = re.match('^!doupdatenow$', s)
		if rg:
			buf += "tell "+plname+" "
			if rodlib.update(True):
				rodlib.loaddata()
				buf += "Update complete.\n"
			else:
				buf += "Update failed.\n"
			continue

		rg = re.match('^!lastupdate$', s)
		if rg:
			buf += "tell "+plname+" Last update : "+time.ctime(rodlib.lastupdate())+"\n"
			buf += "tell "+plname+" Current time: "+time.ctime()+"\n"
			continue

		rg = re.match('^!lastgame (.*)$', s)
		if rg:
			s = lastgame(rg.group(1))
			if s:
				buf += "tell "+plname+" "+s+"\n"
			else:
				buf += "tell "+plname+" Couldn't find a lastgame for "+rg.group(1)+"\n"
			continue

		rg = re.match('^!moonphase$', s)
		if rg:
			if luckmsg:
				buf += "tell "+plname+" "+luckmsg+'\n'
			else:
				buf += "tell "+plname+" No unusual moon phase info right now\n"
			continue

		rg = re.match('^!updatefeed$', s)
		if rg:
			try:
				del feed
				reload(rodfeed)
				feed = rodfeed.Feed()
				buf += "tell "+plname+" Reloaded.\n"
			except:
				buf += "tell "+plname+" Reload failed.\n"
			continue

		rg = re.match('^!updatelib$', s)
		if rg:
			try:
				reload(rodlib)
				buf += "tell "+plname+" Reloaded.\n"
			except:
				buf += "tell "+plname+" Reload failed.\n"
			continue

		rg = re.match('^!clearfeed$', s)
		if rg:
			feedpoll = []
			buf += "tell "+plname+" Feeds cleared.\n"
			continue
	
	return buf
示例#3
0
        # if theres some new feed items add them to poll
        # for display
        feeditems = feed.update()
        if feeditems:
            feedpoll += feeditems

        # if there is news outstanding and its been more than 45 secs since the last display item
        if feedpoll and feedtimer < time.time():
            entry = feedpoll.pop(0)
            # hack because some feeds have some antiascii bs - if it doesnt work, forget it

            try:
                EOTLSock.send(ESC + 'channel ' + entry[2] + ' ' +
                              toascii(entry[1]['title'] + ' ' +
                                      tinyurl.getTinyurl(entry[1]['link']) +
                                      '\n'))
                EOTLSock.send(ESC + 'channel hl-all (' +
                              toascii(entry[0] + ') ' + entry[1]['title']) +
                              ' ' + tinyurl.getTinyurl(entry[1]['link']) +
                              '\n')

            except:
                print "Failed to post a link"
                pass

            # set 45 seconds before displaying another item
            feedtimer = time.time() + 45


def nhlog_parse(line):
示例#4
0
文件: rodney.py 项目: zeffrin/rodney
			rodlib.loaddata()
			print "Rodney:  Done update.\n"

		# if theres some new feed items add them to poll 
		# for display
		feeditems = feed.update()
		if feeditems:
			feedpoll += feeditems
	
		# if there is news outstanding and its been more than 45 secs since the last display item
		if feedpoll and feedtimer < time.time():
			entry = feedpoll.pop(0)
			# hack because some feeds have some antiascii bs - if it doesnt work, forget it
	
			try:
				EOTLSock.send(ESC+'channel '+entry[2]+' '+toascii(entry[1]['title'] +' '+tinyurl.getTinyurl(entry[1]['link'])+'\n'))
				EOTLSock.send(ESC+'channel hl-all ('+ toascii(entry[0]+') '+entry[1]['title']) +' '+tinyurl.getTinyurl(entry[1]['link'])+'\n')

			except:
				print "Failed to post a link"
				pass

			# set 45 seconds before displaying another item
			feedtimer = time.time()+45


def nhlog_parse(line):
	""" parses a line of nethack logfile and returns string, first 2 characters of the string represent death code
	and gender respectively.  Codes as below:
	deaths (first character):
	0	Normal death