diff options
Diffstat (limited to 'src/command/cmd_funcs.c')
-rw-r--r-- | src/command/cmd_funcs.c | 60 |
1 files changed, 48 insertions, 12 deletions
diff --git a/src/command/cmd_funcs.c b/src/command/cmd_funcs.c index 6f3068ee..dc9b1fb0 100644 --- a/src/command/cmd_funcs.c +++ b/src/command/cmd_funcs.c @@ -3008,23 +3008,29 @@ cmd_blocked(ProfWin* window, const char* const command, gchar** args) } if (!connection_supports(XMPP_FEATURE_BLOCKING)) { - cons_show("Blocking not supported by server."); + cons_show("Blocking (%s) not supported by server.", XMPP_FEATURE_BLOCKING); return TRUE; } + blocked_report br = BLOCKED_NO_REPORT; + if (g_strcmp0(args[0], "add") == 0) { char* jid = args[1]; - if (jid == NULL && (window->type == WIN_CHAT)) { - ProfChatWin* chatwin = (ProfChatWin*)window; - jid = chatwin->barejid; - } - if (jid == NULL) { - cons_bad_cmd_usage(command); - return TRUE; + // /blocked add jid or /blocked add (in window) + if (g_strv_length(args) < 3) { + if (jid == NULL && (window->type == WIN_CHAT)) { + ProfChatWin* chatwin = (ProfChatWin*)window; + jid = chatwin->barejid; + } + + if (jid == NULL) { + cons_bad_cmd_usage(command); + return TRUE; + } } - gboolean res = blocked_add(jid); + gboolean res = blocked_add(jid, br, NULL); if (!res) { cons_show("User %s already blocked.", jid); } @@ -3046,6 +3052,28 @@ cmd_blocked(ProfWin* window, const char* const command, gchar** args) return TRUE; } + if (strncmp(args[0], "report-", 7) == 0) { + if (args[1] && g_strcmp0(args[0], "report-abuse") == 0) { + br = BLOCKED_REPORT_ABUSE; + } else if (args[1] && g_strcmp0(args[0], "report-spam") == 0) { + br = BLOCKED_REPORT_SPAM; + } else { + cons_bad_cmd_usage(command); + return TRUE; + } + + if (!connection_supports(XMPP_FEATURE_SPAM_REPORTING)) { + cons_show("Spam reporting (%s) not supported by server.", XMPP_FEATURE_SPAM_REPORTING); + return TRUE; + } + + // args[3] is an optional message + gboolean res = blocked_add(args[1], br, args[3]); + if (!res) { + cons_show("User %s already blocked.", args[1]); + } + } + GList* blocked = blocked_list(); GList* curr = blocked; if (curr) { @@ -6497,7 +6525,7 @@ cmd_ping(ProfWin* window, const char* const command, gchar** args) } if (args[0] == NULL && connection_supports(XMPP_FEATURE_PING) == FALSE) { - cons_show("Server does not support ping requests."); + cons_show("Server does not support ping requests (%s).", XMPP_FEATURE_PING); return TRUE; } @@ -8118,7 +8146,7 @@ cmd_command_list(ProfWin* window, const char* const command, gchar** args) } if (connection_supports(XMPP_FEATURE_COMMANDS) == FALSE) { - cons_show("Server does not support ad hoc commands."); + cons_show("Server does not support ad hoc commands (%s).", XMPP_FEATURE_COMMANDS); return TRUE; } @@ -8174,7 +8202,7 @@ cmd_command_exec(ProfWin* window, const char* const command, gchar** args) } if (connection_supports(XMPP_FEATURE_COMMANDS) == FALSE) { - cons_show("Server does not support ad hoc commands."); + cons_show("Server does not support ad hoc commands (%s).", XMPP_FEATURE_COMMANDS); return TRUE; } @@ -9493,3 +9521,11 @@ cmd_editor(ProfWin* window, const char* const command, gchar** args) } return TRUE; } + +gboolean +cmd_silence(ProfWin* window, const char* const command, gchar** args) +{ + _cmd_set_boolean_preference(args[0], command, "Block all messages from JIDs that are not in the roster", PREF_SILENCE_NON_ROSTER); + + return TRUE; +} |