# HG changeset patch # User Kim Alvefur # Date 1673196794 -3600 # Node ID d7652471ae3eb5d9c30eaadf4990a3b3880c274b # Parent 36b5677b9648a7352519e9d0c0a44b78852e3fc0 mod_pubsub_text_interface: Improve error messages The internal error conditions are not always very clear, especially 'item-not-found' which actually means the _node_ does not exist. diff -r 36b5677b9648 -r d7652471ae3e mod_pubsub_text_interface/mod_pubsub_text_interface.lua --- a/mod_pubsub_text_interface/mod_pubsub_text_interface.lua Sun Jan 08 13:17:41 2023 +0100 +++ b/mod_pubsub_text_interface/mod_pubsub_text_interface.lua Sun Jan 08 17:53:14 2023 +0100 @@ -18,6 +18,14 @@ if pubsub.get_last_item then -- COMPAT not available in 0.10 help = help .. "\n- `last node` - send the last item (again)" end +-- FIXME better word for "node" + +local friendly_pubsub_errors = { + ["forbidden"] = "You are not allowed to do that"; + ["item-not-found"] = "That node does not exist"; + ["internal-server-error"] = "Something went wrong (see server logs)"; + ["not-subscribed"] = "You were not subscribed"; +}; module:hook("message/host", function (event) local stanza = event.stanza; @@ -45,12 +53,12 @@ end reply:body(table.concat(list, "\n")); else - reply:body(nodes); + reply:body(friendly_pubsub_errors[nodes] or nodes); end elseif command == "subscriptions" then local ok, subs = pubsub:get_subscriptions(nil, from, from); if not ok then - reply:body(subs); + reply:body(friendly_pubsub_errors[subs] or subs); elseif #subs == 0 then reply:body("You are not subscribed to anything from this pubsub service"); else @@ -64,16 +72,16 @@ end elseif command == "subscribe" then local ok, err = pubsub:add_subscription(node_arg, from, jid.bare(from), { ["pubsub#include_body"] = true }); - reply:body(ok and "OK" or err); + reply:body(ok and "OK" or friendly_pubsub_errors[err] or err); elseif command == "unsubscribe" then local ok, err = pubsub:remove_subscription(node_arg, from, jid.bare(from)); - reply:body(ok and "OK" or err); + reply:body(ok and "OK" or friendly_pubsub_errors[err] or err); elseif command == "last" and pubsub.get_last_item then local ok, item_id, item = pubsub:get_last_item(node_arg, from); if not ok then - reply:body(item_id); -- err message + reply:body(friendly_pubsub_errors[item_id] or item_id); elseif not item_id then - reply:body("node is empty"); + reply:body("That node does not contain any items"); else pubsub.config.broadcaster("items", node_arg, { [from] = { ["pubsub#include_body"] = true }