Combina la Twitch Clips API con Channel Points y Minecraft para crear un sistema donde los viewers guardan clips, los clips destacados dan recompensas al streamer y jugadores, y los mejores se comparten automaticamente en Discord. Un sistema que convierte buenos momentos en engagement real.
1. Viewer redime "Guardar Momento" (Channel Point, 500 pts)
2. Bot crea clip via Twitch Clips API
3. Si el clip supera X views en 1 hora -> "Clip Destacado"
4. Clip Destacado:
- Se publica en #clips de Discord automaticamente
- El viewer que lo creo recibe 1000 pts bonus
- Si hay jugador vinculado, recibe items en MC (diamantes, etc.)
- Se propone para shorts en TikTokimport { ApiClient } from '@twurple/api';
import { AppTokenAuthProvider } from '@twurple/auth';
const authProvider = new AppTokenAuthProvider(CLIENT_ID, CLIENT_SECRET);
const apiClient = new ApiClient({ authProvider });
// Crear clip
async function createClip(broadcasterId) {
try {
const clip = await apiClient.clips.createClip({
channel: broadcasterId,
hasDelay: false // sin delay: captura el momento actual
});
// Twitch devuelve el ID del clip, el URL tarda ~1 min en estar disponible
console.log('Clip creado, ID:', clip.id);
return clip;
} catch (err) {
console.error('Error creando clip:', err.message);
return null;
}
}
// Obtener info del clip (views, titulo, etc.)
async function getClipInfo(clipId) {
const clip = await apiClient.clips.getClipById(clipId);
return {
id: clip.id,
url: clip.url,
views: clip.views,
title: clip.title,
createdAt: clip.creationDate,
thumbnail: clip.thumbnailUrl,
};
}// Cada 30 minutos, revisar clips de la ultima hora
// Si superan 50 views -> publicar en Discord
async function checkHighlightedClips() {
const pending = await db.all(
'SELECT * FROM saved_clips WHERE created_at > datetime("now", "-1 hour") AND featured = 0'
);
for (const clip of pending) {
const info = await getClipInfo(clip.twitch_clip_id);
if (info.views >= 50) {
// Marcar como destacado
await db.run('UPDATE saved_clips SET featured = 1 WHERE id = ?', clip.id);
// Publicar en Discord
const channel = discordClient.channels.cache.get(CLIPS_CHANNEL_ID);
await channel.send({
content: Clip destacado de !,
embeds: [{
title: info.title,
url: info.url,
image: { url: info.thumbnail },
fields: [{ name: 'Vistas', value: info.views.toString() }]
}]
});
// Recompensar al viewer en MC si tiene cuenta vinculada
const mcName = await getLinkedMCAccount(clip.viewer_discord_id);
if (mcName) {
await rcon.send(give diamond 5);
await rcon.send( itle title {"text":"Tu clip fue destacado!","color":"gold"});
}
}
}
}
setInterval(checkHighlightedClips, 30 * 60 * 1000);Cuando un clip se vuelve viral, crea un momento especial en el servidor:
// Anunciar clip viral a todos los jugadores en linea
await rcon.send(roadcast &6&lCLIP VIRAL: &f capturo un momento epico!);
await rcon.send(roadcast &7Ver clip: &b);
// Dar reward a todos los jugadores en linea como celebracion
await rcon.send('give @a experience_bottle 3');Guia de la integracion Twitch completa con codigo de EventSub, RCON y Discord.
Ver Guia Completa