annotate mod_muc_activity/mod_muc_activity.lua @ 6261:1c62edeb9147

mod_pastebin: Update Readme diff --git a/mod_pastebin/README.md b/mod_pastebin/README.md --- a/mod_pastebin/README.md +++ b/mod_pastebin/README.md @@ -37,12 +37,14 @@ For example: Pastes will be available by default at `http://<your-prosody>:5280/pastebin/` by default. -In Prosody 0.9 and later this can be changed with [HTTP -settings](https://prosody.im/doc/http). +Ports and path can be changed with [HTTP +settings](https://prosody.im/doc/http), for example like: -In 0.8 and older this can be changed with `pastebin_ports` (see below), -or you can forward another external URL from your web server to Prosody, -use `pastebin_url` to set that URL. +``` {.lua} + http_paths = { + pastebin = "/$host-paste"; + } +``` # Discovery @@ -82,27 +84,16 @@ The line and character tresholds are adv pastebin_line_threshold The maximum number of lines a message may have before it is sent to the pastebin. (default 4 lines) pastebin_trigger A string of characters (e.g. "!paste ") which if detected at the start of a message, always sends the message to the pastebin, regardless of length. (default: not set) pastebin_expire_after Number of hours after which to expire (remove) a paste, defaults to 24. Set to 0 to store pastes permanently on disk. - pastebin_ports List of ports to run the HTTP server on, same format as mod_httpserver's http_ports[^1] - pastebin_url Base URL to display for pastebin links, must end with / and redirect to Prosody's built-in HTTP server[^2] # Compatibility - ------ ------- - trunk Works + ------ --------------------- + trunk Works as of 25-06-13 + 13 Works 0.12 Works - 0.11 Works - 0.10 Works - 0.9 Works - 0.8 Works - ------ ------- + ------ --------------------- # Todo - Maximum paste length - Web interface to submit pastes? - -[^1]: As of Prosody 0.9, `pastebin_ports` is replaced by `http_ports`, - see [Prosody HTTP server documentation](https://prosody.im/doc/http) - -[^2]: See also - [http_external_url](https://prosody.im/doc/http#external_url)
author Menel <menel@snikket.de>
date Fri, 13 Jun 2025 11:39:58 +0200
parents a0429c322454
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
6105
a0429c322454 mod_muc_activity: create module
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
1 local os_time = os.time;
a0429c322454 mod_muc_activity: create module
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
2 local math_floor = math.floor;
a0429c322454 mod_muc_activity: create module
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
3 local store = module:open_store("muc_activity", "keyval");
a0429c322454 mod_muc_activity: create module
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
4
a0429c322454 mod_muc_activity: create module
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
5 local accumulator = {};
a0429c322454 mod_muc_activity: create module
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
6
a0429c322454 mod_muc_activity: create module
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
7 local field_var = "{urn:xmpp:muc-activity}message-activity";
a0429c322454 mod_muc_activity: create module
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
8
a0429c322454 mod_muc_activity: create module
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
9 module:hook("muc-room-destroyed", function (event)
a0429c322454 mod_muc_activity: create module
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
10 local jid = event.room.jid;
a0429c322454 mod_muc_activity: create module
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
11 module:log("debug", "deleting activity data for destroyed muc %s", jid);
a0429c322454 mod_muc_activity: create module
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
12 store:set_keys(jid, {});
a0429c322454 mod_muc_activity: create module
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
13 accumulator[jid] = nil;
a0429c322454 mod_muc_activity: create module
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
14 end)
a0429c322454 mod_muc_activity: create module
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
15
a0429c322454 mod_muc_activity: create module
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
16 module:hook("muc-occupant-groupchat", function (event)
a0429c322454 mod_muc_activity: create module
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
17 local jid = event.room.jid;
a0429c322454 mod_muc_activity: create module
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
18 if not event.room:get_persistent() then
a0429c322454 mod_muc_activity: create module
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
19 -- we do not count stanzas in non-persistent rooms
a0429c322454 mod_muc_activity: create module
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
20 if accumulator[jid] then
a0429c322454 mod_muc_activity: create module
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
21 -- if we have state for the room, drop it.
a0429c322454 mod_muc_activity: create module
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
22 store:set_keys(jid, {});
a0429c322454 mod_muc_activity: create module
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
23 accumulator[jid] = nil;
a0429c322454 mod_muc_activity: create module
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
24 end
a0429c322454 mod_muc_activity: create module
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
25
a0429c322454 mod_muc_activity: create module
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
26 return
a0429c322454 mod_muc_activity: create module
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
27 end
a0429c322454 mod_muc_activity: create module
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
28
a0429c322454 mod_muc_activity: create module
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
29 if event.stanza:get_child("body") == nil then
a0429c322454 mod_muc_activity: create module
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
30 -- we do not count stanzas without body.
a0429c322454 mod_muc_activity: create module
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
31 return
a0429c322454 mod_muc_activity: create module
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
32 end
a0429c322454 mod_muc_activity: create module
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
33
a0429c322454 mod_muc_activity: create module
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
34 module:log("debug", "counting stanza for MUC activity in %s", jid);
a0429c322454 mod_muc_activity: create module
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
35 accumulator[jid] = (accumulator[jid] or 0) + 1;
a0429c322454 mod_muc_activity: create module
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
36 end)
a0429c322454 mod_muc_activity: create module
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
37
a0429c322454 mod_muc_activity: create module
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
38 local function shift(data)
a0429c322454 mod_muc_activity: create module
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
39 for i = 1, 23 do
a0429c322454 mod_muc_activity: create module
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
40 data[i] = data[i+1]
a0429c322454 mod_muc_activity: create module
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
41 end
a0429c322454 mod_muc_activity: create module
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
42 end
a0429c322454 mod_muc_activity: create module
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
43
a0429c322454 mod_muc_activity: create module
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
44 local function accumulate(data)
a0429c322454 mod_muc_activity: create module
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
45 if data == nil then
a0429c322454 mod_muc_activity: create module
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
46 return 0;
a0429c322454 mod_muc_activity: create module
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
47 end
a0429c322454 mod_muc_activity: create module
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
48 local accum = 0;
a0429c322454 mod_muc_activity: create module
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
49 for i = 1, 24 do
a0429c322454 mod_muc_activity: create module
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
50 local v = data[i];
a0429c322454 mod_muc_activity: create module
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
51 if v ~= nil then
a0429c322454 mod_muc_activity: create module
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
52 accum = accum + v
a0429c322454 mod_muc_activity: create module
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
53 end
a0429c322454 mod_muc_activity: create module
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
54 end
a0429c322454 mod_muc_activity: create module
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
55 return accum;
a0429c322454 mod_muc_activity: create module
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
56 end
a0429c322454 mod_muc_activity: create module
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
57
a0429c322454 mod_muc_activity: create module
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
58 module:hourly("muc-activity-shift", function ()
a0429c322454 mod_muc_activity: create module
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
59 module:log("info", "shifting MUC activity store forward by one hour");
a0429c322454 mod_muc_activity: create module
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
60 for jid in store:users() do
a0429c322454 mod_muc_activity: create module
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
61 local data = store:get(jid);
a0429c322454 mod_muc_activity: create module
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
62 local new = accumulator[jid] or 0;
a0429c322454 mod_muc_activity: create module
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
63 shift(data);
a0429c322454 mod_muc_activity: create module
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
64 data[24] = new;
a0429c322454 mod_muc_activity: create module
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
65 accumulator[jid] = nil;
a0429c322454 mod_muc_activity: create module
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
66 store:set(jid, data);
a0429c322454 mod_muc_activity: create module
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
67 end
a0429c322454 mod_muc_activity: create module
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
68
a0429c322454 mod_muc_activity: create module
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
69 -- All remaining entries in the accumulator are non-existent in the store,
a0429c322454 mod_muc_activity: create module
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
70 -- otherwise they would have been removed earlier.
a0429c322454 mod_muc_activity: create module
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
71 for jid, count in pairs(accumulator) do
a0429c322454 mod_muc_activity: create module
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
72 store:set(jid, { [24] = count });
a0429c322454 mod_muc_activity: create module
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
73 end
a0429c322454 mod_muc_activity: create module
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
74 accumulator = {};
a0429c322454 mod_muc_activity: create module
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
75 end)
a0429c322454 mod_muc_activity: create module
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
76
a0429c322454 mod_muc_activity: create module
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
77 module:hook("muc-disco#info", function(event)
a0429c322454 mod_muc_activity: create module
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
78 local room = event.room;
a0429c322454 mod_muc_activity: create module
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
79 local jid = room.jid;
a0429c322454 mod_muc_activity: create module
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
80 if not room:get_persistent() or not room:get_public() or room:get_members_only() or room:get_password() ~= nil then
a0429c322454 mod_muc_activity: create module
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
81 module:log("debug", "%s is not persistent or not public, not injecting message activity", jid);
a0429c322454 mod_muc_activity: create module
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
82 return;
a0429c322454 mod_muc_activity: create module
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
83 end
a0429c322454 mod_muc_activity: create module
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
84 local count = accumulate(store:get(jid)) / 24.0;
a0429c322454 mod_muc_activity: create module
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
85 table.insert(event.form, { name = field_var, label = "Message activity" });
a0429c322454 mod_muc_activity: create module
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
86 event.formdata[field_var] = tostring(count);
a0429c322454 mod_muc_activity: create module
Jonas Schäfer <jonas@wielicki.name>
parents:
diff changeset
87 end);