1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-25 17:37:37 +00:00

IRCClient: Add is_channel_prefix to check if string is a channel name

This commit is contained in:
Brendan Coles 2020-04-02 13:55:10 +00:00 committed by Andreas Kling
parent 57f72f2982
commit 6bf47252dc
2 changed files with 21 additions and 6 deletions

View file

@ -388,7 +388,7 @@ void IRCClient::handle_user_input_in_server(const String& input)
return handle_user_command(input); return handle_user_command(input);
} }
bool IRCClient::is_nick_prefix(char ch) const bool IRCClient::is_nick_prefix(char ch)
{ {
switch (ch) { switch (ch) {
case '@': case '@':
@ -401,6 +401,18 @@ bool IRCClient::is_nick_prefix(char ch) const
return false; return false;
} }
bool IRCClient::is_channel_prefix(char ch)
{
switch (ch) {
case '&':
case '#':
case '+':
case '!':
return true;
}
return false;
}
static bool has_ctcp_payload(const StringView& string) static bool has_ctcp_payload(const StringView& string)
{ {
return string.length() >= 2 && string[0] == 0x01 && string[string.length() - 1] == 0x01; return string.length() >= 2 && string[0] == 0x01 && string[string.length() - 1] == 0x01;
@ -742,9 +754,10 @@ void IRCClient::handle_user_command(const String& input)
if (command == "/TOPIC") { if (command == "/TOPIC") {
if (parts.size() < 2) if (parts.size() < 2)
return; return;
if (parts[1].is_empty())
return;
// FIXME: channel name validation should be abstracted away into a validation function if (is_channel_prefix(parts[1][0])) {
if (parts[1].starts_with("&") || parts[1].starts_with("#") || parts[1].starts_with("+") || parts[1].starts_with("!")) {
if (parts.size() < 3) if (parts.size() < 3)
return; return;
auto channel = parts[1]; auto channel = parts[1];
@ -763,9 +776,10 @@ void IRCClient::handle_user_command(const String& input)
if (command == "/KICK") { if (command == "/KICK") {
if (parts.size() < 2) if (parts.size() < 2)
return; return;
if (parts[1].is_empty())
return;
// FIXME: channel name validation should be abstracted away into a validation function if (is_channel_prefix(parts[1][0])) {
if (parts[1].starts_with("&") || parts[1].starts_with("#") || parts[1].starts_with("+") || parts[1].starts_with("!")) {
if (parts.size() < 3) if (parts.size() < 3)
return; return;
auto channel = parts[1]; auto channel = parts[1];

View file

@ -60,7 +60,8 @@ public:
void part_channel(const String&); void part_channel(const String&);
void change_nick(const String&); void change_nick(const String&);
bool is_nick_prefix(char) const; static bool is_nick_prefix(char);
static bool is_channel_prefix(char);
IRCWindow* current_window() { return aid_get_active_window(); } IRCWindow* current_window() { return aid_get_active_window(); }
const IRCWindow* current_window() const { return aid_get_active_window(); } const IRCWindow* current_window() const { return aid_get_active_window(); }