Ruby 24/7 рабочий бот XMPP - PullRequest
       28

Ruby 24/7 рабочий бот XMPP

0 голосов
/ 02 декабря 2010

Может ли кто-нибудь помочь мне с этим? Я хотел бы создать бота, который получает слово на одном языке, просматривает базу данных, получает перевод и отправляет его обратно. Насколько я понимаю, это невозможно на общих хостингах, но возможно на собственных серверах или VDS. Так что мне нужно, чтобы мой бот использовал такие библиотеки, как EventMachine и xmpp4r? Если да, то как работать со многими запросами одновременно?

1 Ответ

1 голос
/ 02 декабря 2010

Получить слово, посмотреть в базе данных и отправить ответ обратно очень просто. Ваш бот должен принимать все новые контакты и добавлять их в свой список (список контактов).

Посмотрите этот код. Я написал бота типа "Google Bots", он использует службу перевода Google.

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

Этот бот получает сообщения, переводит их с помощью сервиса Google и отправляет их отправителям.

PS: я использовал файл yaml для настройки.

С уважением,

...