websocket powered visualisation
This commit is contained in:
parent
25507a8e08
commit
9c8de9a8f2
22
index.html
Normal file
22
index.html
Normal file
@ -0,0 +1,22 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<link rel="stylesheet" href="main.css" />
|
||||
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
|
||||
<script src="main.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<main id="educbot-status">
|
||||
<p v-if="connection">Connecté !</p>
|
||||
<p v-else="">Non connecté !</p>
|
||||
<ul>
|
||||
<li v-for="(value, key) in reactions">
|
||||
<img src="https://discordapp.com/assets/08c0a077780263f3df97613e58e71744.svg" width="30px" />
|
||||
{{value.prefix}}
|
||||
<span v-for="person in value.people">{{person}}</span>
|
||||
</li>
|
||||
</ul>
|
||||
</main>
|
||||
</body>
|
||||
</html>
|
16
index.js
16
index.js
@ -62,8 +62,16 @@ const wsActions = {
|
||||
}
|
||||
function wsInit (data, channel, ws) {
|
||||
channel.ws_clients.push(ws)
|
||||
wsSendState(channel, ws)
|
||||
}
|
||||
function wsSendState(channel, ws) {
|
||||
ws.send(JSON.stringify(channel.reactions))
|
||||
}
|
||||
function wsSendStateAll(channel) {
|
||||
for (var index in channel.ws_clients) {
|
||||
wsSendState(channel, channel.ws_clients[index])
|
||||
}
|
||||
}
|
||||
function wsAddReaction (data, channel, ws) {
|
||||
if (!('reaction' in data)) {
|
||||
ws.send('{"error":"No reaction supplied", "action":"add"}')
|
||||
@ -173,13 +181,17 @@ client.on('message', msg => {
|
||||
if(msg.content === '!educpop-reset') {
|
||||
educpopReset
|
||||
reply(channel)
|
||||
} else if (msg.content === '!educpop-list') {
|
||||
}
|
||||
else if (msg.content === '!educpop-list') {
|
||||
var text = 'Tapez simplement le mot-clé ci-dessous pour être comptabilisé. Tapez un - immédiatement suivi du mot-clé pour être retiré du compte : -oui par exemple !'
|
||||
for (var index in reactions) {
|
||||
text += '\n' + reactions[index].prefix + index + ' : ' + reactions[index].description
|
||||
}
|
||||
msg.reply(text)
|
||||
}
|
||||
else if (msg.content === '!educpop-web') {
|
||||
msg.reply('?channel_id=' + msg.channel.id + '&web_token=' + channel.web_token)
|
||||
}
|
||||
/* save and ignore own messages */
|
||||
else if(msg.author.username === process.env.BOT_USERNAME){
|
||||
if (msg.content.startsWith(':')) /* Save if its educpop summary */
|
||||
@ -204,6 +216,7 @@ client.on('message', msg => {
|
||||
|
||||
|
||||
/* Recap educ-pop state on discord. Delete action message and last educ-pop recap */
|
||||
/* This function refresh the display */
|
||||
function reply (channel) {
|
||||
var text = ''
|
||||
for (var index in channel.reactions) {
|
||||
@ -215,6 +228,7 @@ function reply (channel) {
|
||||
}
|
||||
if(channel.last_msg) channel.last_msg.delete()
|
||||
channel.discord_channel.send(text)
|
||||
wsSendStateAll(channel)
|
||||
}
|
||||
|
||||
|
||||
|
46
main.js
Normal file
46
main.js
Normal file
@ -0,0 +1,46 @@
|
||||
window.onload = function () {
|
||||
var app = new Vue({
|
||||
el: '#educbot-status',
|
||||
data: {
|
||||
web_token: '',
|
||||
channel_id: '',
|
||||
ws: null,
|
||||
ws_url: 'ws://localhost:8080',
|
||||
reactions: {},
|
||||
connection: false,
|
||||
},
|
||||
created: function () {
|
||||
var url = new URL(location.href)
|
||||
this.web_token = url.searchParams.get('web_token')
|
||||
this.channel_id = url.searchParams.get('channel_id')
|
||||
if (this.web_token == '' || this.channel_id == '') {
|
||||
console.err('missing parameters to vue instance')
|
||||
return
|
||||
}
|
||||
this.ws = new WebSocket(this.ws_url)
|
||||
this.ws.onmessage = (data) => {
|
||||
this.reactions = JSON.parse(data.data)
|
||||
console.log(this.reactions)
|
||||
}
|
||||
this.ws.onopen = () => {
|
||||
this.sendWs('init')
|
||||
this.connection = true
|
||||
}
|
||||
this.ws.onclose = () => {
|
||||
this.connection = false
|
||||
}
|
||||
this.ws.onerror = () => {
|
||||
this.connection = false
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
sendWs: function (action) {
|
||||
this.ws.send(JSON.stringify({
|
||||
'action': action,
|
||||
'web_token': this.web_token,
|
||||
'channel': this.channel_id,
|
||||
}))
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
Loading…
Reference in New Issue
Block a user