mirror of https://github.com/znc/znc
Mirror of the official znc repository
https://znc.in
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
115 lines
4.3 KiB
115 lines
4.3 KiB
/* |
|
* Copyright (C) 2004-2022 ZNC, see the NOTICE file for details. |
|
* |
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
|
* you may not use this file except in compliance with the License. |
|
* You may obtain a copy of the License at |
|
* |
|
* http://www.apache.org/licenses/LICENSE-2.0 |
|
* |
|
* Unless required by applicable law or agreed to in writing, software |
|
* distributed under the License is distributed on an "AS IS" BASIS, |
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|
* See the License for the specific language governing permissions and |
|
* limitations under the License. |
|
*/ |
|
|
|
#include <znc/Chan.h> |
|
#include <znc/IRCNetwork.h> |
|
|
|
using std::vector; |
|
|
|
class CBuffExtras : public CModule { |
|
public: |
|
MODCONSTRUCTOR(CBuffExtras) {} |
|
|
|
~CBuffExtras() override {} |
|
|
|
void AddBuffer(CChan& Channel, const CString& sMessage, |
|
const timeval* tv = nullptr, |
|
const MCString& mssTags = MCString::EmptyMap) { |
|
// If they have AutoClearChanBuffer enabled, only add messages if no |
|
// client is connected |
|
if (Channel.AutoClearChanBuffer() && GetNetwork()->IsUserOnline()) |
|
return; |
|
|
|
Channel.AddBuffer(":" + GetModNick() + "!" + GetModName() + |
|
"@znc.in PRIVMSG " + |
|
_NAMEDFMT(Channel.GetName()) + " :{text}", |
|
sMessage, tv, mssTags); |
|
} |
|
|
|
void OnRawMode2(const CNick* pOpNick, CChan& Channel, const CString& sModes, |
|
const CString& sArgs) override { |
|
const CString sNickMask = |
|
pOpNick ? pOpNick->GetNickMask() : t_s("Server"); |
|
AddBuffer(Channel, |
|
t_f("{1} set mode: {2} {3}")(sNickMask, sModes, sArgs)); |
|
} |
|
|
|
void OnKickMessage(CKickMessage& Message) override { |
|
const CNick& OpNick = Message.GetNick(); |
|
const CString sKickedNick = Message.GetKickedNick(); |
|
CChan& Channel = *Message.GetChan(); |
|
const CString sMessage = Message.GetReason(); |
|
AddBuffer(Channel, t_f("{1} kicked {2} with reason: {3}")( |
|
OpNick.GetNickMask(), sKickedNick, sMessage), |
|
&Message.GetTime(), Message.GetTags()); |
|
} |
|
|
|
void OnQuitMessage(CQuitMessage& Message, |
|
const vector<CChan*>& vChans) override { |
|
const CNick& Nick = Message.GetNick(); |
|
const CString sMessage = Message.GetReason(); |
|
const CString sMsg = t_f("{1} quit: {2}")(Nick.GetNickMask(), sMessage); |
|
for (CChan* pChan : vChans) { |
|
AddBuffer(*pChan, sMsg, &Message.GetTime(), Message.GetTags()); |
|
} |
|
} |
|
|
|
void OnJoinMessage(CJoinMessage& Message) override { |
|
const CNick& Nick = Message.GetNick(); |
|
CChan& Channel = *Message.GetChan(); |
|
AddBuffer(Channel, t_f("{1} joined")(Nick.GetNickMask(), " joined"), |
|
&Message.GetTime(), Message.GetTags()); |
|
} |
|
|
|
void OnPartMessage(CPartMessage& Message) override { |
|
const CNick& Nick = Message.GetNick(); |
|
CChan& Channel = *Message.GetChan(); |
|
const CString sMessage = Message.GetReason(); |
|
AddBuffer(Channel, t_f("{1} parted: {2}")(Nick.GetNickMask(), sMessage), |
|
&Message.GetTime(), Message.GetTags()); |
|
} |
|
|
|
void OnNickMessage(CNickMessage& Message, |
|
const vector<CChan*>& vChans) override { |
|
const CNick& OldNick = Message.GetNick(); |
|
const CString sNewNick = Message.GetNewNick(); |
|
const CString sMsg = |
|
t_f("{1} is now known as {2}")(OldNick.GetNickMask(), sNewNick); |
|
for (CChan* pChan : vChans) { |
|
AddBuffer(*pChan, sMsg, &Message.GetTime(), Message.GetTags()); |
|
} |
|
} |
|
|
|
EModRet OnTopicMessage(CTopicMessage& Message) override { |
|
const CNick& Nick = Message.GetNick(); |
|
CChan& Channel = *Message.GetChan(); |
|
const CString sTopic = Message.GetTopic(); |
|
AddBuffer(Channel, t_f("{1} changed the topic to: {2}")( |
|
Nick.GetNickMask(), sTopic), |
|
&Message.GetTime(), Message.GetTags()); |
|
|
|
return CONTINUE; |
|
} |
|
}; |
|
|
|
template <> |
|
void TModInfo<CBuffExtras>(CModInfo& Info) { |
|
Info.SetWikiPage("buffextras"); |
|
Info.AddType(CModInfo::NetworkModule); |
|
} |
|
|
|
USERMODULEDEFS(CBuffExtras, |
|
t_s("Adds joins, parts etc. to the playback buffer"))
|
|
|