class WeChat::Bot::Core
机器人的核心类
Attributes
callback[R]
@return [Callback] @api private
client[R]
微信 API 客户端
@return [Client]
config[R]
@return [Configuration]
contact_list[R]
联系人列表
@return [ContactList]
handlers[R]
@return [HandlerList]
logger[RW]
@return [Logger]
profile[R]
当前登录用户信息
@return [Contact]
Public Class Methods
new(&block)
click to toggle source
# File lib/wechat/bot/core.rb, line 50 def initialize(&block) # defaults_logger @logger = Logger.new(STDOUT, self) @config = Configuration.new @handlers = HandlerList.new @callback = Callback.new(self) @client = Client.new(self) @profile = Contact.new(self) @contact_list = ContactList.new(self) instance_eval(&block) if block_given? end
Public Instance Methods
configure() { |config| ... }
click to toggle source
用于设置 WeChat::Bot
的配置 默认无需配置,需要定制化 yield {Core#config} 进行配置
@yieldparam [Struct] config @return [void] 没有返回值
# File lib/wechat/bot/core.rb, line 98 def configure yield @config end
on(event, regexp = //, *args, &block)
click to toggle source
消息触发器
@param [String, Symbol, Integer] event @param [Regexp, Pattern
, String] regexp @param [Array<Object>] args @yieldparam [Array<String>] @return [Handler]
# File lib/wechat/bot/core.rb, line 71 def on(event, regexp = //, *args, &block) event = event.to_s.to_sym pattern = case regexp when Pattern regexp when Regexp Pattern.new(nil, regexp, nil) else if event == :ctcp Pattern.generate(:ctcp, regexp) else Pattern.new(/^/, /#{Regexp.escape(regexp.to_s)}/, /$/) end end handler = Handler.new(self, event, pattern, {args: args, execute_in_callback: true}, &block) @handlers.register(handler) handler end
start()
click to toggle source
运行机器人
@return [void]
# File lib/wechat/bot/core.rb, line 105 def start @client.login @client.contacts @contact_list.each do |c| @logger.debug "Contact: #{c}" end while true break unless @client.logged? || @client.alive? sleep 1 end rescue Interrupt => e message = "你使用 Ctrl + C 终止了运行" @logger.warn(message) @client.send_text(@config.fireman, "[告警] 意外下线\n#{message}\n#{e.backtrace.join("\n")}") if @client.logged? && @client.alive? rescue Exception => e message = e.message @logger.fatal(e) @client.send_text(@config.fireman, "[告警] 意外下线\n#{message}\n#{e.backtrace.join("\n")}") if @client.logged? && @client.alive? ensure @client.logout if @client.logged? && @client.alive? end