summaryrefslogtreecommitdiff
path: root/src/actions/commands.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/actions/commands.cpp')
-rw-r--r--src/actions/commands.cpp56
1 files changed, 55 insertions, 1 deletions
diff --git a/src/actions/commands.cpp b/src/actions/commands.cpp
index c7607a2cd..7afc7efed 100644
--- a/src/actions/commands.cpp
+++ b/src/actions/commands.cpp
@@ -66,20 +66,74 @@
#include "gui/windows/shortcutwindow.h"
#include "gui/windows/updaterwindow.h"
-#include "gui/widgets/tabs/chattab.h"
+#include "gui/widgets/tabs/whispertab.h"
#include "net/adminhandler.h"
#include "net/net.h"
+#include "utils/gettext.h"
+
#include "debug.h"
namespace Actions
{
+static void changeRelation(std::string args,
+ const PlayerRelation::Relation relation,
+ const std::string &relationText,
+ ChatTab *const tab)
+{
+ if (!tab)
+ return;
+
+ if (args.empty())
+ {
+ WhisperTab *const whisper = dynamic_cast<WhisperTab* const>(tab);
+ if (!whisper || whisper->getNick().empty())
+ {
+ // TRANSLATORS: change relation
+ tab->chatLog(_("Please specify a name."), ChatMsgType::BY_SERVER);
+ return;
+ }
+ args = whisper->getNick();
+ }
+
+ if (player_relations.getRelation(args) == relation)
+ {
+ // TRANSLATORS: change relation
+ tab->chatLog(strprintf(_("Player already %s!"),
+ relationText.c_str()), ChatMsgType::BY_SERVER);
+ return;
+ }
+ else
+ {
+ player_relations.setRelation(args, relation);
+ }
+
+ if (player_relations.getRelation(args) == relation)
+ {
+ // TRANSLATORS: change relation
+ tab->chatLog(strprintf(_("Player successfully %s!"),
+ relationText.c_str()), ChatMsgType::BY_SERVER);
+ }
+ else
+ {
+ // TRANSLATORS: change relation
+ tab->chatLog(strprintf(_("Player could not be %s!"),
+ relationText.c_str()), ChatMsgType::BY_SERVER);
+ }
+}
+
impHandler(chatAnnounce)
{
Net::getAdminHandler()->announce(event.args);
return true;
}
+impHandler(chatIgnore)
+{
+ changeRelation(event.args, PlayerRelation::IGNORED, "ignored", event.tab);
+ return true;
+}
+
} // namespace Actions