⭐ Vota y gana

Así crecen los bots en las listas grandes: tus usuarios votan cada 12 h a cambio de una recompensa, subes en el ranking semanal y más gente te descubre. En DisHub lo montas en 10 minutos.

1

Consigue tu token

Entra en la ficha de tu bot → 📊 Estadísticas → Para desarrolladores y genera tu token. Pon ahí también la URL de tu webhook.

Ir a mis bots
2

Da la recompensa

Cuando alguien vota, avisamos a tu webhook con su ID de Discord al momento. Tú le das lo que quieras.

3

Pide el voto

Añade un comando /votar con el botón. Enlace corto para tu bot:

https://dishublist.com/votar/ID_DE_TU_BOT

🎁 Ideas de recompensa

🪙
Monedas o XP

La más usada: +500 monedas por voto en bots de economía.

💎
Premium 12 h

Desbloquea comandos premium hasta el siguiente voto.

🎟️
Rol de votante

Un rol en tu servidor de soporte durante 12 h.

🎁
Cajas o sorteos

Cada voto = una entrada al sorteo semanal.

💻 Código listo para copiar

discord.js

1. Recibir los votos (webhook)
// npm i express
import express from "express";

const app = express();
app.use(express.json());

// Tu token de DisHub (📊 Estadísticas de tu bot → Para desarrolladores)
const DISHUB_TOKEN = process.env.DISHUB_TOKEN;

app.post("/dishub/votos", async (req, res) => {
  // Comprueba que el aviso viene de DisHub
  if (req.headers.authorization !== DISHUB_TOKEN) return res.sendStatus(401);

  const { user } = req.body; // ID de Discord de quien ha votado
  await darRecompensa(user);  // 👈 tus monedas, XP, premium 12 h…

  // Opcional: dale las gracias por MD
  const u = await client.users.fetch(user).catch(() => null);
  u?.send("¡Gracias por votar en DisHub! 🎁 Ya tienes tu recompensa.").catch(() => {});

  res.sendStatus(200);
});

app.listen(3000);
2. Comando /votar con botón
// /votar → botón para votar + comprueba si ya ha votado
import { ActionRowBuilder, ButtonBuilder, ButtonStyle, SlashCommandBuilder } from "discord.js";

export const data = new SlashCommandBuilder().setName("votar").setDescription("Vota por el bot y gana recompensas");

export async function execute(interaction) {
  const res = await fetch(
    `https://dishublist.com/api/v1/bots/${interaction.client.user.id}/votes/${interaction.user.id}`,
    { headers: { Authorization: process.env.DISHUB_TOKEN } },
  ).then((r) => r.json()).catch(() => ({}));

  const boton = new ButtonBuilder()
    .setLabel("Votar en DisHub")
    .setEmoji("⭐")
    .setStyle(ButtonStyle.Link)
    .setURL(`https://dishublist.com/votar/${interaction.client.user.id}`);

  await interaction.reply({
    content: res.voted
      ? "✅ Ya has votado. Podrás volver a votar <t:" + Math.floor(new Date(res.nextVoteAt) / 1000) + ":R>."
      : "⭐ Vota por el bot cada 12 h y gana recompensas:",
    components: [new ActionRowBuilder().addComponents(boton)],
    ephemeral: true,
  });
}

Python (discord.py)

Webhook + botón para /votar
# pip install aiohttp  (con discord.py)
import os, discord
from aiohttp import web

DISHUB_TOKEN = os.environ["DISHUB_TOKEN"]

async def votos(request: web.Request):
    if request.headers.get("Authorization") != DISHUB_TOKEN:
        return web.Response(status=401)
    data = await request.json()
    user_id = int(data["user"])          # ID de Discord de quien ha votado
    await dar_recompensa(user_id)        # 👈 tu recompensa
    return web.Response(status=200)

async def arrancar_webhook():
    app = web.Application()
    app.router.add_post("/dishub/votos", votos)
    runner = web.AppRunner(app)
    await runner.setup()
    await web.TCPSite(runner, "0.0.0.0", 3000).start()

# Botón para tu comando /votar
class Votar(discord.ui.View):
    def __init__(self, bot_id: int):
        super().__init__()
        self.add_item(discord.ui.Button(label="Votar en DisHub", emoji="⭐",
                      url=f"https://dishublist.com/votar/{bot_id}"))

Lo que recibe tu webhook

POST https://tu-bot.com/dishub/votos
Authorization: <tu token de DisHub>

{
  "type": "upvote",
  "bot": "ID de tu bot",
  "user": "ID de Discord de quien vota",
  "username": "Pepe",
  "url": "https://dishublist.com/bots/…",
  "votedAt": "2026-11-12T18:00:00.000Z"
}

🔔 Quien activa los recordatorios recibe un MD nuestro a las 12 h para volver a votar: más votos para ti sin hacer nada. ¿Más detalles? Documentación de la API.