SBCanvas.service.register('leaderboard', {
async init() {
this.data = (await SBCanvas.store.get('leaderboard')) || [];
this.render();
},
onEvent(event, data) {
if (event === 'activity:tip') {
const existing = this.data.find(e => e.username === data.username);
if (existing) {
existing.total += data.amount;
} else {
this.data.push({ username: data.username, total: data.amount });
}
this.data.sort((a, b) => b.total - a.total);
this.data = this.data.slice(0, 10);
this.render();
SBCanvas.store.set('leaderboard', this.data);
}
},
dispose() {
SBCanvas.store.set('leaderboard', this.data);
},
render() {
const el = document.getElementById('leaderboard');
el.innerHTML = '';
for (const entry of this.data) {
const div = document.createElement('div');
div.textContent = `${entry.username}: $${entry.total}`;
el.appendChild(div);
}
}
});