Class: BasicsModule

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

Overview

– vim:sw=2:et ++

:title: rbot basic management from IRC

Author

Giuseppe “Oblomov” Bilotta <[email protected]>

Instance Method Summary collapse

Instance Method Details

#bot_action(m, param) ⇒ Object



106
107
108
# File 'lib/rbot/core/basics.rb', line 106

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

#bot_channel_list(m, param) ⇒ Object



72
73
74
75
76
77
78
79
80
81
82
83
84
# File '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

#bot_help(m, param) ⇒ Object



140
141
142
# File 'lib/rbot/core/basics.rb', line 140

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

#bot_hide(m, param) ⇒ Object



98
99
100
# File 'lib/rbot/core/basics.rb', line 98

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

#bot_join(m, param) ⇒ Object



50
51
52
53
54
55
56
# File '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

#bot_mode(m, param) ⇒ Object



110
111
112
# File 'lib/rbot/core/basics.rb', line 110

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

#bot_part(m, param) ⇒ Object



64
65
66
67
68
69
70
# File '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

#bot_ping(m, param) ⇒ Object



114
115
116
# File 'lib/rbot/core/basics.rb', line 114

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

#bot_quiet(m, param) ⇒ Object



118
119
120
121
122
123
124
125
126
127
# File 'lib/rbot/core/basics.rb', line 118

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

#bot_quit(m, param) ⇒ Object



86
87
88
# File 'lib/rbot/core/basics.rb', line 86

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

#bot_reconnect(m, param) ⇒ Object



94
95
96
# File 'lib/rbot/core/basics.rb', line 94

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

#bot_restart(m, param) ⇒ Object



90
91
92
# File 'lib/rbot/core/basics.rb', line 90

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

#bot_say(m, param) ⇒ Object



102
103
104
# File 'lib/rbot/core/basics.rb', line 102

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

#bot_talk(m, param) ⇒ Object



129
130
131
132
133
134
135
136
137
138
# File 'lib/rbot/core/basics.rb', line 129

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

#connectObject

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 '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

#ctcp_listen(m) ⇒ Object



40
41
42
43
44
45
46
47
48
# File '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

#help(cmd, topic = "") ⇒ Object

handle help requests for “core” topics



152
153
154
155
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
# File 'lib/rbot/core/basics.rb', line 152

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

#identifiedObject



25
26
27
# File 'lib/rbot/core/basics.rb', line 25

def identified
  join_channels
end

#invite(m) ⇒ Object



58
59
60
61
62
# File '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

#join_channelsObject



14
15
16
17
18
19
20
21
22
23
# File '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