Added new command /ctcpreply and fixed the reply print if message part is empty.

master
Tomatix 5 years ago
parent b7f99beaed
commit 521a4a7f7c
  1. 1
      ICommand/CMakeLists.txt
  2. 1
      ICommand/Commands.h
  3. 10
      ICommand/ICommand.cpp
  4. 1
      ICommand/ICommandPriv.h
  5. 14
      ICommand/Internal/ctcpreply.cpp
  6. 9
      IdealIRC/IRC.cpp

@ -12,6 +12,7 @@ list(APPEND ${component}_SOURCES
list(APPEND ${component}_SOURCES_Internal
${CMAKE_CURRENT_SOURCE_DIR}/Internal/ctcp.cpp
${CMAKE_CURRENT_SOURCE_DIR}/Internal/ctcpreply.cpp
${CMAKE_CURRENT_SOURCE_DIR}/Internal/me.cpp
${CMAKE_CURRENT_SOURCE_DIR}/Internal/echo.cpp
)

@ -23,6 +23,7 @@
namespace Command::Internal {
constexpr auto* ACTION = "ACTION";
constexpr auto* CTCP = "CTCP";
constexpr auto* CTCPREPLY = "CTCPREPLY";
constexpr auto* ME = "ME";
constexpr auto* ECHO = "ECHO";
constexpr auto* QUERY = "QUERY";

@ -464,14 +464,18 @@ bool ICommand::tryParseInternal(QString cmdLine)
using namespace Command::Internal;
using namespace Command::IRC;
if (command == CTCP) {
if (command == CTCP || command == CTCPREPLY) {
CommandData argv(cmdLine, { &ICommand::prd_AnyWord, &ICommand::prd_AnyWordToUpper, &ICommand::prd_Message });
if (!connection.isOnline())
print_notConnectedToServer(command);
else if (!argv[0] || !argv[1])
print_notEnoughParameters(command);
else
mp->cmd_ctcp(*argv[0], *argv[1], argv[2].value_or(""));
else {
if (command == CTCP)
mp->cmd_ctcp(*argv[0], *argv[1], argv[2].value_or(""));
else
mp->cmd_ctcpreply(*argv[0], *argv[1], argv[2].value_or(""));
}
return true;
}

@ -23,6 +23,7 @@ struct ICommandPriv
void cmd_notice(const std::string& target, const std::string& message);
void cmd_ctcp(const std::string& target, const std::string& command, const std::string& message);
void cmd_ctcpreply(const std::string& target, const std::string& command, const std::string& message);
void cmd_me(const std::string& target, const std::string& message);
void cmd_echo(const std::string& arg1, const std::string& arg2, const std::string& text);
};

@ -0,0 +1,14 @@
#include "ICommand/ICommandPriv.h"
void ICommandPriv::cmd_ctcpreply(const std::string& target, const std::string& command, const std::string& message)
{
QString qmsg = QString::fromStdString(command);
if (!message.empty())
qmsg += " " + QString::fromStdString(message);
status.printToActive(PrintType::CTCP, QStringLiteral("Sending [CTCP REPLY %1] to %2")
.arg(qmsg)
.arg(target.c_str()));
connection.ctcpResponse(target, command, message);
}

@ -773,9 +773,14 @@ void IRC::onMsgCTCPRequest(const IRCPrefix& sender, const std::string& target, c
void IRC::onMsgCTCPResponse(const IRCPrefix& sender, const std::string& target, const std::string& command, const std::string& message)
{
if (!ignoreVerbosity(Command::Internal::CTCP)) {
const auto msg = fmt::format("[CTCP {}] reply from {}: {}", command, sender.nickname(), message);
std::string printmsg;
if (message.empty())
printmsg = fmt::format("[CTCP {}] reply from {}", command, sender.nickname());
else
printmsg = fmt::format("[CTCP {}] reply from {}: {}", command, sender.nickname(), message);
auto* win = getStatus().getActiveWindow();
win->print(PrintType::CTCP, msg.c_str());
win->print(PrintType::CTCP, printmsg.c_str());
}
contextualScriptEvent(&m_status, ScriptEvent::CtcpReply, sender.toString(), target, command, message);
}

Loading…
Cancel
Save