2 # Michael Brailsford <brailsmt@yahoo.com>
4 # Author: Giuseppe "Oblomov" Bilotta <giuseppe.bilotta@gmail.com>
5 # Purpose: Provide for humorous larts and praises
7 # 2002 Michael Brailsford. All rights reserved.
8 # Copyright: 2006 Giuseppe Bilotta. All rights reserved.
9 # License: This plugin is licensed under the BSD license. The terms of
12 # Redistribution and use in source and binary forms, with or without
13 # modification, are permitted provided that the following conditions
16 # 1. Redistributions of source code must retain the above copyright notice,
17 # this list of conditions and the following disclaimer.
19 # 2. Redistributions in binary form must reproduce the above copyright
20 # notice, this list of conditions and the following disclaimer in the
21 # documentation and/or other materials provided with the distribution.
23 class LartPlugin < Plugin
25 # Keep a 1:1 relation between commands and handlers
27 "lart" => "handle_lart",
28 "praise" => "handle_praise",
29 "addlart" => "handle_addlart",
30 "rmlart" => "handle_rmlart",
31 "addpraise" => "handle_addpraise",
32 "rmpraise" => "handle_rmpraise"
48 def set_language(lang)
51 # We may be on an old installation, so on the first run read non-language-specific larts
52 unless defined?(@oldlart)
53 @oldlart = "#{@bot.botclass}/lart/larts"
54 @oldpraise = "#{@bot.botclass}/lart/praise"
57 @lartfile.replace "#{@bot.botclass}/lart/larts-#{lang}"
58 @praisefile.replace "#{@bot.botclass}/lart/praises-#{lang}"
61 if File.exists? @lartfile
62 IO.foreach(@lartfile) { |line|
65 elsif File.exists? @oldlart
66 IO.foreach(@oldlart) { |line|
70 if File.exists? @praisefile
71 IO.foreach(@praisefile) { |line|
72 @praises << line.chomp
74 elsif File.exists? @oldpraise
75 IO.foreach(@oldpraise) { |line|
76 @praises << line.chomp
86 return unless @changed
87 Dir.mkdir("#{@bot.botclass}/lart") if not FileTest.directory? "#{@bot.botclass}/lart"
88 # TODO implement safe saving here too
89 Utils.safe_save(@lartfile) { |file|
92 Utils.safe_save(@praisefile) { |file|
100 m.reply "What a crazy fool! Did you mean |help stats?"
104 meth = self.method(@@handlers[m.plugin])
105 meth.call(m) if(@bot.auth.allow?(m.plugin, m.source, m.replyto))
108 def help(plugin, topic="")
109 "Lart: The lart plugin allows you to lart/praise someone in the channel. You can also add new larts and new praises as well as delete them. For the curious, LART is an acronym for Luser Attitude Readjustment Tool. Usage: lart <who> [<reason>] -- larts <who> for <reason>. praise <who> [<reason>] -- praises <who> for <reason>. [add|rm][lart|praise] -- Add or remove a lart or praise."
112 # The following are command handler
115 for_idx = m.params =~ /\s+\bfor\b/
117 nick = m.params[0, for_idx]
121 lart = @larts[get_msg_idx(@larts.length)]
123 m.reply "I dunno any larts"
127 lart = replace_who lart, m.sourcenick
128 lart << " for trying to make me lart myself"
130 lart = replace_who lart, nick
131 lart << m.params[for_idx, m.params.length] if for_idx
134 @bot.action m.replyto, lart
138 for_idx = m.params =~ /\s+\bfor\b/
140 nick = m.params[0, for_idx]
144 praise = @praises[get_msg_idx(@praises.length)]
146 m.reply "I dunno any praises"
150 if nick == m.sourcenick
151 praise = @larts[get_msg_idx(@larts.length)]
152 praise = replace_who praise, nick
154 praise = replace_who praise, nick
155 praise << m.params.gsub("#{nick}", "")
158 @bot.action m.replyto, praise
161 def handle_addlart(m)
168 @larts.delete m.params
173 def handle_addpraise(m)
179 def handle_rmpraise(m)
180 @praises.delete m.params
185 # The following are utils for larts/praises
186 def replace_who(msg, nick)
187 msg.gsub(/<who>/i, "#{nick}")
195 plugin = LartPlugin.new
196 plugin.register("lart")
197 plugin.register("praise")
199 plugin.register("addlart")
200 plugin.register("addpraise")
202 plugin.register("rmlart")
203 plugin.register("rmpraise")