2016-09-20 4 views
0

In einem chatbot, gibt es eine Funktion für den Bot mit einem Satz zu bestimmtem Befehl zu beantworten, zum Beispiel inZufällige Meldung in Ruby?

match /^Loggy, te amo/, :use_prefix => false 

    def execute(user) 
    if user.name.eql? 'Cquintero6' 
     @client.send_msg '/me besa a Carlos' 
     @client.send_msg 'Io también te jamón <3' 
    else 
     @client.send_msg "#{user.name}, ¿En serio crees que amaria a una basurilla como tú? Sáquese. " 
    end 
    end 

Als ich "Loggy, te amo", das Bot Antworten im Chat schreiben, je auf den Benutzer. Die Frage ist, wie kann ich eine Liste von Antworten erstellen, so dass der Bot eine zufällige Antwort auswählt? Vielen Dank! (Random Strings "@ Client.send_msg")

+0

fragen Sie, wie einen Array von Strings zu schreiben und wählen und gelegentlichen? Oder fragst du, wo es eine Liste von "zufälligen Phrasen" gibt, die du benutzen kannst? –

+0

Wie schreibt man ein Array von Strings und so wählt der Bot einen aus! Yep –

+0

fügte meiner Antwort ein Beispiel von ERB hinzu –

Antwort

0

ein Array Constructing ist einfach:

phrases = [ 
    "a phrase", 
    "another phrase" 
] 

Sie können auch verwenden, um die faker gem. Siehe seine README für Optionen, aber hier ist ein Beispiel:

phrases = 10.times.map { Faker::Company.catch_phrase } 

An diesem Punkt müssen Sie nur einen zufälligen Eintrag auswählen, die einfach ist:

random_phrase = phrases.sample 
@client.send_msg random_phrase 

Sagen Sie bitte auch eine zufällige Phrase erhalten wollten Ändern Sie den Text jedoch gemäß einer Laufzeitvariablen. Hier ist eine Möglichkeit, es zu tun:

require 'erb' 
phrases = [ 
    "your name is <%= name %>" 
] 
name = user.name 
random_phrase = ERB.new(phrases.sample).result(binding) 
@client.send_msg random_phrase 

Dies kompiliert die ERB Zeichenfolge zur Laufzeit

+0

Äußerst kleiner Nitpick, aber wenn Sie eine Reihe von 10 Faker-Sätzen wollen, warum sollten Sie '10.x.map {etc}' anstelle von 'Array.new (10) verwenden. {etc} '? Abhängig von der Komplexität Ihrer Arbeit ist die Verwendung von 'String #%' etwas einfacher als Erb: 'phrases = [" Ihr Name ist% {name} ", ...]; random_phrase = phrases.sample% {name: user.name} ' – philomory

+0

Danke, dass Sie diesen String-Interpolationsansatz gezeigt haben. Es spielt keine Rolle, aber ich denke '10.x.map {}' ist besser lesbar (d. H. Duck-typing, expression intention) –