Security News
Oracle Drags Its Feet in the JavaScript Trademark Dispute
Oracle seeks to dismiss fraud claims in the JavaScript trademark dispute, delaying the case and avoiding questions about its right to the name.
A clean, extensible IRC bot using Python, irckit, gevent & requests.
Author: Daniel Lindsley
License: BSD
Version: 0.4.1
Create your own bot.py
file & drop in:
import toastbot
bot = toastbot.ToastBot('myircbot', '#myircchannel')
bot.setup()
Then run it with python bot.py
.
The Toastbot
object requires nick
& channel
arguments & can take a
variety of non-required options.
nick
- The nickname of the bot, as a string.channel
- The channel the bot should connect to, as a string.server
- The server the bot should connect to (default: irc.freenode.net
).username
-The username the bot should identify as (default: nick
);realname
- The human readable name the bot should provide (default: 'ToastBot').debug
- Controls if the IRC connection should dump debug messages (default: false
).log_dir
- Controls what directory the logs should go in (default: $INSTALL_DIRECTORY/logs
).variants
- Used to override ways to address the bot. Should be strings (default: [self.nick+': ', self.nick+', ', self.nick+'- ', self.nick+' - ']
).Handlers are how the bot can perform actions based on an incoming message. They are simple methods hanging off the bot object. The built-in list consists of:
help
- Provides a description of what I respond to.dance
- Get down and funky.woodies
- Best quote on the internet..wiki
- Search Wikipedia for a topic.metar
- Fetch a NOAA METAR by station code.twitter
- Search Twitter for a topic.fatpita
- Get a random fatpita image. For the lulz.corgibomb
- CORGI BOMBAdding on further handlers is relatively simple. At its most basic, it's simply
adding on a new method decorated with toastbot.handler
. For example, logging
how many times a user has said something in the channel might look like:
import toastbot
class MyBot(toastbot.ToastBot):
talkers = {}
def __init__(self, *args, **kwargs):
super(MyBot, self).__init__(*args, **kwargs)
self.enabled_commands += [
self.how_chatty,
]
def how_chatty(self, nick, text):
"""Logs how often a user has said something."""
if nick in self.talkers:
self.talkers[nick] += 1
else:
self.talkers[nick] = 1
print self.talkers.items()
bot = MyBot('myircbot', '#myircchannel')
bot.setup()
Note that this command does not require addressing the bot at all. If you want a command that the bot responds to, you might write something like:
import toastbot
class StoolPigeon(toastbot.ToastBot):
# Assume the previous example, but adding...
def __init__(self, *args, **kwargs):
super(StoolPigeon, self).__init__(*args, **kwargs)
self.enabled_commands += [
self.stool_pigeon,
]
def stool_pigeon(self, nick, text):
"""Rat out the talkers."""
text = self.is_direct_command('stool_pigeon', text)
if not text:
raise NotHandled()
return str(self.talkers)
bot = StoolPigeon('myircbot', '#myircchannel')
bot.setup()
This checks to see if the bot is being directly addressed then returns a
string-ified version of the talker
stats. The included handlers demonstrate
even more complex behavior, such as how to do network fetches or asynchronous
responses.
To disable handlers:
import toastbot
class MyBot(toastbot.ToastBot):
talkers = {}
def __init__(self, *args, **kwargs):
super(MyBot, self).__init__(*args, **kwargs)
self.enabled_commands = [func for func in self.enabled_commands if func.__name__ != 'twitter']
bot = MyBot('myircbot', '#myircchannel')
bot.setup()
FAQs
A clean, extensible IRC bot using irckit.
We found that toastbot demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Oracle seeks to dismiss fraud claims in the JavaScript trademark dispute, delaying the case and avoiding questions about its right to the name.
Security News
The Linux Foundation is warning open source developers that compliance with global sanctions is mandatory, highlighting legal risks and restrictions on contributions.
Security News
Maven Central now validates Sigstore signatures, making it easier for developers to verify the provenance of Java packages.