plugins/mod_announce.lua
author Kim Alvefur <zash@zash.se>
Tue, 14 May 2024 17:07:47 +0200
changeset 13494 6f840763fc73
parent 13489 3bdbaba15c00
permissions -rw-r--r--
net.server_epoll: Add support for systemd socket activation Allows creating listening sockets and accepting client connections before Prosody starts. This is unlike normal Prosody dynamic resource management, where ports may added and removed at any time, and the ports defined by the config. Weird things happen if these are closed (e.g. due to reload) so here we prevent closing and ensure sockets are reused when opened again.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1522
569d58d21612 Add copyright header to those files missing one
Matthew Wild <mwild1@gmail.com>
parents: 1397
diff changeset
     1
-- Prosody IM
2923
b7049746bd29 Update copyright headers for 2010
Matthew Wild <mwild1@gmail.com>
parents: 1522
diff changeset
     2
-- Copyright (C) 2008-2010 Matthew Wild
b7049746bd29 Update copyright headers for 2010
Matthew Wild <mwild1@gmail.com>
parents: 1522
diff changeset
     3
-- Copyright (C) 2008-2010 Waqas Hussain
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5370
diff changeset
     4
--
1522
569d58d21612 Add copyright header to those files missing one
Matthew Wild <mwild1@gmail.com>
parents: 1397
diff changeset
     5
-- This project is MIT/X11 licensed. Please see the
569d58d21612 Add copyright header to those files missing one
Matthew Wild <mwild1@gmail.com>
parents: 1397
diff changeset
     6
-- COPYING file in the source package for more information.
569d58d21612 Add copyright header to those files missing one
Matthew Wild <mwild1@gmail.com>
parents: 1397
diff changeset
     7
--
569d58d21612 Add copyright header to those files missing one
Matthew Wild <mwild1@gmail.com>
parents: 1397
diff changeset
     8
13488
e22609460975 mod_announce: Add shell commands and APIs for sending to all/online/roles
Matthew Wild <mwild1@gmail.com>
parents: 12981
diff changeset
     9
local usermanager = require "prosody.core.usermanager";
e22609460975 mod_announce: Add shell commands and APIs for sending to all/online/roles
Matthew Wild <mwild1@gmail.com>
parents: 12981
diff changeset
    10
local id = require "prosody.util.id";
e22609460975 mod_announce: Add shell commands and APIs for sending to all/online/roles
Matthew Wild <mwild1@gmail.com>
parents: 12981
diff changeset
    11
local jid = require "prosody.util.jid";
e22609460975 mod_announce: Add shell commands and APIs for sending to all/online/roles
Matthew Wild <mwild1@gmail.com>
parents: 12981
diff changeset
    12
local st = require "prosody.util.stanza";
1385
8999dd4253f9 mod_announce: New module to send a message to all online users
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    13
5370
7838acadb0fa mod_announce, mod_auth_anonymous, mod_c2s, mod_c2s, mod_component, mod_iq, mod_message, mod_presence, mod_tls: Access prosody.{hosts,bare_sessions,full_sessions} instead of the old globals
Kim Alvefur <zash@zash.se>
parents: 5076
diff changeset
    14
local hosts = prosody.hosts;
1385
8999dd4253f9 mod_announce: New module to send a message to all online users
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    15
3278
5ca2ed58788f mod_announce: A little cleanup.
Waqas Hussain <waqas20@gmail.com>
parents: 3276
diff changeset
    16
function send_to_online(message, host)
13488
e22609460975 mod_announce: Add shell commands and APIs for sending to all/online/roles
Matthew Wild <mwild1@gmail.com>
parents: 12981
diff changeset
    17
	host = host or module.host;
3275
05c1d8269043 mod_announce: Changed a global variable to local.
Waqas Hussain <waqas20@gmail.com>
parents: 3228
diff changeset
    18
	local sessions;
3278
5ca2ed58788f mod_announce: A little cleanup.
Waqas Hussain <waqas20@gmail.com>
parents: 3276
diff changeset
    19
	if host then
5ca2ed58788f mod_announce: A little cleanup.
Waqas Hussain <waqas20@gmail.com>
parents: 3276
diff changeset
    20
		sessions = { [host] = hosts[host] };
3228
65e5dfcf5a9f mod_announce: Add ad-hoc command for sending announcements \o/
Matthew Wild <mwild1@gmail.com>
parents: 3199
diff changeset
    21
	else
65e5dfcf5a9f mod_announce: Add ad-hoc command for sending announcements \o/
Matthew Wild <mwild1@gmail.com>
parents: 3199
diff changeset
    22
		sessions = hosts;
65e5dfcf5a9f mod_announce: Add ad-hoc command for sending announcements \o/
Matthew Wild <mwild1@gmail.com>
parents: 3199
diff changeset
    23
	end
65e5dfcf5a9f mod_announce: Add ad-hoc command for sending announcements \o/
Matthew Wild <mwild1@gmail.com>
parents: 3199
diff changeset
    24
65e5dfcf5a9f mod_announce: Add ad-hoc command for sending announcements \o/
Matthew Wild <mwild1@gmail.com>
parents: 3199
diff changeset
    25
	local c = 0;
65e5dfcf5a9f mod_announce: Add ad-hoc command for sending announcements \o/
Matthew Wild <mwild1@gmail.com>
parents: 3199
diff changeset
    26
	for hostname, host_session in pairs(sessions) do
65e5dfcf5a9f mod_announce: Add ad-hoc command for sending announcements \o/
Matthew Wild <mwild1@gmail.com>
parents: 3199
diff changeset
    27
		if host_session.sessions then
65e5dfcf5a9f mod_announce: Add ad-hoc command for sending announcements \o/
Matthew Wild <mwild1@gmail.com>
parents: 3199
diff changeset
    28
			message.attr.from = hostname;
65e5dfcf5a9f mod_announce: Add ad-hoc command for sending announcements \o/
Matthew Wild <mwild1@gmail.com>
parents: 3199
diff changeset
    29
			for username in pairs(host_session.sessions) do
65e5dfcf5a9f mod_announce: Add ad-hoc command for sending announcements \o/
Matthew Wild <mwild1@gmail.com>
parents: 3199
diff changeset
    30
				c = c + 1;
65e5dfcf5a9f mod_announce: Add ad-hoc command for sending announcements \o/
Matthew Wild <mwild1@gmail.com>
parents: 3199
diff changeset
    31
				message.attr.to = username.."@"..hostname;
5014
b2006c1cfa85 mod_announce, mod_motd, mod_pubsub, mod_register, mod_watchregistrations, mod_welcome: Use module:send() instead of core_*_stanza()
Kim Alvefur <zash@zash.se>
parents: 4926
diff changeset
    32
				module:send(message);
3228
65e5dfcf5a9f mod_announce: Add ad-hoc command for sending announcements \o/
Matthew Wild <mwild1@gmail.com>
parents: 3199
diff changeset
    33
			end
65e5dfcf5a9f mod_announce: Add ad-hoc command for sending announcements \o/
Matthew Wild <mwild1@gmail.com>
parents: 3199
diff changeset
    34
		end
65e5dfcf5a9f mod_announce: Add ad-hoc command for sending announcements \o/
Matthew Wild <mwild1@gmail.com>
parents: 3199
diff changeset
    35
	end
65e5dfcf5a9f mod_announce: Add ad-hoc command for sending announcements \o/
Matthew Wild <mwild1@gmail.com>
parents: 3199
diff changeset
    36
65e5dfcf5a9f mod_announce: Add ad-hoc command for sending announcements \o/
Matthew Wild <mwild1@gmail.com>
parents: 3199
diff changeset
    37
	return c;
65e5dfcf5a9f mod_announce: Add ad-hoc command for sending announcements \o/
Matthew Wild <mwild1@gmail.com>
parents: 3199
diff changeset
    38
end
65e5dfcf5a9f mod_announce: Add ad-hoc command for sending announcements \o/
Matthew Wild <mwild1@gmail.com>
parents: 3199
diff changeset
    39
13488
e22609460975 mod_announce: Add shell commands and APIs for sending to all/online/roles
Matthew Wild <mwild1@gmail.com>
parents: 12981
diff changeset
    40
function send_to_all(message, host)
e22609460975 mod_announce: Add shell commands and APIs for sending to all/online/roles
Matthew Wild <mwild1@gmail.com>
parents: 12981
diff changeset
    41
	host = host or module.host;
e22609460975 mod_announce: Add shell commands and APIs for sending to all/online/roles
Matthew Wild <mwild1@gmail.com>
parents: 12981
diff changeset
    42
	local c = 0;
e22609460975 mod_announce: Add shell commands and APIs for sending to all/online/roles
Matthew Wild <mwild1@gmail.com>
parents: 12981
diff changeset
    43
	for username in usermanager.users(host) do
e22609460975 mod_announce: Add shell commands and APIs for sending to all/online/roles
Matthew Wild <mwild1@gmail.com>
parents: 12981
diff changeset
    44
		message.attr.to = username.."@"..host;
e22609460975 mod_announce: Add shell commands and APIs for sending to all/online/roles
Matthew Wild <mwild1@gmail.com>
parents: 12981
diff changeset
    45
		module:send(st.clone(message));
e22609460975 mod_announce: Add shell commands and APIs for sending to all/online/roles
Matthew Wild <mwild1@gmail.com>
parents: 12981
diff changeset
    46
		c = c + 1;
e22609460975 mod_announce: Add shell commands and APIs for sending to all/online/roles
Matthew Wild <mwild1@gmail.com>
parents: 12981
diff changeset
    47
	end
e22609460975 mod_announce: Add shell commands and APIs for sending to all/online/roles
Matthew Wild <mwild1@gmail.com>
parents: 12981
diff changeset
    48
	return c;
e22609460975 mod_announce: Add shell commands and APIs for sending to all/online/roles
Matthew Wild <mwild1@gmail.com>
parents: 12981
diff changeset
    49
end
e22609460975 mod_announce: Add shell commands and APIs for sending to all/online/roles
Matthew Wild <mwild1@gmail.com>
parents: 12981
diff changeset
    50
e22609460975 mod_announce: Add shell commands and APIs for sending to all/online/roles
Matthew Wild <mwild1@gmail.com>
parents: 12981
diff changeset
    51
function send_to_role(message, role, host)
e22609460975 mod_announce: Add shell commands and APIs for sending to all/online/roles
Matthew Wild <mwild1@gmail.com>
parents: 12981
diff changeset
    52
	host = host or module.host;
e22609460975 mod_announce: Add shell commands and APIs for sending to all/online/roles
Matthew Wild <mwild1@gmail.com>
parents: 12981
diff changeset
    53
	local c = 0;
e22609460975 mod_announce: Add shell commands and APIs for sending to all/online/roles
Matthew Wild <mwild1@gmail.com>
parents: 12981
diff changeset
    54
	for _, recipient_jid in ipairs(usermanager.get_jids_with_role(role, host)) do
e22609460975 mod_announce: Add shell commands and APIs for sending to all/online/roles
Matthew Wild <mwild1@gmail.com>
parents: 12981
diff changeset
    55
		message.attr.to = recipient_jid;
e22609460975 mod_announce: Add shell commands and APIs for sending to all/online/roles
Matthew Wild <mwild1@gmail.com>
parents: 12981
diff changeset
    56
		module:send(st.clone(message));
e22609460975 mod_announce: Add shell commands and APIs for sending to all/online/roles
Matthew Wild <mwild1@gmail.com>
parents: 12981
diff changeset
    57
		c = c + 1;
e22609460975 mod_announce: Add shell commands and APIs for sending to all/online/roles
Matthew Wild <mwild1@gmail.com>
parents: 12981
diff changeset
    58
	end
e22609460975 mod_announce: Add shell commands and APIs for sending to all/online/roles
Matthew Wild <mwild1@gmail.com>
parents: 12981
diff changeset
    59
	return c;
e22609460975 mod_announce: Add shell commands and APIs for sending to all/online/roles
Matthew Wild <mwild1@gmail.com>
parents: 12981
diff changeset
    60
end
e22609460975 mod_announce: Add shell commands and APIs for sending to all/online/roles
Matthew Wild <mwild1@gmail.com>
parents: 12981
diff changeset
    61
12646
9061f9621330 Switch to a new role-based authorization framework, removing is_admin()
Matthew Wild <mwild1@gmail.com>
parents: 10549
diff changeset
    62
module:default_permission("prosody:admin", ":send-announcement");
3228
65e5dfcf5a9f mod_announce: Add ad-hoc command for sending announcements \o/
Matthew Wild <mwild1@gmail.com>
parents: 3199
diff changeset
    63
65e5dfcf5a9f mod_announce: Add ad-hoc command for sending announcements \o/
Matthew Wild <mwild1@gmail.com>
parents: 3199
diff changeset
    64
-- Old <message>-based jabberd-style announcement sending
3278
5ca2ed58788f mod_announce: A little cleanup.
Waqas Hussain <waqas20@gmail.com>
parents: 3276
diff changeset
    65
function handle_announcement(event)
8977
71500c68fed4 mod_announce: Fix luacheck warnings
Kim Alvefur <zash@zash.se>
parents: 8963
diff changeset
    66
	local stanza = event.stanza;
10549
2fbcdf6da331 mod_announce: Silence luacheck warning about unused variable
Kim Alvefur <zash@zash.se>
parents: 10030
diff changeset
    67
	-- luacheck: ignore 211/node
3278
5ca2ed58788f mod_announce: A little cleanup.
Waqas Hussain <waqas20@gmail.com>
parents: 3276
diff changeset
    68
	local node, host, resource = jid.split(stanza.attr.to);
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5370
diff changeset
    69
1385
8999dd4253f9 mod_announce: New module to send a message to all online users
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    70
	if resource ~= "announce/online" then
8999dd4253f9 mod_announce: New module to send a message to all online users
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    71
		return; -- Not an announcement
8999dd4253f9 mod_announce: New module to send a message to all online users
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    72
	end
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5370
diff changeset
    73
12646
9061f9621330 Switch to a new role-based authorization framework, removing is_admin()
Matthew Wild <mwild1@gmail.com>
parents: 10549
diff changeset
    74
	if not module:may(":send-announcement", event) then
9061f9621330 Switch to a new role-based authorization framework, removing is_admin()
Matthew Wild <mwild1@gmail.com>
parents: 10549
diff changeset
    75
		-- Not allowed!
3278
5ca2ed58788f mod_announce: A little cleanup.
Waqas Hussain <waqas20@gmail.com>
parents: 3276
diff changeset
    76
		module:log("warn", "Non-admin '%s' tried to send server announcement", stanza.attr.from);
1385
8999dd4253f9 mod_announce: New module to send a message to all online users
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    77
		return;
8999dd4253f9 mod_announce: New module to send a message to all online users
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    78
	end
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5370
diff changeset
    79
1385
8999dd4253f9 mod_announce: New module to send a message to all online users
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    80
	module:log("info", "Sending server announcement to all online users");
8999dd4253f9 mod_announce: New module to send a message to all online users
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    81
	local message = st.clone(stanza);
8999dd4253f9 mod_announce: New module to send a message to all online users
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    82
	message.attr.type = "headline";
8999dd4253f9 mod_announce: New module to send a message to all online users
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    83
	message.attr.from = host;
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5370
diff changeset
    84
3228
65e5dfcf5a9f mod_announce: Add ad-hoc command for sending announcements \o/
Matthew Wild <mwild1@gmail.com>
parents: 3199
diff changeset
    85
	local c = send_to_online(message, host);
1385
8999dd4253f9 mod_announce: New module to send a message to all online users
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    86
	module:log("info", "Announcement sent to %d online users", c);
8999dd4253f9 mod_announce: New module to send a message to all online users
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    87
	return true;
8999dd4253f9 mod_announce: New module to send a message to all online users
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    88
end
3228
65e5dfcf5a9f mod_announce: Add ad-hoc command for sending announcements \o/
Matthew Wild <mwild1@gmail.com>
parents: 3199
diff changeset
    89
module:hook("message/host", handle_announcement);
1385
8999dd4253f9 mod_announce: New module to send a message to all online users
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    90
3228
65e5dfcf5a9f mod_announce: Add ad-hoc command for sending announcements \o/
Matthew Wild <mwild1@gmail.com>
parents: 3199
diff changeset
    91
-- Ad-hoc command (XEP-0133)
12981
74b9e05af71e plugins: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents: 12646
diff changeset
    92
local dataforms_new = require "prosody.util.dataforms".new;
3228
65e5dfcf5a9f mod_announce: Add ad-hoc command for sending announcements \o/
Matthew Wild <mwild1@gmail.com>
parents: 3199
diff changeset
    93
local announce_layout = dataforms_new{
65e5dfcf5a9f mod_announce: Add ad-hoc command for sending announcements \o/
Matthew Wild <mwild1@gmail.com>
parents: 3199
diff changeset
    94
	title = "Making an Announcement";
65e5dfcf5a9f mod_announce: Add ad-hoc command for sending announcements \o/
Matthew Wild <mwild1@gmail.com>
parents: 3199
diff changeset
    95
	instructions = "Fill out this form to make an announcement to all\nactive users of this service.";
65e5dfcf5a9f mod_announce: Add ad-hoc command for sending announcements \o/
Matthew Wild <mwild1@gmail.com>
parents: 3199
diff changeset
    96
65e5dfcf5a9f mod_announce: Add ad-hoc command for sending announcements \o/
Matthew Wild <mwild1@gmail.com>
parents: 3199
diff changeset
    97
	{ name = "FORM_TYPE", type = "hidden", value = "http://jabber.org/protocol/admin" };
65e5dfcf5a9f mod_announce: Add ad-hoc command for sending announcements \o/
Matthew Wild <mwild1@gmail.com>
parents: 3199
diff changeset
    98
	{ name = "subject", type = "text-single", label = "Subject" };
65e5dfcf5a9f mod_announce: Add ad-hoc command for sending announcements \o/
Matthew Wild <mwild1@gmail.com>
parents: 3199
diff changeset
    99
	{ name = "announcement", type = "text-multi", required = true, label = "Announcement" };
65e5dfcf5a9f mod_announce: Add ad-hoc command for sending announcements \o/
Matthew Wild <mwild1@gmail.com>
parents: 3199
diff changeset
   100
};
65e5dfcf5a9f mod_announce: Add ad-hoc command for sending announcements \o/
Matthew Wild <mwild1@gmail.com>
parents: 3199
diff changeset
   101
8977
71500c68fed4 mod_announce: Fix luacheck warnings
Kim Alvefur <zash@zash.se>
parents: 8963
diff changeset
   102
function announce_handler(_, data, state)
3228
65e5dfcf5a9f mod_announce: Add ad-hoc command for sending announcements \o/
Matthew Wild <mwild1@gmail.com>
parents: 3199
diff changeset
   103
	if state then
65e5dfcf5a9f mod_announce: Add ad-hoc command for sending announcements \o/
Matthew Wild <mwild1@gmail.com>
parents: 3199
diff changeset
   104
		if data.action == "cancel" then
65e5dfcf5a9f mod_announce: Add ad-hoc command for sending announcements \o/
Matthew Wild <mwild1@gmail.com>
parents: 3199
diff changeset
   105
			return { status = "canceled" };
65e5dfcf5a9f mod_announce: Add ad-hoc command for sending announcements \o/
Matthew Wild <mwild1@gmail.com>
parents: 3199
diff changeset
   106
		end
65e5dfcf5a9f mod_announce: Add ad-hoc command for sending announcements \o/
Matthew Wild <mwild1@gmail.com>
parents: 3199
diff changeset
   107
65e5dfcf5a9f mod_announce: Add ad-hoc command for sending announcements \o/
Matthew Wild <mwild1@gmail.com>
parents: 3199
diff changeset
   108
		local fields = announce_layout:data(data.form);
65e5dfcf5a9f mod_announce: Add ad-hoc command for sending announcements \o/
Matthew Wild <mwild1@gmail.com>
parents: 3199
diff changeset
   109
65e5dfcf5a9f mod_announce: Add ad-hoc command for sending announcements \o/
Matthew Wild <mwild1@gmail.com>
parents: 3199
diff changeset
   110
		module:log("info", "Sending server announcement to all online users");
13488
e22609460975 mod_announce: Add shell commands and APIs for sending to all/online/roles
Matthew Wild <mwild1@gmail.com>
parents: 12981
diff changeset
   111
		local message = st.message({type = "headline"}, fields.announcement):up();
e22609460975 mod_announce: Add shell commands and APIs for sending to all/online/roles
Matthew Wild <mwild1@gmail.com>
parents: 12981
diff changeset
   112
		if fields.subject and fields.subject ~= "" then
e22609460975 mod_announce: Add shell commands and APIs for sending to all/online/roles
Matthew Wild <mwild1@gmail.com>
parents: 12981
diff changeset
   113
			message:text_tag("subject", fields.subject);
e22609460975 mod_announce: Add shell commands and APIs for sending to all/online/roles
Matthew Wild <mwild1@gmail.com>
parents: 12981
diff changeset
   114
		end
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5370
diff changeset
   115
3228
65e5dfcf5a9f mod_announce: Add ad-hoc command for sending announcements \o/
Matthew Wild <mwild1@gmail.com>
parents: 3199
diff changeset
   116
		local count = send_to_online(message, data.to);
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5370
diff changeset
   117
3228
65e5dfcf5a9f mod_announce: Add ad-hoc command for sending announcements \o/
Matthew Wild <mwild1@gmail.com>
parents: 3199
diff changeset
   118
		module:log("info", "Announcement sent to %d online users", count);
65e5dfcf5a9f mod_announce: Add ad-hoc command for sending announcements \o/
Matthew Wild <mwild1@gmail.com>
parents: 3199
diff changeset
   119
		return { status = "completed", info = ("Announcement sent to %d online users"):format(count) };
65e5dfcf5a9f mod_announce: Add ad-hoc command for sending announcements \o/
Matthew Wild <mwild1@gmail.com>
parents: 3199
diff changeset
   120
	else
5076
88fb94df9b18 mod_admin_adhoc, mod_announce: Explicitly specify possible actions for ad-hoc commands
Florian Zeitz <florob@babelmonkeys.de>
parents: 5014
diff changeset
   121
		return { status = "executing", actions = {"next", "complete", default = "complete"}, form = announce_layout }, "executing";
3228
65e5dfcf5a9f mod_announce: Add ad-hoc command for sending announcements \o/
Matthew Wild <mwild1@gmail.com>
parents: 3199
diff changeset
   122
	end
65e5dfcf5a9f mod_announce: Add ad-hoc command for sending announcements \o/
Matthew Wild <mwild1@gmail.com>
parents: 3199
diff changeset
   123
end
65e5dfcf5a9f mod_announce: Add ad-hoc command for sending announcements \o/
Matthew Wild <mwild1@gmail.com>
parents: 3199
diff changeset
   124
8963
9d0d1e427b82 mod_announce: Depend on mod_adhoc for consistent behaviour (thanks meaz, Link Mauve)
Kim Alvefur <zash@zash.se>
parents: 8683
diff changeset
   125
module:depends "adhoc";
3228
65e5dfcf5a9f mod_announce: Add ad-hoc command for sending announcements \o/
Matthew Wild <mwild1@gmail.com>
parents: 3199
diff changeset
   126
local adhoc_new = module:require "adhoc".new;
65e5dfcf5a9f mod_announce: Add ad-hoc command for sending announcements \o/
Matthew Wild <mwild1@gmail.com>
parents: 3199
diff changeset
   127
local announce_desc = adhoc_new("Send Announcement to Online Users", "http://jabber.org/protocol/admin#announce", announce_handler, "admin");
4926
58714123f600 mod_adhoc, mod_admin_adhoc, mod_announce: Use module:provides() to manage Ad-Hoc commands
Florian Zeitz <florob@babelmonkeys.de>
parents: 3278
diff changeset
   128
module:provides("adhoc", announce_desc);
3228
65e5dfcf5a9f mod_announce: Add ad-hoc command for sending announcements \o/
Matthew Wild <mwild1@gmail.com>
parents: 3199
diff changeset
   129
13488
e22609460975 mod_announce: Add shell commands and APIs for sending to all/online/roles
Matthew Wild <mwild1@gmail.com>
parents: 12981
diff changeset
   130
module:add_item("shell-command", {
e22609460975 mod_announce: Add shell commands and APIs for sending to all/online/roles
Matthew Wild <mwild1@gmail.com>
parents: 12981
diff changeset
   131
	section = "announce";
e22609460975 mod_announce: Add shell commands and APIs for sending to all/online/roles
Matthew Wild <mwild1@gmail.com>
parents: 12981
diff changeset
   132
	section_desc = "Broadcast announcements to users";
e22609460975 mod_announce: Add shell commands and APIs for sending to all/online/roles
Matthew Wild <mwild1@gmail.com>
parents: 12981
diff changeset
   133
	name = "all";
e22609460975 mod_announce: Add shell commands and APIs for sending to all/online/roles
Matthew Wild <mwild1@gmail.com>
parents: 12981
diff changeset
   134
	desc = "Send announcement to all users on the host";
e22609460975 mod_announce: Add shell commands and APIs for sending to all/online/roles
Matthew Wild <mwild1@gmail.com>
parents: 12981
diff changeset
   135
	args = {
e22609460975 mod_announce: Add shell commands and APIs for sending to all/online/roles
Matthew Wild <mwild1@gmail.com>
parents: 12981
diff changeset
   136
		{ name = "host", type = "string" };
e22609460975 mod_announce: Add shell commands and APIs for sending to all/online/roles
Matthew Wild <mwild1@gmail.com>
parents: 12981
diff changeset
   137
		{ name = "text", type = "string" };
e22609460975 mod_announce: Add shell commands and APIs for sending to all/online/roles
Matthew Wild <mwild1@gmail.com>
parents: 12981
diff changeset
   138
	};
e22609460975 mod_announce: Add shell commands and APIs for sending to all/online/roles
Matthew Wild <mwild1@gmail.com>
parents: 12981
diff changeset
   139
	host_selector = "host";
13489
3bdbaba15c00 mod_announce: Suppress luacheck warnings
Matthew Wild <mwild1@gmail.com>
parents: 13488
diff changeset
   140
	handler = function(self, host, text) --luacheck: ignore 212/self
13488
e22609460975 mod_announce: Add shell commands and APIs for sending to all/online/roles
Matthew Wild <mwild1@gmail.com>
parents: 12981
diff changeset
   141
		local msg = st.message({ from = host, id = id.short() })
e22609460975 mod_announce: Add shell commands and APIs for sending to all/online/roles
Matthew Wild <mwild1@gmail.com>
parents: 12981
diff changeset
   142
			:text_tag("body", text);
e22609460975 mod_announce: Add shell commands and APIs for sending to all/online/roles
Matthew Wild <mwild1@gmail.com>
parents: 12981
diff changeset
   143
		local count = send_to_all(msg, host);
e22609460975 mod_announce: Add shell commands and APIs for sending to all/online/roles
Matthew Wild <mwild1@gmail.com>
parents: 12981
diff changeset
   144
		return true, ("Announcement sent to %d users"):format(count);
e22609460975 mod_announce: Add shell commands and APIs for sending to all/online/roles
Matthew Wild <mwild1@gmail.com>
parents: 12981
diff changeset
   145
	end;
e22609460975 mod_announce: Add shell commands and APIs for sending to all/online/roles
Matthew Wild <mwild1@gmail.com>
parents: 12981
diff changeset
   146
});
e22609460975 mod_announce: Add shell commands and APIs for sending to all/online/roles
Matthew Wild <mwild1@gmail.com>
parents: 12981
diff changeset
   147
e22609460975 mod_announce: Add shell commands and APIs for sending to all/online/roles
Matthew Wild <mwild1@gmail.com>
parents: 12981
diff changeset
   148
module:add_item("shell-command", {
e22609460975 mod_announce: Add shell commands and APIs for sending to all/online/roles
Matthew Wild <mwild1@gmail.com>
parents: 12981
diff changeset
   149
	section = "announce";
e22609460975 mod_announce: Add shell commands and APIs for sending to all/online/roles
Matthew Wild <mwild1@gmail.com>
parents: 12981
diff changeset
   150
	section_desc = "Broadcast announcements to users";
e22609460975 mod_announce: Add shell commands and APIs for sending to all/online/roles
Matthew Wild <mwild1@gmail.com>
parents: 12981
diff changeset
   151
	name = "online";
e22609460975 mod_announce: Add shell commands and APIs for sending to all/online/roles
Matthew Wild <mwild1@gmail.com>
parents: 12981
diff changeset
   152
	desc = "Send announcement to all online users on the host";
e22609460975 mod_announce: Add shell commands and APIs for sending to all/online/roles
Matthew Wild <mwild1@gmail.com>
parents: 12981
diff changeset
   153
	args = {
e22609460975 mod_announce: Add shell commands and APIs for sending to all/online/roles
Matthew Wild <mwild1@gmail.com>
parents: 12981
diff changeset
   154
		{ name = "host", type = "string" };
e22609460975 mod_announce: Add shell commands and APIs for sending to all/online/roles
Matthew Wild <mwild1@gmail.com>
parents: 12981
diff changeset
   155
		{ name = "text", type = "string" };
e22609460975 mod_announce: Add shell commands and APIs for sending to all/online/roles
Matthew Wild <mwild1@gmail.com>
parents: 12981
diff changeset
   156
	};
e22609460975 mod_announce: Add shell commands and APIs for sending to all/online/roles
Matthew Wild <mwild1@gmail.com>
parents: 12981
diff changeset
   157
	host_selector = "host";
13489
3bdbaba15c00 mod_announce: Suppress luacheck warnings
Matthew Wild <mwild1@gmail.com>
parents: 13488
diff changeset
   158
	handler = function(self, host, text) --luacheck: ignore 212/self
13488
e22609460975 mod_announce: Add shell commands and APIs for sending to all/online/roles
Matthew Wild <mwild1@gmail.com>
parents: 12981
diff changeset
   159
		local msg = st.message({ from = host, id = id.short(), type = "headline" })
e22609460975 mod_announce: Add shell commands and APIs for sending to all/online/roles
Matthew Wild <mwild1@gmail.com>
parents: 12981
diff changeset
   160
			:text_tag("body", text);
e22609460975 mod_announce: Add shell commands and APIs for sending to all/online/roles
Matthew Wild <mwild1@gmail.com>
parents: 12981
diff changeset
   161
		local count = send_to_online(msg, host);
e22609460975 mod_announce: Add shell commands and APIs for sending to all/online/roles
Matthew Wild <mwild1@gmail.com>
parents: 12981
diff changeset
   162
		return true, ("Announcement sent to %d users"):format(count);
e22609460975 mod_announce: Add shell commands and APIs for sending to all/online/roles
Matthew Wild <mwild1@gmail.com>
parents: 12981
diff changeset
   163
	end;
e22609460975 mod_announce: Add shell commands and APIs for sending to all/online/roles
Matthew Wild <mwild1@gmail.com>
parents: 12981
diff changeset
   164
});
e22609460975 mod_announce: Add shell commands and APIs for sending to all/online/roles
Matthew Wild <mwild1@gmail.com>
parents: 12981
diff changeset
   165
e22609460975 mod_announce: Add shell commands and APIs for sending to all/online/roles
Matthew Wild <mwild1@gmail.com>
parents: 12981
diff changeset
   166
module:add_item("shell-command", {
e22609460975 mod_announce: Add shell commands and APIs for sending to all/online/roles
Matthew Wild <mwild1@gmail.com>
parents: 12981
diff changeset
   167
	section = "announce";
e22609460975 mod_announce: Add shell commands and APIs for sending to all/online/roles
Matthew Wild <mwild1@gmail.com>
parents: 12981
diff changeset
   168
	section_desc = "Broadcast announcements to users";
e22609460975 mod_announce: Add shell commands and APIs for sending to all/online/roles
Matthew Wild <mwild1@gmail.com>
parents: 12981
diff changeset
   169
	name = "role";
e22609460975 mod_announce: Add shell commands and APIs for sending to all/online/roles
Matthew Wild <mwild1@gmail.com>
parents: 12981
diff changeset
   170
	desc = "Send announcement to users with a specific role on the host";
e22609460975 mod_announce: Add shell commands and APIs for sending to all/online/roles
Matthew Wild <mwild1@gmail.com>
parents: 12981
diff changeset
   171
	args = {
e22609460975 mod_announce: Add shell commands and APIs for sending to all/online/roles
Matthew Wild <mwild1@gmail.com>
parents: 12981
diff changeset
   172
		{ name = "host", type = "string" };
e22609460975 mod_announce: Add shell commands and APIs for sending to all/online/roles
Matthew Wild <mwild1@gmail.com>
parents: 12981
diff changeset
   173
		{ name = "role", type = "string" };
e22609460975 mod_announce: Add shell commands and APIs for sending to all/online/roles
Matthew Wild <mwild1@gmail.com>
parents: 12981
diff changeset
   174
		{ name = "text", type = "string" };
e22609460975 mod_announce: Add shell commands and APIs for sending to all/online/roles
Matthew Wild <mwild1@gmail.com>
parents: 12981
diff changeset
   175
	};
e22609460975 mod_announce: Add shell commands and APIs for sending to all/online/roles
Matthew Wild <mwild1@gmail.com>
parents: 12981
diff changeset
   176
	host_selector = "host";
13489
3bdbaba15c00 mod_announce: Suppress luacheck warnings
Matthew Wild <mwild1@gmail.com>
parents: 13488
diff changeset
   177
	handler = function(self, host, role, text) --luacheck: ignore 212/self
13488
e22609460975 mod_announce: Add shell commands and APIs for sending to all/online/roles
Matthew Wild <mwild1@gmail.com>
parents: 12981
diff changeset
   178
		local msg = st.message({ from = host, id = id.short() })
e22609460975 mod_announce: Add shell commands and APIs for sending to all/online/roles
Matthew Wild <mwild1@gmail.com>
parents: 12981
diff changeset
   179
			:text_tag("body", text);
e22609460975 mod_announce: Add shell commands and APIs for sending to all/online/roles
Matthew Wild <mwild1@gmail.com>
parents: 12981
diff changeset
   180
		local count = send_to_role(msg, role, host);
e22609460975 mod_announce: Add shell commands and APIs for sending to all/online/roles
Matthew Wild <mwild1@gmail.com>
parents: 12981
diff changeset
   181
		return true, ("Announcement sent to %d users"):format(count);
e22609460975 mod_announce: Add shell commands and APIs for sending to all/online/roles
Matthew Wild <mwild1@gmail.com>
parents: 12981
diff changeset
   182
	end;
e22609460975 mod_announce: Add shell commands and APIs for sending to all/online/roles
Matthew Wild <mwild1@gmail.com>
parents: 12981
diff changeset
   183
});