Let viewers set a per-streamer display name
All checks were successful
CI/CD Pipeline / build-and-deploy (push) Successful in 29s
All checks were successful
CI/CD Pipeline / build-and-deploy (push) Successful in 29s
Viewers can type a custom name shown to the streamer instead of their Google account name. It's saved per (streamer, viewer) pair in SQLite and pre-filled on future visits to the same send link. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
parent
ed2b051c91
commit
fab55cde1d
4 changed files with 76 additions and 5 deletions
27
server.js
27
server.js
|
|
@ -7,7 +7,13 @@ const { createServer } = require('http');
|
|||
const { Server } = require('socket.io');
|
||||
const { OAuth2Client } = require('google-auth-library');
|
||||
const { execFile } = require('child_process');
|
||||
const { findStreamerByOverlayToken, findStreamerBySenderToken, getOrCreateStreamerByGoogle } = require('./db');
|
||||
const {
|
||||
findStreamerByOverlayToken,
|
||||
findStreamerBySenderToken,
|
||||
getOrCreateStreamerByGoogle,
|
||||
getViewerName,
|
||||
setViewerName,
|
||||
} = require('./db');
|
||||
|
||||
const PORT = process.env.PORT || 3000;
|
||||
const GOOGLE_CLIENT_ID = process.env.GOOGLE_CLIENT_ID;
|
||||
|
|
@ -113,6 +119,16 @@ app.get('/api/dashboard', requireAuth, (req, res) => {
|
|||
});
|
||||
});
|
||||
|
||||
app.get('/api/viewer-name', requireAuth, (req, res) => {
|
||||
const streamer = findStreamerBySenderToken(req.query.token);
|
||||
if (!streamer) {
|
||||
return res.status(404).json({ error: 'unknown link' });
|
||||
}
|
||||
const user = req.session.user;
|
||||
const name = getViewerName(streamer.id, user.id) || user.name;
|
||||
res.json({ name });
|
||||
});
|
||||
|
||||
app.get('/overlay/:token', (req, res) => {
|
||||
res.sendFile(path.join(__dirname, 'public', 'overlay.html'));
|
||||
});
|
||||
|
|
@ -159,7 +175,7 @@ io.on('connection', (socket) => {
|
|||
console.log(`[socket] disconnected id=${socket.id} reason=${reason}`);
|
||||
});
|
||||
|
||||
socket.on('send_message', ({ token: senderToken, text } = {}) => {
|
||||
socket.on('send_message', ({ token: senderToken, text, name } = {}) => {
|
||||
const streamer = findStreamerBySenderToken(senderToken);
|
||||
if (!streamer) {
|
||||
socket.emit('send_error', 'Unknown link');
|
||||
|
|
@ -183,11 +199,14 @@ io.on('connection', (socket) => {
|
|||
}
|
||||
|
||||
const message = text.trim().slice(0, 500);
|
||||
const displayName = (typeof name === 'string' && name.trim().slice(0, 60)) || user.name;
|
||||
setViewerName(streamer.id, user.id, displayName);
|
||||
|
||||
const room = `streamer-${streamer.id}`;
|
||||
console.log(`[broadcast] streamer=${streamer.id} "${message}"`);
|
||||
console.log(`[broadcast] streamer=${streamer.id} from="${displayName}" "${message}"`);
|
||||
io.to(room).emit('display_message', {
|
||||
text: message,
|
||||
from: user.name,
|
||||
from: displayName,
|
||||
at: Date.now(),
|
||||
});
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue