# HG changeset patch # User Hubert Chathi # Date 1276215069 -3600 # Node ID b1f95474104f945b43c2c15e34adde4e25ad2814 # Parent 330643a82a1d52f692a5dfc868752d583835c2a2 plugins.slap: Can't have a bot without this! diff -r 330643a82a1d -r b1f95474104f plugins/slap.lua --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/plugins/slap.lua Fri Jun 11 01:11:09 2010 +0100 @@ -0,0 +1,90 @@ +-- slap.lua + +local st = require 'util.stanza' + +function riddim.plugins.slap(bot) + if type(bot.config.weapons) ~= 'table' then + -- start off with something to slap people with + bot.config.weapons = {'large trout'} + end + + -- reply to message (but don't prepend the sender's nick like groupchat's + -- event:reply does) + local function bare_reply(command, reply) + if command.stanza.attr.type == 'groupchat' then + local r = st.reply(command.stanza) + local room_jid = jid.bare(command.sender.jid); + if bot.rooms[room_jid] then + bot.rooms[room_jid]:send(r:tag("body"):text(reply)); + end + else + return command:reply(reply); + end + end + + -- slap someone + local function slap(command) + local who, weapon + if command.param then + who = command.param + else + -- slap the sender if they don't specify a target + if bot.rooms[jid.bare(command.sender.jid)] then + who = select(3, jid.split(command.sender.jid)) + else + who = (jid.split(command.sender.jid)) + end + end + weapon = bot.config.weapons[math.random(#bot.config.weapons)] + bare_reply(command, string.format('/me slaps %s with %s', who, weapon)) + end + + -- pick up a weapon for slapping + local function weapon(command) + if command.param then + if command.param:lower() == 'excalibur' then + command:reply 'Listen -- strange women lying in ponds distributing swords is no basis for a system of government. Supreme executive power derives from a mandate from the masses, not from some farcical aquatic ceremony.' + elseif command.param:lower() == 'paper' then + bare_reply(command, '"Reverse primary thrust, Marvin." That\'s what they say to me. "Open airlock number 3, Marvin." "Marvin, can you pick up that piece of paper?" Here I am, brain the size of a planet, and they ask me to pick up a piece of paper.') + else + table.insert(bot.config.weapons, command.param) + bare_reply(command, '/me picks up '..command.param) + end + else + command:reply 'Tell me what weapon to pick up' + end + end + + -- drop a weapon + local function drop(command) + if command.param then + local found + for i,v in ipairs(bot.config.weapons) do + local weapons = bot.config.weapons + if v == command.param then + if #weapons == 1 then + bare_reply(command, '/me refuses to drop his last weapon') + else + weapons[i] = weapons[#weapons] + table.remove(weapons) + found = true + end + break + end + end + if found then + bare_reply(command, '/me drops '..command.param) + else + bare_reply(command, "/me doesn't have "..command.param) + end + else + command:reply 'Tell me what to drop' + end + end + + bot:hook('commands/slap', slap) + bot:hook('commands/weapon', weapon) + bot:hook('commands/drop', drop) +end + +-- end of slap.lua