[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Debian Games Parties!



Christoph Egger schrieb:
> 	I'll do some cleanup of the botscript tomorrow and then place it
> somewhere on alioth for Consumption.
> 
> Regards
> 
> 	Christoph

	And here it is. IRC Commands are not yet implemented (there are 2 stubs
to see how they will work) and it'll need porting to UNIX sockets
(should be really easy) but works.

Regards

	Christoph

-- 
/"\  ASCII Ribbon : GPG-Key ID: 0x0372275D
\ /    Campaign   :
 X   against HTML : Working for Debian
/ \   in eMails   : http://www.debian.org/

http://www.christoph-egger.org/
#!/usr/bin/python
# Copyright (C) 2009 Christoph Egger
# 
#   This software is provided 'as-is', without any express or implied
#   warranty.  In no event will the authors be held liable for any damages
#   arising from the use of this software.
# 
#   Permission is granted to anyone to use this software for any purpose,
#   including commercial applications, and to alter it and redistribute it
#   freely, subject to the following restrictions:
# 
#   1. The origin of this software must not be misrepresented; you must not
#      claim that you wrote the original software. If you use this software
#      in a product, an acknowledgment in the product documentation would be
#      appreciated but is not required.
#   2. Altered source versions must be plainly marked as such, and must not be
#      misrepresented as being the original software.
#   3. This notice may not be removed or altered from any source distribution.

import irclib
from ircbot import SingleServerIRCBot
import sys
import socket

#IRC side
network = 'irc.oftc.net'
nickname = 'GamesPartyBOT'
channel = '#debian-games-party'

#Webfrontend side
host = ''
port = 2222

class GamesPartyBot(SingleServerIRCBot):
    def __init__(self):
        SingleServerIRCBot.__init__(self, [(network, 6667)], nickname, nickname)
        self.queue = ['Hi all!']
        self.socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
        self.socket.bind((host, port))
        self.socket.listen(5)
        self.socket.settimeout(5.0)
        self.werein = False
 
    def run(self):
        self._connect()
        while not self.werein:
            self.ircobj.process_once()

        while True:
            self.check_for_data()
            self.send_out_news()
            self.ircobj.process_once()
    
    def command(self,what,who):
        try:
            command,params = what.split(' ', 1)
        except ValueError:
            command,params = what,''
        m = "command_%s" % command
        if hasattr(self, m):
            getattr(self, m)(params,who)
        else:
            self.connection.privmsg(channel, 'No idea, honestly')

    def check_for_data(self):
        try:
            readsock,addr = self.socket.accept()
        except socket.timeout:
            return

        blocks = 0
        new = ""
        while True:
            blocks += 1
            if blocks > 5:
                return
            newdata = readsock.recv(1024)
            if len(newdata) == 0:
                break
            else:
                new += newdata
            if new == 'quit\n':
                self.connection.quit('DONE')
                self.ircobj.process_forever() #Make sure everything's flushed out
                return
            else:
                self.queue += new.split('\n')

    def send_out_news(self):
        while len(self.queue):
            item = self.queue.pop()
            if item != '':
                self.connection.privmsg(channel, item)

    def on_welcome(self, connection, event):
        print 'connected'
        connection.join(channel)
        
    def on_join(self, connection, event):
        print "I'm now in the channel!"
        self.werein = True

    def on_pubmsg(self, connection, event):
        data = event.arguments()[0]
        try:
            if data[0] == '!':
                self.command(data[1:], event.source().split('!')[0])
            elif data[:len(nickname)] == nickname:
                self.command(data[len(nickname) + 1:].strip(), event.source().split('!')[0])
        except ValueError:
            self.connection.privmsg(channel, 'You do confues me')

    def on_disconnect(self, connection, event):
        sys.exit(0)

    def command_claim(self, params, who):
        package, comment = params.split(' ', 1)
        self.connection.privmsg(channel, 'I should now make sure %s is claimed for %s with comment "%s"' % (package, who, comment))

    def command_release(self,params,who):
        self.connection.privmsg(channel, 'I should now clear the claim of %s for %s' % (who, params))

    def command_help(self, params, who):
        if len(params) == 0:
            message = '!claim, !release'
        if params in ('!claim', 'claim'):
            message = '!claim <package> <comment> : Claims the package for you'
        if params in ('!release', 'release'):
            message = '!release <package> : Release your claim on the package'

        self.connection.privmsg(channel, message)

if __name__ == '__main__':
    bot = GamesPartyBot()
    bot.run()

Attachment: signature.asc
Description: OpenPGP digital signature


Reply to: