]> git.netwichtig.de Git - user/henk/code/ruby/rbot.git/blob - data/rbot/plugins/lart.rb
fix help text, ticket #36
[user/henk/code/ruby/rbot.git] / data / rbot / plugins / lart.rb
1 #  Author:     Michael Brailsford  <brailsmt@yahoo.com>
2 #              aka brailsmt
3 #  Purpose:        Provide for humorous larts and praises
4 #  Copyright:  2002 Michael Brailsford.  All rights reserved.
5 #  License:    This plugin is licensed under the BSD license.  The terms of
6 #              which follow.
7 #
8 #  Redistribution and use in source and binary forms, with or without
9 #  modification, are permitted provided that the following conditions
10 #  are met:
11 #
12 #  1. Redistributions of source code must retain the above copyright notice,
13 #     this list of conditions and the following disclaimer.
14 #
15 #  2. Redistributions in binary form must reproduce the above copyright
16 #     notice, this list of conditions and the following disclaimer in the
17 #     documentation and/or other materials provided with the distribution.
18
19 class LartPlugin < Plugin
20
21         # Keep a 1:1 relation between commands and handlers
22         @@handlers = {
23                 "lart" => "handle_lart",
24                 "praise" => "handle_praise",
25                 "addlart" => "handle_addlart",
26                 "rmlart" => "handle_rmlart",
27                 "addpraise" => "handle_addpraise",
28                 "rmpraise" => "handle_rmpraise"
29         }
30
31   def name
32     "lart"
33   end
34
35         #{{{
36         def initialize
37                 super
38                 @larts = Array.new
39                 @praises = Array.new
40                 #read in the lart and praise files
41                 if File.exists? "#{@bot.botclass}/lart/larts"
42                         IO.foreach("#{@bot.botclass}/lart/larts") { |line|
43                                 @larts << line.chomp
44                         }
45                 end
46                 if File.exists? "#{@bot.botclass}/lart/praises"
47                         IO.foreach("#{@bot.botclass}/lart/praises") { |line|
48                                 @praises << line.chomp
49                         }
50                 end
51         end
52         #}}}
53         #{{{
54         def cleanup
55         end
56         #}}}
57         #{{{
58         def save
59                 Dir.mkdir("#{@bot.botclass}/lart") if not FileTest.directory? "#{@bot.botclass}/lart"
60                 File.open("#{@bot.botclass}/lart/larts", "w") { |file|
61                         file.puts @larts
62                 }
63                 File.open("#{@bot.botclass}/lart/praises", "w") { |file|
64                         file.puts @praises
65                 }
66         end
67         #}}}
68         #{{{
69         def privmsg(m)
70                 if not m.params
71                         m.reply "What a crazy fool!  Did you mean |help stats?"
72                         return
73                 end
74
75                 meth = self.method(@@handlers[m.plugin])
76                 meth.call(m) if(@bot.auth.allow?(m.plugin, m.source, m.replyto))
77         end
78         #}}}
79         #{{{
80         def help(plugin, topic="")
81                 "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."
82         end
83         #}}}
84         # The following are command handlers    {{{
85         #{{{
86         def handle_lart(m)
87                 for_idx = m.params =~ /\s+\bfor\b/
88                 if for_idx
89                         nick = m.params[0, for_idx]
90                 else
91                         nick = m.params
92                 end
93                 lart = @larts[get_msg_idx(@larts.length)]
94                 if lart == nil
95                         m.reply "I dunno any larts"
96                         return
97                 end
98                 if nick == @bot.nick
99                         lart = replace_who lart, m.sourcenick
100                         lart << " for trying to make me lart myself"
101                 else
102                         lart = replace_who lart, nick
103                         lart << m.params[for_idx, m.params.length] if for_idx
104                 end
105
106                 @bot.action m.replyto, lart
107         end
108         #}}}
109         #{{{
110         def handle_praise(m)
111                 for_idx = m.params =~ /\s+\bfor\b/
112                 if for_idx
113                         nick = m.params[0, for_idx]
114                 else
115                         nick = m.params
116                 end
117                 praise = @praises[get_msg_idx(@praises.length)]
118                 if not praise
119                         m.reply "I dunno any praises"
120                         return
121                 end
122
123                 if nick == m.sourcenick
124                         praise = @larts[get_msg_idx(@larts.length)]
125                         praise = replace_who praise, nick
126                 else
127                         praise = replace_who praise, nick
128                         praise << m.params.gsub(/#{nick}/, "")
129                 end
130
131                 @bot.action m.replyto, praise
132         end
133         #}}}
134         #{{{
135         def handle_addlart(m)
136                 @larts << m.params
137                 m.okay
138         end
139         #}}}
140         #{{{
141         def handle_rmlart(m)
142                 @larts.delete m.params
143                 m.okay
144         end
145         #}}}
146         #{{{
147         def handle_addpraise(m)
148                 @praises << m.params
149                 m.okay
150         end
151         #}}}
152         #{{{
153         def handle_rmpraise(m)
154                 @praises.delete m.params
155                 m.okay
156         end
157         #}}}
158         #}}}
159
160         #  The following are utils for larts/praises    {{{
161         #{{{
162         def replace_who(msg, nick)
163                 msg.gsub(/<who>/i, "#{nick}")
164         end
165         #}}}
166         #{{{
167         def get_msg_idx(max)
168                 idx = rand(max)
169         end
170         #}}}
171         #}}}
172 end
173 plugin = LartPlugin.new
174 plugin.register("lart")
175 plugin.register("praise")
176
177 plugin.register("addlart")
178 plugin.register("addpraise")
179
180 plugin.register("rmlart")
181 plugin.register("rmpraise")