We’ve all seen the “<operator> operator kicked user because: reason” in NMDC hubs. One can of course also trigger it without being operator but that isn’t what today’s post is about.
The above text is purely that; Text. It isn’t a command in NMDC to tell the hub to get rid of someone. Instead, there is $Kick. DC++ just send $Kick user|and the kick message above… As the wikipage say, the command is sent to the hub and the hub in turn removes the user.
All this is rather basic and easy to understand. Don’t like a user in a protocol? Invent a command to get rid of them.
As things progressed over the years, ADC came and the command DSC was invented. DSC does the same thing as $Kick, besides giving some more info in one command, and that is notifying the hub that it should remove a user. And oh, DSC is also used to redirect people.
Meanwhile, an extension to ADC, User command was thought out. The extension is basically what we see today; The hub send some hub-specific commands that (basically) end up as a right-click command. (You of course have to have “Accept custom user commands from hub” enabled.)
At this point, you may wonder what DSC and user commands have to do with each other, and begin to remiss that 0.698 feature a change; that DSC has been removed.
Yes, the changelog for DC++ is not lying. DSC has been removed, though the ADC draft hasn’t been updated (yet). ‘Why?’ you might wonder. Well, it has to do with an assumption (though it will in most cases be true, it won’t always). In essence, ADC hubs and clients are assumed to support user commands, where the actual “kick/redirect feature” will exist.
This has several befinits; Hubs are in control over who have the kick/redirect feature (built in otherwise in DC++ if you’re an operator [NMDC atleast]), hubs are also in control over where the user can see the kick/redirect feature, clients doesn’t need to specifically add the kick/redirect feature (less code, less bugs, less clutter) and more importantly; Client and hub developers need to pay less attention to writing a basic hub. The lack of DSC ’significally’ decreases code (mostly for hub developers, but still).
However, this of course have several downsides; Hub developers have to make an agreement on how the kick/redirect text is supposed to look like (otherwise, users would probably be confused if they see 15 different ways of kicking in 15 hubs) and it increases the level of difficulty if one want a basic hub with also kicking/redirecting capabilities (of course, one can just do the “+kick” approach). (Don’t be afraid, though, since we can always resurrect DSC.)