Comparison

mod_muc_hats_api/mod_muc_hats_api.lua @ 3947:1f90e333b1d8

mod_muc_hats_api: New API-only module for managing user hats in MUCs
author Matthew Wild <mwild1@gmail.com>
date Thu, 19 Mar 2020 14:39:14 +0000
comparison
equal deleted inserted replaced
3946:2a5b42e4db07 3947:1f90e333b1d8
1 local mod_muc = module:depends("muc");
2
3 function add_user_hat(user_jid, room_jid, hat_id, attachment)
4 local room = mod_muc.get_room_from_jid(room_jid);
5 if not room then
6 return nil, "item-not-found", "no such room";
7 end
8 local user_aff = room:get_affiliation(user_jid);
9 if not user_aff then
10 return nil, "item-not-found", "user not affiliated with room";
11 end
12 local aff_data = room:get_affiliation_data(user_jid) or {};
13 local hats = aff_data.hats;
14 if not hats then
15 hats = {};
16 aff_data.hats = hats;
17 end
18
19 hats[hat_id] = {
20 active = attachment.active;
21 required = attachment.required;
22 title = attachment.title;
23 };
24
25 local ok, err = room:set_affiliation(true, user_jid, user_aff, nil, aff_data);
26 if not ok then
27 return nil, err;
28 end
29 return true;
30 end
31
32 function remove_user_hat(user_jid, room_jid, hat_id)
33 local room = mod_muc.get_room_from_jid(room_jid);
34 if not room then
35 return nil, "item-not-found", "no such room";
36 end
37 local user_aff = room:get_affiliation(user_jid);
38 if not user_aff then
39 return nil, "item-not-found", "user not affiliated with room";
40 end
41 local aff_data = room:get_affiliation_data(user_jid);
42 local hats = aff_data and aff_data.hats;
43 if not hats then
44 return true;
45 end
46
47 hats[hat_id] = nil;
48
49 local ok, err = room:set_affiliation(true, user_jid, user_aff, nil, aff_data);
50 if not ok then
51 return nil, err;
52 end
53 return true;
54 end
55
56 function set_user_hats(user_jid, room_jid, new_hats)
57 local room = mod_muc.get_room_from_jid(room_jid);
58 if not room then
59 return nil, "item-not-found", "no such room";
60 end
61 local user_aff = room:get_affiliation(user_jid);
62 if not user_aff then
63 return nil, "item-not-found", "user not affiliated with room";
64 end
65 local aff_data = room:get_affiliation_data(user_jid) or {};
66
67 aff_data.hats = new_hats;
68
69 local ok, err = room:set_affiliation(true, user_jid, user_aff, nil, aff_data);
70 if not ok then
71 return nil, err;
72 end
73 return true;
74 end
75