Foo a écrit 6 commentaires

  • [^] # Re: Hors ~~service~~ sujet

    Posté par  . En réponse au message Système de plugins. Évalué à 0.

    En effet, j'ai cette mauvais habitude, je ferai attention dorénavant.

  • [^] # Re: Pour ma part, je ne passerais pas par des classes mais par des mixin

    Posté par  . En réponse au message Système de plugins. Évalué à 0.

    Je me suis inspiré de ce que tu m'as proposé avec les modules.
    Je sais pas si çà apporte grand chose en fait, j'ai repris le même principe que dans mon premier exemple pour accéder aux méthodes.

    # main.rb
    module IRC
      module BasePlugin
        # chaque classe qui inclut ce module
        # est automatiquement instanciée et stockée
        # dans Bot::plugins.
        def self.included(pl)
          Bot::plugins << pl.new
        end
    
        def exists?(msg)
          # vérifie si une méthode on<EVENT> existe
          # et l'exécute.
          meth = "on" + msg.command
          send(meth, msg) if respond_to?(meth)
        end
      end
    
      class Bot
        Message = Struct.new(:command)
        @@plugins = []
    
        def self.plugins
          @@plugins
        end
    
        def initialize
          Dir["./plugins/*.rb"].each { |pl| require pl }
        end
    
        def run(event)
          msg = Message.new(event)
          @@plugins.each do |pl|
            pl.exists?(msg)
          end
        end
      end
    end
    
    IRC::Bot.new.run("JOIN")
    IRC::Bot.new.run("PART")
    # plugin1.rb
    class Plugin1
      include IRC::BasePlugin
    
      def onJOIN(msg)
        puts msg.command
      end
    end

    En fait j'ai fait quasiment la même chose, au lieu d'hériter d'une classe, j'inclus un module.
    Je pense que je vais utiliser une classe toute simple comme base pour les plugins, çà me parait plus simple.

  • [^] # Re: Pour ma part, je ne passerais pas par des classes mais par des mixin

    Posté par  . En réponse au message Système de plugins. Évalué à 0.

    Je viens de rentrer et de lire tes réponses, je prends le temps de bien comprendre ton code et je réponds plus tard.

    Mais juste pour clarifier ce que je souhaites faire.

    A priori je ne vois pas l'intéret de le faire, mais tu dois avoir tes raisons (et j'aimerais bien savoir histoire de pouvoir te répondre au mieux). Si j'ai bien compris, tu voudrais que lorsque tu reçois un type d'évenement, tous les plugins ayant de type d'evenement défini dans son code soit exécuté (à priori, chaque plugin exécuterait des actions différentes)

    Oui, c'est exactement çà.

    Je te donne un exemple, toujours avec ces événements « JOIN » quand un utilisateur rejoint un salon.
    Il pourrait y avoir une méthode qui envoie un message de bienvenue à l'utilisateur.
    Une autre qui donne les droits d'opérateur sur le salon à cet utilisateur.
    Pourquoi pas une autre qui prévient l'utilisateur parce qu'il utilise son compte root pour faire de l'IRC =/
    ceux sont des exemples mais il y a plein d'autres possibilités plus ou moins utiles rien que sur cet événement « JOIN ».

    Donc faut séparer toutes ces actions dans divers plugins selon ce que l'on veut utiliser comme fonctionnalités,
    je peux pas tout regrouper dans la même méthode.

    Merci beaucoup pour ton aide! à plus tard =)

  • [^] # Re: Pour ma part, je ne passerais pas par des classes mais par des mixin

    Posté par  . En réponse au message Système de plugins. Évalué à 0.

    Désolé mais je vais encore te faire perdre ton temps,
    je comprends pas :p

    Si j'ai un module qui correspond à un type d'événement, comment je fais pour exécuter plusieurs méthodes sur cet événement dans différents plugins? je sais pas si je suis bien clair.

    En gros, je reçois un message de type « JOIN » (joindre un salon).

    # plugin1.rb
    module JOIN
      def self.onJoin
      end
    end
    # plugin2.rb
    module JOIN
      # je définis un autre nom de méthode?
      def self.onJoin
      end
    end
    # main.rb
    class Bot
      def run
        # parsing
        # msg.command == "JOIN"
        # exécuter les méthodes "onJOIN" des plugins.
      end
    end

    Merci en tous les cas.

  • [^] # Re: Cinch

    Posté par  . En réponse au message Système de plugins. Évalué à 0.

    Je vais regarder çà, merci!

  • [^] # Re: Parcourir une liste de plugins

    Posté par  . En réponse au message Système de plugins. Évalué à 0.

    Merci, çà m'aide beaucoup.
    çà me plaît bien le traitement en sens inverse pour filtrer les messages entrants et sortants et du coup il faudrait un ordre de priorité pour charger les plugins/les parcourir.