import { AutoRole } from '../database/entities/AutoRole';
import { LeaderboardExclusion } from '../database/entities/LeaderboardExclusion';
import { Client } from 'discord.js';
export declare function addVoiceMinutesTotal(guildId: string, userId: string, minutes: number): Promise<void>;
export declare function updateMaxSession(guildId: string, userId: string, minutes: number): Promise<void>;
export declare function getVoiceTotal(guildId: string, userId: string): Promise<number>;
export declare function getMaxSession(guildId: string, userId: string): Promise<number>;
export declare function getAutoRoles(guildId: string): Promise<AutoRole[]>;
export declare function addAutoRole(guildId: string, hoursRequired: number, roleId: string): Promise<void>;
export declare function removeAutoRole(id: number): Promise<boolean>;
export declare function getEligibleAutoRoles(guildId: string, hoursVoice: number): Promise<AutoRole[]>;
export interface LeaderboardEntry {
    rank: number;
    userId: string;
    value: number;
}
export declare function getTopCoins(guildId: string, limit?: number, excludeRoleId?: string): Promise<LeaderboardEntry[]>;
export declare function getTopVoiceTotal(guildId: string, limit?: number): Promise<LeaderboardEntry[]>;
export declare function getTopVoiceSession(guildId: string, limit?: number): Promise<LeaderboardEntry[]>;
export declare function getTopMessages(guildId: string, limit?: number): Promise<LeaderboardEntry[]>;
export declare function addLeaderboardExclusion(guildId: string, userId: string): Promise<void>;
export declare function removeLeaderboardExclusion(guildId: string, userId: string): Promise<boolean>;
export declare function isLeaderboardExcluded(guildId: string, userId: string): Promise<boolean>;
export declare function getLeaderboardExclusions(guildId: string): Promise<LeaderboardExclusion[]>;
export declare function getVoiceTotalLeader(guildId: string): Promise<string | null>;
export declare function getVoiceSessionLeader(guildId: string): Promise<string | null>;
export declare function getCoinLeader(guildId: string): Promise<string | null>;
/**
 * Updates voice leader role assignment.
 * Assigns the configured role to Top 1 in Total Voice AND Top 1 in Session.
 * Removes the role from anyone who previously had it but is no longer a leader.
 */
export declare function updateVoiceLeaders(client: Client): Promise<void>;
export declare const voiceSessions: Map<string, number>;
export declare const voiceCheckpoints: Map<string, number>;
export declare function saveSessionStart(userId: string, startTime: number): Promise<void>;
export declare function updateSessionCheckpoint(userId: string, checkpointTime: number): Promise<void>;
export declare function clearSessionStart(userId: string): Promise<void>;
export declare function restoreVoiceSessions(client: Client): Promise<number>;
export declare function checkpointAllSessions(client: Client): Promise<number>;
/**
 * Partial reward for the session.
 * - Rewards delta since last checkpoint.
 * - Updates Max Session using total duration since START.
 * - Updates Checkpoint to NOW.
 * - Does NOT change Start Time.
 */
export declare function checkpointSession(client: Client, guildId: string, userId: string, now: number): Promise<void>;
//# sourceMappingURL=voiceService.d.ts.map