Class: BasicsModule

Inherits:
CoreBotModule
  • Object
show all
Defined in:
/home/apoc/projects/ruby/rbot/lib/rbot/core/basics.rb

Overview

– vim:sw=2:et ++

:title: rbot basic management from IRC

Author

Giuseppe “Oblomov” Bilotta <giuseppe.bilotta@gmail.com>

Instance Method Summary (collapse)

Instance Method Details

- (Object) bot_action(m, param)



110
111
112
# File '/home/apoc/projects/ruby/rbot/lib/rbot/core/basics.rb', line 110

def bot_action(m, param)
  @bot.action param[:where], param[:what].to_s
end

- (Object) bot_channel_list(m, param)



72
73
74
75
76
77
78
79
80
81
82
83
84
# File '/home/apoc/projects/ruby/rbot/lib/rbot/core/basics.rb', line 72

def bot_channel_list(m, param)
  ret = _('I am in: ')
  # sort the channels by the base name and then map with prefixes for the
  # mode and display.
  ret << @bot.channels.compact.sort { |a,b|
      a.name.downcase <=> b.name.downcase
  }.map { |c|
      c.modes_of(@bot.myself).map{ |mo|
        m.server.prefix_for_mode(mo)
      }.to_s + c.name
  }.join(', ')
  m.reply ret
end

- (Object) bot_help(m, param)



144
145
146
# File '/home/apoc/projects/ruby/rbot/lib/rbot/core/basics.rb', line 144

def bot_help(m, param)
  m.reply @bot.help(param[:topic].join(" "))
end

- (Object) bot_hide(m, param)



98
99
100
# File '/home/apoc/projects/ruby/rbot/lib/rbot/core/basics.rb', line 98

def bot_hide(m, param)
  @bot.join 0
end

- (Object) bot_join(m, param)



50
51
52
53
54
55
56
# File '/home/apoc/projects/ruby/rbot/lib/rbot/core/basics.rb', line 50

def bot_join(m, param)
  if param[:pass]
    @bot.join param[:chan], param[:pass]
  else
    @bot.join param[:chan]
  end
end

- (Object) bot_mode(m, param)



114
115
116
# File '/home/apoc/projects/ruby/rbot/lib/rbot/core/basics.rb', line 114

def bot_mode(m, param)
  @bot.mode param[:where], param[:what], param[:who].join(" ")
end

- (Object) bot_notify(m, param)



106
107
108
# File '/home/apoc/projects/ruby/rbot/lib/rbot/core/basics.rb', line 106

def bot_notify(m, param)
  @bot.notice param[:where], param[:what].to_s
end

- (Object) bot_part(m, param)



64
65
66
67
68
69
70
# File '/home/apoc/projects/ruby/rbot/lib/rbot/core/basics.rb', line 64

def bot_part(m, param)
  if param[:chan]
    @bot.part param[:chan]
  else
    @bot.part m.target if m.public?
  end
end

- (Object) bot_ping(m, param)



118
119
120
# File '/home/apoc/projects/ruby/rbot/lib/rbot/core/basics.rb', line 118

def bot_ping(m, param)
  m.reply "pong"
end

- (Object) bot_quiet(m, param)



122
123
124
125
126
127
128
129
130
131
# File '/home/apoc/projects/ruby/rbot/lib/rbot/core/basics.rb', line 122

def bot_quiet(m, param)
  if param.has_key?(:where)
    @bot.set_quiet param[:where].sub(/^here$/, m.target.downcase)
  else
    @bot.set_quiet
  end
  # Make sense when the commmand is given in private or in a non-quieted
  # channel
  m.okay
end

- (Object) bot_quit(m, param)



86
87
88
# File '/home/apoc/projects/ruby/rbot/lib/rbot/core/basics.rb', line 86

def bot_quit(m, param)
  @bot.quit param[:msg].to_s
end

- (Object) bot_reconnect(m, param)



94
95
96
# File '/home/apoc/projects/ruby/rbot/lib/rbot/core/basics.rb', line 94

def bot_reconnect(m, param)
  @bot.reconnect param[:msg].to_s
end

- (Object) bot_restart(m, param)



90
91
92
# File '/home/apoc/projects/ruby/rbot/lib/rbot/core/basics.rb', line 90

def bot_restart(m, param)
  @bot.restart param[:msg].to_s
end

- (Object) bot_say(m, param)



102
103
104
# File '/home/apoc/projects/ruby/rbot/lib/rbot/core/basics.rb', line 102

def bot_say(m, param)
  @bot.say param[:where], param[:what].to_s
end

- (Object) bot_talk(m, param)



133
134
135
136
137
138
139
140
141
142
# File '/home/apoc/projects/ruby/rbot/lib/rbot/core/basics.rb', line 133

def bot_talk(m, param)
  if param.has_key?(:where)
    @bot.reset_quiet param[:where].sub(/^here$/, m.target.downcase)
  else
    @bot.reset_quiet
  end
  # Make sense when the commmand is given in private or in a non-quieted
  # channel
  m.okay
end

- (Object) connect

on connect, we join the default channels unless we have to wait for identification. Observe that this means the bot may not connect any channels until the 'identified' method gets delegated



32
33
34
35
36
37
38
# File '/home/apoc/projects/ruby/rbot/lib/rbot/core/basics.rb', line 32

def connect
  if @bot.config['irc.join_after_identify']
    log "waiting for identififcation before JOINing default channels"
  else
    join_channels
  end
end

- (Object) ctcp_listen(m)



40
41
42
43
44
45
46
47
48
# File '/home/apoc/projects/ruby/rbot/lib/rbot/core/basics.rb', line 40

def ctcp_listen(m)
  who = m.private? ? "me" : m.target
  case m.ctcp.intern
  when :PING
    m.ctcp_reply m.message
  when :TIME
    m.ctcp_reply Time.now.to_s
  end
end

- (Object) help(cmd, topic = "")

handle help requests for “core” topics



156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
# File '/home/apoc/projects/ruby/rbot/lib/rbot/core/basics.rb', line 156

def help(cmd, topic="")
  case cmd
  when "quit"
    _("quit [<message>] => quit IRC with message <message>")
  when "restart"
    _("restart => completely stop and restart the bot (including reconnect)")
  when "reconnect"
    _("reconnect => ask the bot to disconnect and then connect again")
  when "join"
    _("join <channel> [<key>] => join channel <channel> with secret key <key> if specified. #{@bot.myself} also responds to invites if you have the required access level")
  when "part"
    _("part <channel> => part channel <channel>")
  when "hide"
    _("hide => part all channels")
  when "say"
    _("say <channel>|<nick> <message> => say <message> to <channel> or in private message to <nick>")
  when "action"
    _("action <channel>|<nick> <message> => does a /me <message> to <channel> or in private message to <nick>")
  when "quiet"
    _("quiet [in here|<channel>] => with no arguments, stop speaking in all channels, if \"in here\", stop speaking in this channel, or stop speaking in <channel>")
  when "talk"
    _("talk [in here|<channel>] => with no arguments, resume speaking in all channels, if \"in here\", resume speaking in this channel, or resume speaking in <channel>")
  when "ping"
    _("ping => replies with a pong")
  when "mode"
    _("mode <channel> <mode> <nicks> => set channel modes for <nicks> on <channel> to <mode>")
  #     when "botsnack"
  #       return "botsnack => reward #{@bot.myself} for being good"
  #     when "hello"
  #       return "hello|hi|hey|yo [#{@bot.myself}] => greet the bot"
  else
    _("%{name}: quit, restart, join, part, hide, save, say, action, topic, quiet, talk, ping, mode") % {:name=>name}
    #, botsnack, hello
  end
end

- (Object) identified



25
26
27
# File '/home/apoc/projects/ruby/rbot/lib/rbot/core/basics.rb', line 25

def identified
  join_channels
end

- (Object) invite(m)



58
59
60
61
62
# File '/home/apoc/projects/ruby/rbot/lib/rbot/core/basics.rb', line 58

def invite(m)
  if @bot.auth.allow?(:basics::move::join", m.source, m.source)
    @bot.join m.channel
  end
end

- (Object) join_channels



14
15
16
17
18
19
20
21
22
23
# File '/home/apoc/projects/ruby/rbot/lib/rbot/core/basics.rb', line 14

def join_channels
  @bot.config['irc.join_channels'].each { |c|
    debug "autojoining channel #{c}"
    if(c =~ /^(\S+)\s+(\S+)$/i)
      @bot.join $1, $2
    else
      @bot.join c if(c)
    end
  }
end