User:Crazycomputers/WatchlistBot 2

From Wikipedia, the free encyclopedia
Jump to navigation Jump to search

This page documents the progress towards the next major version of WatchlistBot. This version is a complete rewrite and has several new features.


Runs on Node[edit]

I've decided to write this version in JavaScript, using Node as the runtime. I find JavaScript much easier to work than C# these days, and npm is a much more vibrant ecosystem than NuGet. Very little of the existing code would be useful anyway, as nearly all aspects of the bot's architecture are changing.

New features[edit]

  • One user can have multiple delivery targets for their watchlist, allowing them to be notified on multiple messaging/notification services.
  • Group targets (chat rooms) are supported, allowing multi-user management of the watchlist.
  • A durable delivery queue with retries; failed delivery attempts will be retried later.
    • This also means that, when delivery to an offline user is not possible, the notification will be held until the user is available.
    • Users will be able to set how long undelivered notifications will remain in the queue. This allows the user to avoid being flooded with old notifications when they sign in. (Regardless of this setting, there will be a hard cap on the number of notifications that will be queued. When this is exceeded, old notifications will be discarded.)
  • Detection of dead accounts with automatic deactivation.

Service-oriented architecture changes[edit]

Much like the original, the new bot uses a service-oriented architecture. However, the core service registry has been reworked to remove some unused features, as well as provide several new features:

  • Service dependencies, with automatic injection.
  • Lazy service instantiation.
  • Service aliases.
  • Virtual services (provided by other services).


The new code refers to the backend services (such as XMPP or IRC) as "channels" (not to be confused with IRC channels, for example). A channel is just a mechanism by which notifications are delivered. A "target" is a combination of a channel (which service the message should be delivered to) and a descriptor (which user/room should receive the message).

The following channels will be supported:

  • Discord: Has built-in support for both users and rooms, as well as mobile support and desktop/mobile notifications.

The following channels may be supported, but this is not decided yet:

  • XMPP: This was the only channel supported by the original. Interest in XMPP appears to be mostly gone at this point, though I do not want to abandon my users who are still using it. This channel will only support users (not rooms) due to the complexity of XMPP's "conference" protocol.
  • API/Webhook: There may be a mechanism for automated manipulation of watchlists as well as notification delivery via HTTP.

The following channels will likely not be supported:

  • IRC: There's too many IRC servers, and IRC has no inherent concept of authentication. Supporting this channel would be a technical challenge as I'd have to support only servers that have authentication, or I'd have to create an authentication mechanism within the bot itself, specifically for IRC.
  • Pushbullet: Similar to Discord, this provider supports mobile devices and has both desktop and mobile notifications. Unfortunately requires a paid account to send more than 500 notifications in a month.

I am open to suggestions for other channels.


  • Service registry.  Done
  • Change source service: Observes changes on Wikimedia projects, makes a stream of changes available to other services.  Done
  • Project authority service: Provides a master list of Wikimedia projects.  Done
  • Logging service.  Done
  • Database service. clock In progress
  • Discord channel service. clock In progress
  • Command processor service. clock In progress
  • Change processor service. Not done
  • Notification delivery service.  Done