Ban command update, join/leave messages

* The /ban command doesn't require the target user to be online at the
  time of the ban.
* Update the presence messages so they will generally only go to the
  primary (first) public channel, and also to another public channel if
  the user is currently looking at one of the others.
Этот коммит содержится в:
Noah 2023-12-16 15:10:48 -08:00
родитель 264b8f2a46
Коммит f75ad32728
3 изменённых файлов: 19 добавлений и 12 удалений

Просмотреть файл

@ -229,14 +229,11 @@ func (s *Server) BanCommand(words []string, sub *Subscriber) {
log.Info("Operator %s bans %s for %d hours", sub.Username, username, duration/time.Hour) log.Info("Operator %s bans %s for %d hours", sub.Username, username, duration/time.Hour)
other, err := s.GetSubscriber(username) // Add them to the ban list.
if err != nil {
sub.ChatServer("/ban: username not found: %s", username)
} else {
// Ban them.
BanUser(username, duration) BanUser(username, duration)
// Broadcast it to everyone. // If the target user is currently online, disconnect them and broadcast the ban to everybody.
if other, err := s.GetSubscriber(username); err == nil {
s.Broadcast(messages.Message{ s.Broadcast(messages.Message{
Action: messages.ActionPresence, Action: messages.ActionPresence,
Username: username, Username: username,
@ -249,8 +246,9 @@ func (s *Server) BanCommand(words []string, sub *Subscriber) {
}) })
other.authenticated = false other.authenticated = false
other.Username = "" other.Username = ""
sub.ChatServer("%s has been banned from the room for %d hours.", username, duration/time.Hour)
} }
sub.ChatServer("%s has been banned from the room for %d hours.", username, duration/time.Hour)
} }
// UnbanCommand handles the `/unban` operator command. // UnbanCommand handles the `/unban` operator command.

Просмотреть файл

@ -83,7 +83,6 @@ func (s *Server) OnLogin(sub *Subscriber, msg messages.Message) {
sub.SendJSON(messages.Message{ sub.SendJSON(messages.Message{
Action: messages.ActionKick, Action: messages.ActionKick,
}) })
s.DeleteSubscriber(sub)
return return
} }

Просмотреть файл

@ -1277,16 +1277,26 @@ export default {
isJoin = true; isJoin = true;
} }
// Push it to the history of all public channels (depending on user preference). // Push it to the history of the public channels (respecting user preferences).
if ((isJoin && this.prefs.joinMessages) || (isLeave && this.prefs.exitMessages) if ((isJoin && this.prefs.joinMessages) || (isLeave && this.prefs.exitMessages)
|| (!isJoin && !isLeave)) { || (!isJoin && !isLeave)) {
for (let channel of this.config.channels) { // Always put them in the first public channel.
let channel = this.config.channels[0];
this.pushHistory({ this.pushHistory({
channel: channel.ID, channel: channel.ID,
action: msg.action, action: msg.action,
username: msg.username, username: msg.username,
message: msg.message, message: msg.message,
}); });
// If the current user is focused on another public channel, also post it there.
if (!this.isDM && this.channel !== channel.ID) {
this.pushHistory({
channel: this.channel.ID,
action: msg.action,
username: msg.username,
message: msg.message,
});
} }
} }