2010-12-09 29 views
0

J'ai un bot dans node.js et je me demande quelle logique je devrais utiliser pour une fonction .tell. Le but de la fonction sera de donner un message aux utilisateurs qui sont hors ligne. Donc, si john était hors ligne sur freenode.net/#foo et j'ai tapé .tell john your mother was great last night, je veux que le bot stocke ce message et l'affiche chaque fois que john rejoint le canal.Ma logique pour une fonction .tell (notification) sur mon son bot IRC?

Si john est déjà dans le canal, je veux que le bot affiche immédiatement le message.

J'utilise déjà mongodb comme base de données pour stocker des informations, donc je peux probablement y stocker tous mes messages. Voici la logique que j'avais à l'esprit à ce jour:

1. Après l'utilisateur A types .tell john your mother was great, un auditeur pick-up le modèle /\.tell ([\w-]+) (.*)/ et stocker une variable pour le message (var msg, l'utilisateur qui a posté le message (var from) et le nom de l'utilisateur à messaged (var to) Je vais aussi avoir une variable globale qui signifie le nom du canal et réseau du serveur

2. Je vais stocker une ligne dans MongoDB tels que..:

to from message     network  channel  delivered time 
-------------------------------------------------------------------------------- 
john meder your mother was great freenode.net #foobar  0   (TS) 
      last night 

3. Installation d'un écouteur pour quiconque se joindre à un canal depuis le bot peut vivre dans des canaux multiples sous un réseau et détecter s'il des messages qui ne sont pas remis et s'il y a, tentative de faire correspondre les to et network et channel aux messages stockés, et si des lignes sont trouvées, affichez-les.

Cela sonne bien, mais quelqu'un peut-il l'examiner et peut-être offrir des conseils? Je serai obligé d'avoir un auditeur à l'écoute de toute personne entrant dans une chaîne, non? Il n'y a pas d'alternative à cela?

+0

En fait, au lieu de 'offline' Je veux dire dans le canal. Ils doivent être dans le canal. –

Répondre

1

Cela semble très bien. Je ne vois pas comment vous ne pourriez pas avoir d'auditeur. Une chose que j'ajouterais est peut-être un hachage dans le bot pour garder la trace de qui a des messages en attente. De cette façon, vous ne serez pas interroger MongoDB chaque fois que quelqu'un rejoint un canal.

I.e.

messages = {}; 
messages['freenode.net'] = {}; 
messages['freenode.net']['john'] = 1; 

est peut-être exagéré, mais si votre surveillance d'un canal qui a beaucoup JOIN, vous pourriez vous retrouver interroger MongoDB beaucoup.

Mes deux cents.

  • Christian