Support for polls (can be created by room admins)

This commit is contained in:
N Pex 2022-05-03 09:40:02 +00:00
parent 2a064f4a06
commit 0d1ac1d441
11 changed files with 676 additions and 6 deletions

View file

@ -180,6 +180,51 @@ class Util {
return this.sendMessage(matrixClient, roomId, "m.reaction", content);
}
createPoll(matrixClient, roomId, question, answers, isDisclosed) {
var idx = 0;
let answerData = answers.map(a => {
idx++;
return {id: "" + idx, 'org.matrix.msc1767.text': a.text }
});
const content = {
'org.matrix.msc3381.poll.start': {
question: {
'org.matrix.msc1767.text': question,
body: question
},
kind: isDisclosed ? "org.matrix.msc3381.poll.disclosed" : "org.matrix.msc3381.poll.undisclosed",
max_selections: 1,
answers: answerData
},
};
return this.sendMessage(matrixClient, roomId, "org.matrix.msc3381.poll.start", content);
}
closePoll(matrixClient, roomId, event) {
const content = {
'm.relates_to': {
rel_type: 'm.reference',
event_id: event.getId()
},
'org.matrix.msc3381.poll.end': {
},
};
return this.sendMessage(matrixClient, roomId, "org.matrix.msc3381.poll.end", content);
}
sendPollAnswer(matrixClient, roomId, answers, event) {
const content = {
'm.relates_to': {
rel_type: 'm.reference',
event_id: event.getId()
},
'org.matrix.msc3381.poll.response': {
answers: answers
},
};
return this.sendMessage(matrixClient, roomId, "org.matrix.msc3381.poll.response", content);
}
sendMessage(matrixClient, roomId, eventType, content) {
return new Promise((resolve, reject) => {
matrixClient.sendEvent(roomId, eventType, content, undefined, undefined)