URL: https://linuxfr.org/forums/programmation-ruby/posts/systeme-de-plugins Title: Système de plugins Authors: Foo Date: 2013年08月17日T13:57:49+02:00 License: CC By-SA Tags: Score: 0 Bonjour à tous, Je m'amuse à faire un bot IRC (pas très original, je sais). Le but c'est de le faire le plus simple possible et pouvoir lui ajouter des fonctionnalités avec des scripts/plugins. Je sais pas trop comment faire le lien entre le bot et ses plugins Je dois pouvoir faire 2 choses: 1. associer des méthodes à un événement (type du message provenant du serveur) 2. ajouter des commandes pour contrôler le bot. J'ai cherché mais pas trouvé grand chose, pour le moment je fais çà: ```ruby class Plugin @@registered = [] def self.registered @@registered end def self.inherited(subclass) @@registered << subclass.new end end class Test < Plugin # répond au ping def onPing(bot, msg) bot.pong(msg.params[0]) end # Exemple d'une commande # là je pense qu'il faudrait que j'utilise OptionParser # ou un module équivalent pour pouvoir executer des # commandes avec paramètres plus facilement. def doHelp(bot, msg) if msg.params.last =~ /^!help (\S+)/ ... end end end class Bot def run # lit sur la socket # parse les données reçues msg = Message.parse(data) event = "on#{msg.command.capitalize}" Plugin.registered.each do |pl| # parcours toutes les instances de Plugin # et vérifie si une méthode on existe if pl.respond_to?(event) pl.send(event, self, msg) end end if msg.command == "PRIVMSG" # message reçu sur un channel ou en privé # vérifier si c'est une commande du bot # préfixée par un '!' ou adressée directement au bot. ... end end end ``` ou bien, juste utiliser un hash avec comme clé le type d'événement et comme valeur, la méthode associée. mais un événement peut avoir plusieurs méthodes à appeler. puis certaines prendront plus de temps que d'autres et devront être exécutées dans un thread ? bref je suis un peu paumé, si vous avez quelques conseils, liens qui pourraient m'aider pour faire çà proprement.

AltStyle によって変換されたページ (->オリジナル) /