mirror of
https://github.com/IllusionMan1212/gorc.git
synced 2026-10-24 02:12:33 +00:00
feat: handle KICK command/reply
This commit is contained in:
@@ -202,6 +202,52 @@ func handleNick(msg irc.Message, client *irc.Client) {
|
|||||||
client.Tea.Send(cmds.UpdateNicks())
|
client.Tea.Send(cmds.UpdateNicks())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func handleKick(msg irc.Message, client *irc.Client) {
|
||||||
|
channel := msg.Parameters[0]
|
||||||
|
nicks := strings.Split(msg.Parameters[1], ",")
|
||||||
|
|
||||||
|
// Reason is optional
|
||||||
|
reason := ""
|
||||||
|
|
||||||
|
if len(msg.Parameters) > 2 {
|
||||||
|
reason = msg.Parameters[2]
|
||||||
|
}
|
||||||
|
|
||||||
|
msgOpts := irc.MsgFmtOpts{
|
||||||
|
WithTimestamp: true,
|
||||||
|
AsServerMsg: true,
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, nick := range nicks {
|
||||||
|
kicker := strings.SplitN(msg.Source, "!", 2)[0]
|
||||||
|
message := fmt.Sprintf("%v kicked %v from %v (%v)", kicker, nick, channel, reason)
|
||||||
|
|
||||||
|
for i, c := range client.Channels {
|
||||||
|
if c.Name == channel {
|
||||||
|
if nick == client.Nickname {
|
||||||
|
client.Channels = slices.Delete(client.Channels, i, i+1)
|
||||||
|
|
||||||
|
if client.ActiveChannelIndex >= i {
|
||||||
|
client.ActiveChannelIndex--
|
||||||
|
client.ActiveChannel = client.Channels[client.ActiveChannelIndex].Name
|
||||||
|
}
|
||||||
|
client.LastTabIndexInTabBar--
|
||||||
|
|
||||||
|
message = fmt.Sprintf("You were kicked by %v from %v (%v)", kicker, channel, reason)
|
||||||
|
client.Channels[0].AppendMsg(msg.Timestamp, message, msgOpts)
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
delete(client.Channels[i].Users, nick)
|
||||||
|
|
||||||
|
client.Channels[i].AppendMsg(msg.Timestamp, message, msgOpts)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
client.Tea.Send(cmds.SwitchChannels())
|
||||||
|
}
|
||||||
|
|
||||||
func handleQuit(msg irc.Message, client *irc.Client) {
|
func handleQuit(msg irc.Message, client *irc.Client) {
|
||||||
nick := strings.SplitN(msg.Source, "!", 2)[0]
|
nick := strings.SplitN(msg.Source, "!", 2)[0]
|
||||||
reason := msg.Parameters[0]
|
reason := msg.Parameters[0]
|
||||||
@@ -964,6 +1010,8 @@ func HandleCommand(msg irc.Message, client *irc.Client) {
|
|||||||
handleJoin(msg, client)
|
handleJoin(msg, client)
|
||||||
case commands.NICK:
|
case commands.NICK:
|
||||||
handleNick(msg, client)
|
handleNick(msg, client)
|
||||||
|
case commands.KICK:
|
||||||
|
handleKick(msg, client)
|
||||||
case commands.QUIT:
|
case commands.QUIT:
|
||||||
handleQuit(msg, client)
|
handleQuit(msg, client)
|
||||||
case commands.PART:
|
case commands.PART:
|
||||||
|
|||||||
Reference in New Issue
Block a user