promoteUserFromBadges

Infers a user's class based on their badge(s).

version(TwitchSupport && WithTwitchPlugin)
private pure @safe
promoteUserFromBadges
(,
const string badges
,,
const bool promoteVIPs
)

Parameters

class_ IRCUser.Class

Reference to the user's class.

badges string

String of comma-separated badges.

promoteModerators bool

Whether to promote moderators to operator.

promoteVIPs bool

Whether to promote VIPs to elevated.

Return Value

Type: auto

true if changes were made; false if not.

Examples

1 import lu.conv : toString;
2 
3 {
4     enum badges = "subscriber/12,sub-gift-leader/1";
5     auto class_ = IRCUser.Class.anyone;
6     immutable changed = promoteUserFromBadges(class_, badges, false, false);
7     assert(changed);
8     enum expected = IRCUser.Class.registered;
9     assert((class_ == expected), class_.toString);
10 }
11 {
12     enum badges = "premium/1";
13     auto class_ = IRCUser.Class.anyone;
14     immutable changed = promoteUserFromBadges(class_, badges, false, false);
15     assert(!changed);
16     enum expected = IRCUser.Class.anyone;
17     assert((class_ == expected), class_.toString);
18 }
19 {
20     enum badges = "subscriber/12,vip/1";
21     auto class_ = IRCUser.Class.anyone;
22     immutable changed = promoteUserFromBadges(class_, badges, false, false);
23     assert(changed);
24     enum expected = IRCUser.Class.registered;  // because promoteVIPs false
25     assert((class_ == expected), class_.toString);
26 }
27 {
28     enum badges = "subscriber/12,vip/1";
29     auto class_ = IRCUser.Class.anyone;
30     immutable changed = promoteUserFromBadges(class_, badges, true, true);
31     assert(changed);
32     enum expected = IRCUser.Class.elevated;
33     assert((class_ == expected), class_.toString);
34 }
35 {
36     enum badges = "moderator/1,subscriber/3012";
37     auto class_ = IRCUser.Class.anyone;
38     immutable changed = promoteUserFromBadges(class_, badges, true, true);
39     assert(changed);
40     enum expected = IRCUser.Class.operator;
41     assert((class_ == expected), class_.toString);
42 }
43 {
44     enum badges = "moderator/1,subscriber/3012";
45     auto class_ = IRCUser.Class.anyone;
46     immutable changed = promoteUserFromBadges(class_, badges, false, true);
47     assert(changed);
48     enum expected = IRCUser.Class.registered;
49     assert((class_ == expected), class_.toString);
50 }
51 {
52     enum badges = "broadcaster/1,subscriber/12,partner/1";
53     auto class_ = IRCUser.Class.anyone;
54     immutable changed = promoteUserFromBadges(class_, badges, false, true);
55     assert(changed);
56     enum expected = IRCUser.Class.registered;  // not staff because broadcasters are identified elsewhere
57     assert((class_ == expected), class_.toString);
58 }
59 {
60     enum badges = "moderator/1";  // no comma splitter test
61     auto class_ = IRCUser.Class.anyone;
62     immutable changed = promoteUserFromBadges(class_, badges, true, true);
63     assert(changed);
64     enum expected = IRCUser.Class.operator;
65     assert((class_ == expected), class_.toString);
66 }
67 {
68     enum badges = "subscriber/1";
69     auto class_ = IRCUser.Class.operator;
70     immutable changed = promoteUserFromBadges(class_, badges, true, true);
71     assert(!changed);
72     enum expected = IRCUser.Class.operator;
73     assert((class_ == expected), class_.toString);
74 }
75 {
76     enum badges = string.init;
77     auto class_ = IRCUser.Class.staff;
78     immutable changed = promoteUserFromBadges(class_, badges, true, true);
79     assert(!changed);
80     enum expected = IRCUser.Class.staff;
81     assert((class_ == expected), class_.toString);
82 }
83 {
84     enum badges = string.init;
85     auto class_ = IRCUser.Class.anyone;
86     immutable changed = promoteUserFromBadges(class_, badges, false, false);
87     assert(!changed);
88     enum expected = IRCUser.Class.anyone;
89     assert((class_ == expected), class_.toString);
90 }