2010-12-02 53 views
0

Quelqu'un pourrait-il m'aider avec cela? Je voudrais créer un bot qui reçoit le mot dans une langue, regarde dans la base de données, obtient la traduction et le renvoie. Comment je comprends que ce n'est pas possible sur les hébergements partagés, mais possible sur les propres serveurs ou VDS. Donc dois-je faire mon bot en utilisant des libs comme EventMachine et xmpp4r? Si oui comment travailler avec beaucoup de demandes en même temps?Ruby 24/7 XMPP bot de travail

Répondre

1

La réception d'un mot, la recherche dans la base de données et l'envoi de la réponse sont très simples. Votre bot doit accepter tous les nouveaux contacts et les ajouter à sa liste (liste de contacts).

Regardez ce code. J'ai écrit un bot comme "Google Bots" il utilise le service de traduction 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 

Ce bot reçoit des messages, les traduit en utilisant google service et les renvoie aux expéditeurs. PS: J'ai utilisé un fichier yaml pour le réglage. Meilleures salutations,

+0

Qu'en est-il de la mémoire et du processeur utilisant cette méthode? Et qu'en est-il de nombreux messages en même temps? – user633230

+0

Cela devrait aller dans une autre question. – kikito