Ring-ding-ding-ding-dingeringeding!
This commit is contained in:
parent
7c0b19a003
commit
4c0facd77a
115
fox.py
Normal file
115
fox.py
Normal file
|
@ -0,0 +1,115 @@
|
|||
#!/usr/bin/env python
|
||||
# coding: utf-8
|
||||
#
|
||||
# fox.py
|
||||
# http://hg.mornie.org/misc/file/tip/fox.py
|
||||
#
|
||||
# Copyright © 2013 Daniele Tricoli <eriol@mornie.org>
|
||||
#
|
||||
# This program is free software. It comes without any warranty, to
|
||||
# the extent permitted by applicable law. You can redistribute it
|
||||
# and/or modify it under the terms of the Do What The Fuck You Want
|
||||
# To Public License, Version 2, as published by Sam Hocevar.
|
||||
# See http://www.wtfpl.net/ for more details.
|
||||
#
|
||||
# A present for Sidhe and ghunter!
|
||||
|
||||
|
||||
'''
|
||||
Simple IRC bot to tell you 'what the fox say' :)
|
||||
|
||||
|
||||
You need a configuration file in ~/.fox.cfg that would look like:
|
||||
|
||||
[server]
|
||||
hostname = your.irc.server
|
||||
port = 9999
|
||||
|
||||
[irc]
|
||||
channel = text
|
||||
|
||||
The fox is very bashful, it speaks only over SSL!
|
||||
'''
|
||||
|
||||
import random
|
||||
|
||||
from twisted.internet import reactor, protocol, ssl
|
||||
from twisted.words.protocols import irc
|
||||
|
||||
|
||||
BOT_NICKNAME = '_the_fox_'
|
||||
|
||||
|
||||
class Fox(object):
|
||||
|
||||
calls = ['Ring-ding-ding-ding-dingeringeding!',
|
||||
'Gering-ding-ding-ding-dingeringeding!',
|
||||
'Wa-pa-pa-pa-pa-pa-pow!',
|
||||
'Hatee-hatee-hatee-ho!',
|
||||
'Joff-tchoff-tchoffo-tchoffo-tchoff!',
|
||||
'Tchoff-tchoff-tchoffo-tchoffo-tchoff!',
|
||||
'Jacha-chacha-chacha-chow!',
|
||||
'Chacha-chacha-chacha-chow!',
|
||||
'Fraka-kaka-kaka-kaka-kow!',
|
||||
'A-hee-ahee ha-hee!',
|
||||
'A-oo-oo-oo-ooo!',
|
||||
'Woo-oo-oo-ooo!']
|
||||
|
||||
@classmethod
|
||||
def say(self):
|
||||
return random.choice(Fox.calls)
|
||||
|
||||
|
||||
class FoxBot(irc.IRCClient):
|
||||
|
||||
nickname = BOT_NICKNAME
|
||||
|
||||
def signedOn(self):
|
||||
self.join(self.factory.channel)
|
||||
|
||||
def privmsg(self, user, channel, msg):
|
||||
user = user.split('!', 1)[0]
|
||||
|
||||
# The fox is shy, it does't speak in private!
|
||||
if channel == self.nickname:
|
||||
return
|
||||
|
||||
if msg.startswith(self.nickname + ':'):
|
||||
msg = '{0}: {1}'.format(user, Fox.say())
|
||||
self.msg(channel, msg)
|
||||
|
||||
|
||||
class FoxBotFactory(protocol.ClientFactory):
|
||||
|
||||
protocol = FoxBot
|
||||
|
||||
def __init__(self, channel):
|
||||
self.channel = channel
|
||||
|
||||
def clientConnectionLost(self, connector, reason):
|
||||
connector.connect()
|
||||
|
||||
def clientConnectionFailed(self, connector, reason):
|
||||
print 'connection failed:', reason
|
||||
reactor.stop()
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
||||
import ConfigParser
|
||||
import os
|
||||
import sys
|
||||
|
||||
config = ConfigParser.ConfigParser()
|
||||
found = config.read(os.path.expanduser('~/.fox.cfg'))
|
||||
|
||||
if not found:
|
||||
sys.exit('You must provide ~/.fox.cfg')
|
||||
|
||||
hostname = config.get('server', 'hostname')
|
||||
port = config.getint('server', 'port')
|
||||
channel = config.get('irc', 'channel')
|
||||
|
||||
f = FoxBotFactory(channel)
|
||||
reactor.connectSSL(hostname, port, f, ssl.ClientContextFactory())
|
||||
|
||||
reactor.run()
|
Loading…
Reference in a new issue