{t('title')}
+{t('info', { server: 'Nova WoW' })}
+{t('info', { server: 'Nova WoW' })}
+{t('noSites')}
+ + return ( + <> +{s.name}
++ {s.points} {t('pv')} +
+ {canVote ? ( + + ) : ( + + {t('vote')} + + )} +{message.text}
} + {!canVote &&{t('loginToVote')}
} + > + ) +} diff --git a/web-next/lib/vote.ts b/web-next/lib/vote.ts new file mode 100644 index 0000000..4957fde --- /dev/null +++ b/web-next/lib/vote.ts @@ -0,0 +1,68 @@ +import type { RowDataPacket } from 'mysql2' +import { db, DB } from './db' + +const COOLDOWN_MS = (12 * 60 + 30) * 60 * 1000 // 12h 30m + +export interface VoteSite { + id: number + name: string + url: string + image_url: string + points: number +} + +export interface VoteResult { + success: boolean + error?: string + points?: number + siteName?: string + hours?: number + minutes?: number +} + +export async function getVoteSites(): Promise