Import source: src/types
Import the existing local project snapshot. This commit organizes existing files; it does not represent newly developed functionality.
This commit is contained in:
+250
@@ -0,0 +1,250 @@
|
||||
import type { KVNamespace } from './kv';
|
||||
|
||||
export const BOT_VERSION = "0.9.27";
|
||||
|
||||
export interface ExecutionContext {
|
||||
waitUntil(promise: Promise<unknown>): void;
|
||||
passThroughOnException?(): void;
|
||||
}
|
||||
|
||||
export interface ToolResult {
|
||||
name: string;
|
||||
response: Record<string, unknown>;
|
||||
}
|
||||
|
||||
export type AIEngine = "gemini";
|
||||
export type MessageRole = "user" | "model" | "assistant" | "system" | "function";
|
||||
export type ChatType = "private" | "group" | "supergroup";
|
||||
export type Language = "fa" | "en";
|
||||
|
||||
export interface Part {
|
||||
text?: string;
|
||||
inline_data?: { mime_type: string; data: string };
|
||||
functionCall?: { name: string; args: Record<string, unknown> };
|
||||
functionResponse?: { name: string; response: Record<string, unknown> };
|
||||
thoughtSignature?: string;
|
||||
}
|
||||
|
||||
export interface HistoryItem {
|
||||
role: MessageRole;
|
||||
parts: Part[];
|
||||
timestamp?: number;
|
||||
userId?: number;
|
||||
userName?: string;
|
||||
}
|
||||
|
||||
export interface UserMemory {
|
||||
userId: number;
|
||||
userName: string;
|
||||
firstName: string;
|
||||
lastSeen: number;
|
||||
messageCount: number;
|
||||
topics: string[];
|
||||
personality: string;
|
||||
preferences: string[];
|
||||
interactionStyle: string;
|
||||
}
|
||||
|
||||
export interface GroupMessage {
|
||||
messageId: number;
|
||||
userId: number;
|
||||
userName: string;
|
||||
text: string;
|
||||
timestamp: number;
|
||||
isReply?: boolean;
|
||||
replyToUser?: string;
|
||||
}
|
||||
|
||||
export interface TgSticker { file_id: string; emoji?: string; file_size?: number }
|
||||
|
||||
export interface EngineState {
|
||||
history: HistoryItem[];
|
||||
userHistories: Map<number, HistoryItem[]>;
|
||||
apiKeyIndex: number;
|
||||
consecutiveErrors: number;
|
||||
}
|
||||
|
||||
export interface ChatSession {
|
||||
id: number;
|
||||
type: ChatType;
|
||||
activeEngine: AIEngine;
|
||||
lastSeen: number;
|
||||
messageCount: number;
|
||||
language: Language;
|
||||
userMemories: Map<number, UserMemory>;
|
||||
groupContext: HistoryItem[];
|
||||
customPrompts: { gemini: string | null };
|
||||
userCustomPrompts: Map<number, string>;
|
||||
engines: {
|
||||
gemini: EngineState;
|
||||
};
|
||||
rateLimiting: { requests: number[] };
|
||||
settings: {
|
||||
autoCleanHistory: boolean;
|
||||
typingIndicator: boolean;
|
||||
groupResponseMode: "always" | "mention_only" | "smart";
|
||||
personalizedResponses: boolean;
|
||||
contextAwareness: boolean;
|
||||
languageSet: boolean;
|
||||
};
|
||||
statistics: {
|
||||
totalMessages: number;
|
||||
geminiMessages: number;
|
||||
voicesReceived: number;
|
||||
firstUsed: number;
|
||||
};
|
||||
vipStatus: boolean;
|
||||
dailyLimits: {
|
||||
messages: number;
|
||||
voicesSent: number;
|
||||
voicesReceived: number;
|
||||
imagesGenerated: number;
|
||||
lastReset: number;
|
||||
};
|
||||
}
|
||||
|
||||
export interface ModelInfo {
|
||||
id: string;
|
||||
name: string;
|
||||
description?: string;
|
||||
context_length?: number;
|
||||
type?: "text" | "image";
|
||||
}
|
||||
|
||||
export interface ModelCache {
|
||||
engine: AIEngine;
|
||||
models: ModelInfo[];
|
||||
lastUpdated: number;
|
||||
}
|
||||
|
||||
export interface UserStatistics {
|
||||
userId: number;
|
||||
firstName: string;
|
||||
userName: string;
|
||||
chatType: ChatType;
|
||||
statistics: ChatSession["statistics"];
|
||||
activeEngine: AIEngine;
|
||||
vipStatus: boolean;
|
||||
dailyLimits: ChatSession["dailyLimits"];
|
||||
}
|
||||
|
||||
export interface BroadcastJob {
|
||||
id: string;
|
||||
mode: "all" | "vip" | "free" | "specific";
|
||||
targetUserId?: number;
|
||||
message: string;
|
||||
userIds: number[];
|
||||
processedIndex: number;
|
||||
sent: number;
|
||||
failed: number;
|
||||
totalUsers: number;
|
||||
adminChatId: number;
|
||||
adminMessageId: number;
|
||||
createdAt: number;
|
||||
status: "pending" | "running" | "done" | "error";
|
||||
}
|
||||
|
||||
export interface Env {
|
||||
TOKEN: string;
|
||||
SESSIONS: KVNamespace;
|
||||
BOT_OWNER_ID?: string;
|
||||
ADDITIONAL_OWNER_IDS?: string;
|
||||
GEMINI_KEY_1?: string;
|
||||
GEMINI_KEY_2?: string;
|
||||
GEMINI_KEY_3?: string;
|
||||
GEMINI_KEY_4?: string;
|
||||
GEMINI_KEY_5?: string;
|
||||
GOOGLE_SEARCH_API_KEY?: string;
|
||||
GOOGLE_SEARCH_ENGINE_ID?: string;
|
||||
MAINTENANCE_MODE?: string;
|
||||
CF_ID_1?: string; CF_TOKEN_1?: string;
|
||||
CF_ID_2?: string; CF_TOKEN_2?: string;
|
||||
CF_ID_3?: string; CF_TOKEN_3?: string;
|
||||
ELEVENLABS_KEY_1?: string;
|
||||
ELEVENLABS_KEY_2?: string;
|
||||
ELEVENLABS_KEY_3?: string;
|
||||
ELEVENLABS_KEY_4?: string;
|
||||
ELEVENLABS_KEY_5?: string;
|
||||
}
|
||||
|
||||
export interface BotConfig {
|
||||
image_limit: number;
|
||||
message_limit: number;
|
||||
voice_limit: number;
|
||||
system_prompt: string;
|
||||
maintenance: boolean;
|
||||
vip_contact: string;
|
||||
}
|
||||
|
||||
export interface GroupInfo {
|
||||
chatId: number;
|
||||
title: string;
|
||||
type: "group" | "supergroup";
|
||||
username?: string;
|
||||
memberCount?: number;
|
||||
addedAt: number;
|
||||
lastActivity: number;
|
||||
vipStatus: boolean;
|
||||
}
|
||||
|
||||
export interface TgUser { id: number; is_bot: boolean; first_name: string; username?: string; language_code?: string }
|
||||
export interface TgChat { id: number; type: ChatType; title?: string }
|
||||
export interface TgPhotoSize { file_id: string; file_unique_id: string; width: number; height: number; file_size?: number }
|
||||
export interface TgDocument { file_id: string; file_name?: string; mime_type?: string; file_size?: number }
|
||||
export interface TgVoice { file_id: string; file_unique_id: string; duration: number; mime_type?: string; file_size?: number }
|
||||
export interface TgVideo { file_id: string; duration: number; mime_type?: string; file_size?: number }
|
||||
export interface TgAnimation { file_id: string; mime_type?: string; file_size?: number }
|
||||
export interface TgMessageEntity { type: string; offset: number; length: number }
|
||||
export interface TgMessage {
|
||||
message_id: number;
|
||||
from?: TgUser;
|
||||
chat: TgChat;
|
||||
date: number;
|
||||
text?: string;
|
||||
caption?: string;
|
||||
photo?: TgPhotoSize[];
|
||||
document?: TgDocument;
|
||||
voice?: TgVoice;
|
||||
video?: TgVideo;
|
||||
sticker?: TgSticker;
|
||||
animation?: TgAnimation;
|
||||
reply_to_message?: TgMessage;
|
||||
entities?: TgMessageEntity[];
|
||||
}
|
||||
export interface TgCallbackQuery { id: string; from: TgUser; message?: TgMessage; data?: string }
|
||||
export interface TgUpdate { update_id: number; message?: TgMessage; callback_query?: TgCallbackQuery }
|
||||
|
||||
export type ErrorType = "quota" | "auth" | "network" | "timeout" | "blocked" | "empty" | "server" | "unknown";
|
||||
|
||||
export interface GeminiFunctionCall {
|
||||
name: string;
|
||||
args: Record<string, unknown>;
|
||||
}
|
||||
|
||||
export interface GeminiResponse {
|
||||
text: string;
|
||||
functionCalls: GeminiFunctionCall[];
|
||||
modelParts?: Part[];
|
||||
}
|
||||
|
||||
export type InlineBtn = { text: string; callback_data?: string; url?: string };
|
||||
export type InlineKeyboard = { inline_keyboard: InlineBtn[][] };
|
||||
|
||||
export interface BotConfigChange {
|
||||
key: keyof BotConfig;
|
||||
value: string | number | boolean;
|
||||
}
|
||||
|
||||
export interface AgentToolCall {
|
||||
type: "image" | "search" | "websearch" | "voice" | "pdf" | "code" | "logs" | "selfcheck" | "sendmsg" | "adminpanel" | "setvip" | "setblock" | "viewmemory" | "resetmemory" | "exportstats";
|
||||
param?: string;
|
||||
extra?: string;
|
||||
cleanResponse: string;
|
||||
}
|
||||
|
||||
export interface LogEntry { timestamp: number; level: "info" | "warn" | "error"; message: string; context?: unknown }
|
||||
|
||||
export interface BucketEntry {
|
||||
bucket: unknown;
|
||||
lastUsed: number;
|
||||
}
|
||||
Reference in New Issue
Block a user