feat: allow timeout-related commands to be used in multiple channels (#5402)

This changes the behaviour of the following commands:
 - `/ban`
 - `/timeout`
 - `/untimeout`
 - `/unban`

All of those commands now accept one or more `--channel` parameters to override which channel the action should take place in.
The `--channel` parameter accepts a channel ID or channel name with the same syntax as the other "user targets" do (e.g. `id:11148817` or `pajlada`)

examples
Ban user in the chat you're typing in:  
`/ban weeb123`

Ban user in the chat you're typing in, with a reason specified:  
`/ban weeb123 the ban reason`

Ban user in a separate chat, with a reason specified:  
`/ban --channel pajlada weeb123 the ban reason`

Ban user in two separate chats, with a reason specified:  
`/ban --channel pajlada --channel id:117166826 weeb123 the ban reason`


Timeout user in the chat you're typing in:  
`/timeout weeb123`

Timeout user in the chat you're typing in, with a reason specified:  
`/timeout weeb123 10m the timeout reason`

Timeout user in a separate chat, with a reason specified:  
`/timeout --channel pajlada weeb123 10m the timeout reason`

Timeout user in two separate chats, with a reason specified:  
`/timeout --channel pajlada --channel id:117166826 weeb123 10m the timeout reason`


Unban user in the chat you're typing in:  
`/unban weeb123`

Unban user in a separate chat:  
`/unban --channel pajlada weeb123`

Unban user in two separate chats:  
`/unban --channel pajlada --channel id:117166826 weeb123`
This commit is contained in:
pajlada
2024-06-16 12:22:51 +02:00
committed by GitHub
parent 86871eec5a
commit 9b31246502
23 changed files with 1732 additions and 174 deletions
+6 -1
View File
@@ -19,6 +19,11 @@ public:
virtual ~EmptyApplication() = default;
bool isTest() const override
{
return true;
}
const Paths &getPaths() override
{
return this->paths_;
@@ -137,7 +142,7 @@ public:
return nullptr;
}
Logging *getChatLogger() override
ILogging *getChatLogger() override
{
assert(!"getChatLogger was called without being initialized");
return nullptr;
+32
View File
@@ -0,0 +1,32 @@
#pragma once
#include "providers/links/LinkResolver.hpp"
#include <gmock/gmock.h>
#include <QString>
#include <QStringList>
namespace chatterino::mock {
class LinkResolver : public ILinkResolver
{
public:
LinkResolver() = default;
~LinkResolver() override = default;
MOCK_METHOD(void, resolve, (LinkInfo * info), (override));
};
class EmptyLinkResolver : public ILinkResolver
{
public:
EmptyLinkResolver() = default;
~EmptyLinkResolver() override = default;
void resolve(LinkInfo *info) override
{
//
}
};
} // namespace chatterino::mock
+36
View File
@@ -0,0 +1,36 @@
#pragma once
#include "singletons/Logging.hpp"
#include <gmock/gmock.h>
#include <QString>
#include <QStringList>
namespace chatterino::mock {
class Logging : public ILogging
{
public:
Logging() = default;
~Logging() override = default;
MOCK_METHOD(void, addMessage,
(const QString &channelName, MessagePtr message,
const QString &platformName),
(override));
};
class EmptyLogging : public ILogging
{
public:
EmptyLogging() = default;
~EmptyLogging() override = default;
void addMessage(const QString &channelName, MessagePtr message,
const QString &platformName) override
{
//
}
};
} // namespace chatterino::mock