Mercurial > prosody-modules
comparison mod_muc_limits/mod_muc_limits.lua @ 3417:1534d0715d35
mod_muc_limits: Add support for new MUC API in Prosody 0.11
| author | Kim Alvefur <zash@zash.se> |
|---|---|
| date | Sun, 23 Dec 2018 21:46:06 +0100 |
| parents | 6a3060d5e85d |
| children | 9be9dd434813 |
comparison
equal
deleted
inserted
replaced
| 3416:c6dd65354db0 | 3417:1534d0715d35 |
|---|---|
| 1 | 1 |
| 2 local mod_muc = module:depends"muc"; | 2 local mod_muc = module:depends"muc"; |
| 3 local rooms = rawget(mod_muc, "rooms"); -- Old MUC API | 3 local rooms = rawget(mod_muc, "rooms"); -- Old MUC API |
| 4 if not rooms then | |
| 5 error "Not compatible with 0.11 MUC API" | |
| 6 end | |
| 7 | 4 |
| 8 local jid_split, jid_bare = require "util.jid".split, require "util.jid".bare; | 5 local jid_split, jid_bare = require "util.jid".split, require "util.jid".bare; |
| 9 local st = require "util.stanza"; | 6 local st = require "util.stanza"; |
| 10 local new_throttle = require "util.throttle".create; | 7 local new_throttle = require "util.throttle".create; |
| 11 local t_insert, t_concat = table.insert, table.concat; | 8 local t_insert, t_concat = table.insert, table.concat; |
| 29 local origin, stanza = event.origin, event.stanza; | 26 local origin, stanza = event.origin, event.stanza; |
| 30 if stanza.name == "presence" and stanza.attr.type == "unavailable" then -- Don't limit room leaving | 27 if stanza.name == "presence" and stanza.attr.type == "unavailable" then -- Don't limit room leaving |
| 31 return; | 28 return; |
| 32 end | 29 end |
| 33 local dest_room, dest_host, dest_nick = jid_split(stanza.attr.to); | 30 local dest_room, dest_host, dest_nick = jid_split(stanza.attr.to); |
| 34 local room = rooms[dest_room.."@"..dest_host]; | 31 local room = event.room or rooms[dest_room.."@"..dest_host]; |
| 35 if not room then return; end | 32 if not room then return; end |
| 36 local from_jid = stanza.attr.from; | 33 local from_jid = stanza.attr.from; |
| 37 local occupant = room._occupants[room._jid_nick[from_jid]]; | 34 local occupant = room._occupants[room._jid_nick[from_jid]]; |
| 38 if (occupant and occupant.affiliation) or (not(occupant) and room._affiliations[jid_bare(from_jid)]) then | 35 if (occupant and occupant.affiliation) or (not(occupant) and room._affiliations[jid_bare(from_jid)]) then |
| 39 module:log("debug", "Skipping stanza from affiliated user..."); | 36 module:log("debug", "Skipping stanza from affiliated user..."); |
| 80 for room_jid, room in pairs(rooms) do | 77 for room_jid, room in pairs(rooms) do |
| 81 room.throttle = nil; | 78 room.throttle = nil; |
| 82 end | 79 end |
| 83 end | 80 end |
| 84 | 81 |
| 85 module:hook("message/bare", handle_stanza, 501); | 82 if rooms then |
| 86 module:hook("message/full", handle_stanza, 501); | 83 module:hook("message/bare", handle_stanza, 501); |
| 87 module:hook("presence/bare", handle_stanza, 501); | 84 module:hook("message/full", handle_stanza, 501); |
| 88 module:hook("presence/full", handle_stanza, 501); | 85 module:hook("presence/bare", handle_stanza, 501); |
| 86 module:hook("presence/full", handle_stanza, 501); | |
| 87 else | |
| 88 module:hook("muc-occupant-pre-join", handle_stanza); | |
| 89 module:hook("muc-occupant-pre-change", handle_stanza); | |
| 90 module:hook("muc-occupant-groupchat", handle_stanza); | |
| 91 end |
