【问题标题】:Ruby 24/7 working XMPP botRuby 24/7 工作 XMPP 机器人
【发布时间】:2011-05-19 02:09:04
【问题描述】:

有人可以帮我解决这个问题吗? 我想创建一个机器人,它接收一种语言的单词,查看数据库,获取翻译并将其发送回。我如何理解这在共享主机上是不可能的,但在自己的服务器或 VDS 上是可能的。那么我是否需要使用 EventMachine 和 xmpp4r 之类的库来制作我的机器人?如果是,如何一次处理多个请求?

【问题讨论】:

    标签: ruby xmpp eventmachine event-driven xmpp4r


    【解决方案1】:

    接收一个词,在数据库中查找并发送回响应非常简单。 您的机器人应该接受每个新联系人并将其添加到其名册(联系人列表)中。

    看看这段代码。我写了一个像“Google Bots”这样的机器人,它使用谷歌翻译服务。

    require 'rubygems'  
    require 'xmpp4r-simple'
    require 'yaml'
    
    class MonBotTraducteur
    
     def initialize( from='fr', to='en' )
      @url  = 'http://ajax.googleapis.com/ajax/services/language/translate' 
      @from = from
      @to   = to
     end
     # 
     def connect  
      config= YAML::load( File.read( 'config/settings.yaml' ) )
      @client = Jabber::Simple.new( config['settings']['jabber']['jid'], 
              config['settings']['jabber']['password'] )
      @client
     end
     # Translate the received message
     def translate( text="" ) 
       params = {
         :langpair => "#{@from}|#{@to}", 
         :q => text,
         :v => 1.0  
       } 
       query = params.map{ |k,v| "#{k}=#{CGI.escape(v.to_s)}" }.join('&')
       reponse = Net::HTTP.get_response( URI.parse( "#{@url}?#{query}" ) )    
       repondre( reponse )
     end
     # Start the bot activity
     def demarrer
      while true
         .received_messages do |msg|
        translated_text = translate( msg.body )
        @client.deliver( msg.from.to_s, translated_text.to_s )  
          end   
         sleep 1
      end
     end
    
     private
     # A method to send back the response
     def repondre( reponse )
      json = JSON.parse( reponse.body )
      if json['responseStatus'] == 200
          json['responseData']['translatedText']
      else
       raise(StandardError, response['responseDetails'])
      end
     end 
    end
    
    bot = MonBotTraducteur.new
    bot.connect
    bot.demarrer
    

    这个机器人接收消息,使用谷歌服务翻译它们并将它们发送回发件人。

    PS : 我使用 yaml 文件进行设置。

    最好的问候,

    【讨论】:

    • 使用这种方法的内存和CPU怎么样?那么一次发送多条消息呢?
    • 这应该放在另一个问题中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-08
    • 2011-08-22
    • 1970-01-01
    • 1970-01-01
    • 2016-12-15
    • 1970-01-01
    • 2023-04-01
    相关资源
    最近更新 更多