@@ -43,36 +43,36 @@ export class InviteMeCommand implements ICommand {
43
43
44
44
for ( const aud of conference . storedAuditoriums ) {
45
45
addToGroup ( "auditorium" , aud . roomId ) ;
46
- const audId = await aud . getId ( ) ;
47
- addToGroup ( audId + ":*" , aud . roomId ) ;
48
- addToGroup ( audId + ":public" , aud . roomId ) ;
46
+ const audSlug = await aud . getSlug ( ) ;
47
+ addToGroup ( audSlug + ":*" , aud . roomId ) ;
48
+ addToGroup ( audSlug + ":public" , aud . roomId ) ;
49
49
addToGroup ( "public" , aud . roomId ) ;
50
50
addToGroup ( "*" , aud . roomId ) ;
51
51
52
52
// Auditoriums have a wrapping space, which should be auto-invited if needed.
53
53
const space = await aud . getAssociatedSpace ( ) ;
54
- addToGroup ( audId + ":*" , space . roomId ) ;
55
- addToGroup ( audId + ":public" , space . roomId ) ;
56
- addToGroup ( audId + ":space" , space . roomId ) ;
54
+ addToGroup ( audSlug + ":*" , space . roomId ) ;
55
+ addToGroup ( audSlug + ":public" , space . roomId ) ;
56
+ addToGroup ( audSlug + ":space" , space . roomId ) ;
57
57
addToGroup ( "public" , space . roomId ) ;
58
58
addToGroup ( "*" , space . roomId ) ;
59
59
}
60
60
61
61
for ( const audBack of conference . storedAuditoriumBackstages ) {
62
62
addToGroup ( "auditorium_backstage" , audBack . roomId ) ;
63
- const audId = await audBack . getId ( ) ;
64
- addToGroup ( audId + ":*" , audBack . roomId ) ;
65
- addToGroup ( audId + ":private" , audBack . roomId ) ;
63
+ const audSlug = await audBack . getSlug ( ) ;
64
+ addToGroup ( audSlug + ":*" , audBack . roomId ) ;
65
+ addToGroup ( audSlug + ":private" , audBack . roomId ) ;
66
66
addToGroup ( "private" , audBack . roomId ) ;
67
67
addToGroup ( "*" , audBack . roomId ) ;
68
68
}
69
69
70
70
for ( const talk of conference . storedTalks ) {
71
71
addToGroup ( "talk" , talk . roomId ) ;
72
- const audId = await talk . getAuditoriumId ( ) ;
73
- addToGroup ( audId + ":talk" , talk . roomId ) ;
74
- addToGroup ( audId + ":*" , talk . roomId ) ;
75
- addToGroup ( audId + ":private" , talk . roomId ) ;
72
+ const audSlug = await conference . getAuditorium ( await talk . getAuditoriumId ( ) ) . getSlug ( ) ;
73
+ addToGroup ( audSlug + ":talk" , talk . roomId ) ;
74
+ addToGroup ( audSlug + ":*" , talk . roomId ) ;
75
+ addToGroup ( audSlug + ":private" , talk . roomId ) ;
76
76
addToGroup ( "private" , talk . roomId ) ;
77
77
addToGroup ( "*" , talk . roomId ) ;
78
78
}
@@ -86,14 +86,35 @@ export class InviteMeCommand implements ICommand {
86
86
return groups ;
87
87
}
88
88
89
+ /**
90
+ * Render a (somewhat) pretty list of group names.
91
+ */
92
+ private prettyGroupNameList ( roomGroups : Map < string , Set < string > > ) {
93
+ const bySection = new Map < string , string [ ] > ( ) ;
94
+
95
+ // organise the groups into sections
96
+ Array . from ( roomGroups . keys ( ) ) . forEach ( group => {
97
+ const section = group . split ( ":" ) [ 0 ] ;
98
+ if ( ! bySection . has ( section ) ) {
99
+ bySection . set ( section , [ ] ) ;
100
+ }
101
+ bySection . get ( section ) ! . push ( group ) ;
102
+ } ) ;
103
+
104
+ const sections = Array . from ( bySection . entries ( ) ) ;
105
+ sections . sort ( ( [ aSection ] , [ bSection ] ) => aSection . localeCompare ( bSection ) ) ;
106
+
107
+ return "<ul>" + sections . map ( ( [ _sectionName , groups ] ) => {
108
+ groups . sort ( ) ;
109
+ return "<li>" + groups . map ( x => `<code>${ x } </code>` ) . join ( ", " ) + "</li>" ;
110
+ } ) . join ( "\n" ) + "</ul>" ;
111
+ }
112
+
89
113
public async run ( conference : Conference , client : MatrixClient , roomId : string , event : any , args : string [ ] ) {
90
114
const roomGroups = await this . roomGroups ( conference ) ;
91
115
92
116
if ( ! args . length ) {
93
- const groupNames = Array . from ( roomGroups . keys ( ) ) ;
94
- groupNames . sort ( ) ;
95
-
96
- return client . replyNotice ( roomId , event , "Please specify a room ID or alias, or one of the room groups: " + groupNames . join ( ", " ) ) ;
117
+ return client . replyHtmlNotice ( roomId , event , "Please specify a room ID or alias, or one of the room groups:\n" + this . prettyGroupNameList ( roomGroups ) ) ;
97
118
}
98
119
const userId = args [ 1 ] || event [ 'sender' ] ;
99
120
0 commit comments