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.rbmoduleIRCmoduleBasePlugin# chaque classe qui inclut ce module# est automatiquement instanciée et stockée# dans Bot::plugins.defself.included(pl)Bot::plugins<<pl.newenddefexists?(msg)# vérifie si une méthode on<EVENT> existe# et l'exécute.meth="on"+msg.commandsend(meth,msg)ifrespond_to?(meth)endendclassBotMessage=Struct.new(:command)@@plugins=[]defself.plugins@@pluginsenddefinitializeDir["./plugins/*.rb"].each{|pl|requirepl}enddefrun(event)msg=Message.new(event)@@plugins.eachdo|pl|pl.exists?(msg)endendendendIRC::Bot.new.run("JOIN")IRC::Bot.new.run("PART")
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.
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.
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.rbmoduleJOINdefself.onJoinendend
# plugin2.rbmoduleJOIN# je définis un autre nom de méthode?defself.onJoinendend
# main.rbclassBotdefrun# parsing# msg.command == "JOIN"# exécuter les méthodes "onJOIN" des plugins.endend
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.
[^] # Re: Hors ~~service~~ sujet
Posté par Foo . 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 Foo . 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.
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 Foo . 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.
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 Foo . 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).
Merci en tous les cas.
[^] # Re: Cinch
Posté par Foo . En réponse au message Système de plugins. Évalué à 0.
Je vais regarder çà, merci!
[^] # Re: Parcourir une liste de plugins
Posté par Foo . 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.