From 194411716dad6a29da7b30f3c7000cae833531d9 Mon Sep 17 00:00:00 2001 From: Daniel Oaks Date: Fri, 24 Mar 2017 13:44:54 +1000 Subject: [PATCH] channel: Automagically save topic updates on registered channels --- irc/channel.go | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/irc/channel.go b/irc/channel.go index 56f5942b..8ed0ec21 100644 --- a/irc/channel.go +++ b/irc/channel.go @@ -374,12 +374,30 @@ func (channel *Channel) SetTopic(client *Client, topic string) { } channel.topic = topic - channel.topicSetBy = client.nick + channel.topicSetBy = client.nickMaskString channel.topicSetTime = time.Now() for member := range channel.members { member.Send(nil, client.nickMaskString, "TOPIC", channel.name, channel.topic) } + + // update saved channel topic for registered chans + client.server.registeredChannelsMutex.Lock() + defer client.server.registeredChannelsMutex.Unlock() + + client.server.store.Update(func(tx *buntdb.Tx) error { + chanInfo := client.server.loadChannelNoMutex(tx, channel.nameCasefolded) + + if chanInfo == nil { + return nil + } + + chanInfo.Topic = topic + chanInfo.TopicSetBy = client.nickMaskString + chanInfo.TopicSetTime = time.Now() + client.server.saveChannelNoMutex(tx, channel.nameCasefolded, *chanInfo) + return nil + }) } func (channel *Channel) CanSpeak(client *Client) bool {