Compare commits

...

3 Commits

Author SHA1 Message Date
ade154b169 User kicked handling added 2024-10-27 22:31:20 +01:00
c6b48dd0d6 Languages update 2024-10-27 19:29:26 +01:00
e6ee3ee695 Minor changes
- Prod dockerfile changes + deno downgrade
- Locale files added
- Trying to make bot working with i18n
2024-10-27 18:49:21 +01:00
29 changed files with 115 additions and 731 deletions

View File

@ -1,15 +1,31 @@
FROM denoland/deno:2.0.3 # Do not upgrade to 2.0.3
# https://github.com/denoland/deno/issues/26583
FROM denoland/deno:2.0.2
WORKDIR /app WORKDIR /app
COPY . . COPY bot bot
COPY cfg cfg
COPY core core
COPY external external
COPY migrations migrations
COPY repo repo
COPY utils utils
COPY deno.json .
COPY config.ts .
COPY main.ts .
RUN deno cache --allow-import ./main.ts RUN deno cache --allow-import ./main.ts
# RUN deno cache ./main.ts --allow-import
RUN mkdir bin RUN mkdir bin
# Not working # Doesn't work. File read iessues issues
# RUN deno compile ./main.ts -o ./bin/mic --allow-all --allow-import # Suppose related to this issue https://github.com/denoland/deno/issues/20885
# ENTRYPOINT [ "./bin/mic" ] # ENV MIC_CONFIG_PATH="/app/config.json"
# RUN deno compile -o ./mic-bin --allow-all ./main.ts
# ENTRYPOINT [ "./mic-bin" ]
ENTRYPOINT [ "deno", "run", "--allow-all", "main.ts" ] # TODO: Replace allow all with a normal permissions
# https://docs.deno.com/runtime/fundamentals/security/#permissions
ENTRYPOINT [ "deno", "run", "--allow-all", "./main.ts" ]

View File

@ -1,15 +1,23 @@
import { Bot, Context, session, BotError, GrammyError, HttpError } from "https://deno.land/x/grammy/mod.ts"; import { Bot, Context, session, BotError, GrammyError, HttpError } from "https://deno.land/x/grammy/mod.ts";
import { Ctx, defaultSessionData } from "./ctx.ts"; import { Ctx, defaultSessionData } from "./ctx.ts";
import * as config from "../cfg/config.ts" import { BotConfig } from "../cfg/config.ts"
import { ERR_CODES, Err } from "../utils/errors.ts"; import { ERR_CODES, Err } from "../utils/errors.ts";
import { I18n } from "https://deno.land/x/grammy_i18n@v1.1.0/mod.ts";
class BotUnknownOnStartErr extends Err { class BotUnknownOnStartErr extends Err {
code: ERR_CODES = ERR_CODES.UnknownErr; code: ERR_CODES = ERR_CODES.UnknownErr
} }
export const runBot = async (cfg: config.BotConfig, initMode: (bot: Bot<Ctx>) => void) => { export const runBot = async (cfg: BotConfig, initMode: (bot: Bot<Ctx>) => void) => {
const bot = new Bot<Ctx>(cfg.bot_token) const bot = new Bot<Ctx>(cfg.bot_token)
bot.use(session({ initial: defaultSessionData }))
const i18n = new I18n<Ctx>({
defaultLocale: "en",
directory: cfg.locales_dir,
})
console.log(i18n.locales)
bot.use(session({ initial: defaultSessionData }), i18n)
bot.catch((err: BotError<Context>) => { bot.catch((err: BotError<Context>) => {
const ctx = err.ctx; const ctx = err.ctx;
console.error(`Error while handling update ${ctx.update.update_id}:`); console.error(`Error while handling update ${ctx.update.update_id}:`);

View File

@ -1,12 +1,10 @@
import { Context, SessionFlavor } from "https://deno.land/x/grammy@v1.30.0/mod.ts"; import { Context, SessionFlavor } from "https://deno.land/x/grammy/mod.ts";
import { CaptchaSessionData } from "./normal_mode/captcha.ts"; import { CaptchaSessionData } from "./normal_mode/captcha.ts";
import { I18nFlavor } from "https://deno.land/x/grammy_i18n/mod.ts";
interface SessionData { export interface SessionData {
captcha_data?: CaptchaSessionData captcha_data?: CaptchaSessionData
} }
const defaultSessionData = (): SessionData => { return {} } export const defaultSessionData = (): SessionData => { return {} }
type Ctx = Context & SessionFlavor<SessionData>; export type Ctx = Context & SessionFlavor<SessionData> & I18nFlavor;
export type { SessionData, Ctx }
export { defaultSessionData }

View File

@ -1,14 +0,0 @@
import { LANG_EN, LangPack } from "./lang_pack.ts";
const pack: LangPack = {
code: LANG_EN,
btn_labels: null,
replies: {
captcha: {
already_in_chat: "You are already in chat",
passed: (invite_link: string) => `Captcha passed! Now u can join to the community: ${invite_link}`,
failed: (timeout_mins: number) => `U didn't pass the captcha. U can try again after ${timeout_mins} minutes.`,
}
},
}
export default pack

View File

@ -1,30 +0,0 @@
import { LangPack } from "./lang_pack.ts"
import en_pack from "./en.ts"
import ru_pack from "./ru.ts"
import rs_pack from "./rs.ts"
import hr_pack from "./hr.ts"
import hu_pack from "./hu.ts"
import pl_pack from "./pl.ts"
import ua_pack from "./pl.ts"
export * from "./lang_pack.ts"
export class LangManager {
static defaultLang: LangPack = en_pack
static langsMap = new Map<string, LangPack>([
[en_pack.code, en_pack],
[ru_pack.code, ru_pack],
[rs_pack.code, rs_pack],
[hr_pack.code, hr_pack],
[hu_pack.code, hu_pack],
[pl_pack.code, pl_pack],
[ua_pack.code, ua_pack],
])
static getDefaultLang(): LangPack { return this.defaultLang }
static getLang(langCode?: string): LangPack {
return this.langsMap.get(langCode || this.defaultLang.code)
|| this.defaultLang
}
}

View File

@ -1,9 +0,0 @@
import pack_rs from "./rs.ts"
import { LANG_HR, LangPack } from "./lang_pack.ts";
const pack: LangPack = {
code: LANG_HR,
btn_labels: null,
replies: pack_rs.replies,
}
export default pack

View File

@ -1,14 +0,0 @@
import { LANG_EN, LangPack } from "./lang_pack.ts";
const pack: LangPack = {
code: LANG_EN,
btn_labels: null,
replies: {
captcha: {
already_in_chat: "Már a csevegésben vagy.",
passed: (invite_link: string) => `Captcha sikeresen teljesítve! Most már csatlakozhat közösségünkhöz: ${invite_link}`,
failed: (timeout_mins: number) => `A captcha nem sikerült. 15 perc múlva próbálkozhat ${timeout_mins} újra.`,
}
},
}
export default pack

View File

@ -1,20 +0,0 @@
export const LANG_RU = "ru"
export const LANG_EN = "en"
export const LANG_UA = "ua"
export const LANG_HU = "hu"
export const LANG_RS = "rs"
export const LANG_HR = "hr"
export const LANG_PL = "pl"
export interface LangPack {
code: string,
btn_labels: null,
replies: {
captcha: {
already_in_chat: string,
passed: (invite_link: string) => string,
failed: (timeout_mins: number) => string,
}
},
}

View File

@ -1,9 +0,0 @@
import { LANG_PL, LangPack } from "./lang_pack.ts";
import lang_en from "./en.ts"
const pack: LangPack = {
code: LANG_PL,
btn_labels: null,
replies: lang_en.replies,
}
export default pack

View File

@ -1,14 +0,0 @@
import { LangPack, LANG_RS } from "./lang_pack.ts";
const pack: LangPack = {
code: LANG_RS,
btn_labels: null,
replies: {
captcha: {
already_in_chat: "Ti si već u chat-u",
passed: (invite_link: string) => `Uspeo si sa captch-om! Sada mozes predruziti se nasoj zajednici: ${invite_link}`,
failed: (timeout_mins: number) => `Nisi prošao captch-u. Mozes pokušati ponovo za ${timeout_mins} minuta.`,
}
},
}
export default pack

View File

@ -1,14 +0,0 @@
import { LANG_RU, LangPack } from "./lang_pack.ts";
const pack: LangPack = {
code: LANG_RU,
btn_labels: null,
replies: {
captcha: {
already_in_chat: "Вы уже в чате",
passed: (invite_link: string) => `Капча пройдена! Теперь вы можете присоединиться к нашему сообществу: ${invite_link}`,
failed: (timeout_mins: number) => `Капча не пройдена. Вы сможете попробовать снова через ${timeout_mins} минут.`,
}
},
}
export default pack

View File

@ -1,14 +0,0 @@
import { LANG_UA, LangPack } from "./lang_pack.ts";
const pack: LangPack = {
code: LANG_UA,
btn_labels: null,
replies: {
captcha: {
already_in_chat: "Ви вже в чаті",
passed: (invite_link: string) => `Капча пройдена! Тепер ви можете приєднатися до нашої спільноти: ${invite_link}`,
failed: (timeout_mins: number) => `Капча не пройдена. Ви зможете спробувати ще раз через ${timeout_mins} хвилин.`,
}
},
}
export default pack

4
bot/locales/en.ftl Normal file
View File

@ -0,0 +1,4 @@
# Captcha
captcha-already-in-chat = You are already in chat
captcha-passed = Captcha passed! Now you can join the community: { invite_link }
captcha-failed = You didn't pass the captcha. You can try again after { timeout_mins } minutes.

4
bot/locales/hu.ftl Normal file
View File

@ -0,0 +1,4 @@
# Captcha
captcha-already-in-chat = Már a csevegésben vagy
captcha-passed = Captcha sikeresen teljesítve! Most már csatlakozhat közösségünkhöz: { invite_link }
captcha-failed = A captcha nem sikerült. 15 perc múlva próbálkozhat { timeout_mins } újra.

5
bot/locales/pl.ftl Normal file
View File

@ -0,0 +1,5 @@
# Captcha
captcha-already-in-chat = Już jesteś na czacie
captcha-passed = Captcha pomyślnie zakończona! Teraz możesz dołączyć do naszej społeczności: { invite_link }
captcha-failed = Captcha nieudana. Spróbuj ponownie za { timeout_mins } minut.

4
bot/locales/rs.ftl Normal file
View File

@ -0,0 +1,4 @@
# Captcha
captcha-already-in-chat = Ti si već u chat-u
captcha-passed = Uspeo si sa captch-om! Sada mozes predruziti se nasoj zajednici: { invite_link }
captcha-failed = Nisi prošao captch-u. Mozes pokušati ponovo za { timeout_mins } minuta.

4
bot/locales/ru.ftl Normal file
View File

@ -0,0 +1,4 @@
# Captcha
captcha-already-in-chat = Вы уже в чате
captcha-passed = Капча пройдена! Теперь вы можете присоединиться к нашему сообществу: { invite_link }
captcha-failed = Капча не пройдена. Вы сможете попробовать снова через { timeout_mins } минут.

4
bot/locales/ua.ftl Normal file
View File

@ -0,0 +1,4 @@
# Captcha
captcha-already-in-chat = Ви вже в чаті
captcha-passed = Капча пройдена! Капча пройдена! Тепер ви можете приєднатися до нашої спільноти: { invite_link }
captcha-failed = Капча не пройдена. Ви зможете спробувати ще раз через { timeout_mins } хвилин.

View File

@ -1,11 +1,10 @@
import { Filter } from "https://deno.land/x/grammy/mod.ts"; import { Filter } from "https://deno.land/x/grammy/mod.ts";
import { BotConfig } from "../../cfg/config.ts"; import { BotConfig } from "../../cfg/config.ts";
import { Ctx } from "../ctx.ts"; import { Ctx } from "../ctx.ts";
import { LangManager } from "../lang/export.ts";
import { Kysely } from 'npm:kysely'; import { Kysely } from 'npm:kysely';
import { Database } from "../../repo/exports.ts"; import { Database } from "../../repo/scheme.ts";
import { checkUserRestrictions, getActiveInviteLink } from "../../core/users.ts"; import { checkUserRestrictions } from "../../core/users.ts";
import { CheckUserOut, type CheckUserOnStartOut } from "./user_managment.ts"; import type { CheckUserOnStartOut } from "./user_managment.ts";
const CAPTCHA_FAILS_LIMIT = 3 const CAPTCHA_FAILS_LIMIT = 3
const TIMEOUT_AFTER_FAIL_MINS = 5 const TIMEOUT_AFTER_FAIL_MINS = 5
@ -22,20 +21,14 @@ export interface CaptchaSessionData {
const randInt = (min: number, max: number): number => const randInt = (min: number, max: number): number =>
Math.floor(Math.random() * (max - min) + min) Math.floor(Math.random() * (max - min) + min)
class Captcha { // Returns captcha task (string) and the solution (number)
// ! READ ONLY ! Initialized by the constructor const genCaptcha = (): [string, number] => {
public _generated_at = Date.now() const number1 = randInt(-100, 100)
// ! READ ONLY ! Initialized by the constructor const number2 = randInt(-100, 100)
public _solution: number return [
// ! READ ONLY ! Initialized by the constructor `Captcha: ${number1}+${number2}=?`,
public _text: string number1 + number2
]
constructor() {
const number1 = randInt(-100, 100)
const number2 = randInt(-100, 100)
this._solution = number1 + number2
this._text = `Captcha: ${number1}+${number2}=?`
}
} }
// User captcha response sanitizer/parser/validator // User captcha response sanitizer/parser/validator
@ -72,28 +65,27 @@ const captchaPassed = async (ctx: Ctx, db: Kysely<Database>, cfg: BotConfig) =>
}).execute() }).execute()
}) })
ctx.reply(LangManager.getLang(ctx.from!.language_code) await ctx.reply(ctx.t("captcha-passed",
.replies.captcha.passed(link.invite_link)) { invite_link: link.invite_link }))
ctx.session.captcha_data = undefined ctx.session.captcha_data = undefined
} }
const initUserCaptcha = async (ctx: Ctx, db: Kysely<Database>, user: CheckUserOnStartOut, cfg: BotConfig) => { const initUserCaptcha = async (ctx: Ctx, db: Kysely<Database>, user: CheckUserOnStartOut, cfg: BotConfig) => {
if (user.isChatParticipant) { if (user.isChatParticipant) {
ctx.reply(LangManager.getLang(ctx.from!.language_code) await ctx.reply(ctx.t("captcha-already-in-chat"))
.replies.captcha.already_in_chat)
} else if (user.activeInviteLink) { } else if (user.activeInviteLink) {
await ctx.reply(user.activeInviteLink) await ctx.reply(user.activeInviteLink)
} else if (user.isCaptchaSolved) { } else if (user.isCaptchaSolved) {
await captchaPassed(ctx, db, cfg) await captchaPassed(ctx, db, cfg)
} else { } else {
const captcha = new Captcha() const [captchaText, captchaSolution] = genCaptcha()
const msg = await ctx.reply(captcha._text) const msg = await ctx.reply(captchaText)
ctx.session.captcha_data = { ctx.session.captcha_data = {
message_id: msg.message_id, message_id: msg.message_id,
tries_failed: 0, tries_failed: 0,
generated_at: captcha._generated_at, generated_at: new Date().getTime(),
solution: captcha._solution.toString(), solution: captchaSolution.toString(),
} }
} }
} }
@ -115,8 +107,8 @@ const checkCaptchaSolution = async (ctx: Filter<Ctx, "message:text">, db: Kysely
ctx.session.captcha_data!.tries_failed++ ctx.session.captcha_data!.tries_failed++
await ctx.api.deleteMessage(ctx.chatId, ctx.msg.message_id) await ctx.api.deleteMessage(ctx.chatId, ctx.msg.message_id)
if (ctx.session.captcha_data!.tries_failed > CAPTCHA_FAILS_LIMIT) { if (ctx.session.captcha_data!.tries_failed > CAPTCHA_FAILS_LIMIT) {
ctx.reply(LangManager.getLang(ctx.msg.from.language_code) await ctx.reply(ctx.t("captcha-already-in-chat",
.replies.captcha.failed(TIMEOUT_AFTER_FAIL_MINS)) {timeout_mins: TIMEOUT_AFTER_FAIL_MINS}))
await ctx.api.deleteMessage(ctx.chatId, ctx.session.captcha_data!.message_id) await ctx.api.deleteMessage(ctx.chatId, ctx.session.captcha_data!.message_id)
// TODO: Add timeout // TODO: Add timeout
} }

View File

@ -2,12 +2,14 @@ import { ChatMember } from "https://deno.land/x/grammy_types/manage.ts";
import { Bot } from "https://deno.land/x/grammy/mod.ts"; import { Bot } from "https://deno.land/x/grammy/mod.ts";
import { Kysely } from 'npm:kysely'; import { Kysely } from 'npm:kysely';
import { Ctx } from "../ctx.ts"; import { Ctx } from "../ctx.ts";
import { Database } from "../../repo/exports.ts"; import { Database } from "../../repo/scheme.ts";
import { CompiledConfig } from "../../cfg/config.ts"; import { CompiledConfig } from "../../cfg/config.ts";
import { checkUser, checkUserOnNewChatMember, onMemberLeftChat, checkUserOnStart } from "./user_managment.ts"; import { checkUser, checkUserOnNewChatMember, onMemberLeftChat, checkUserOnStart } from "./user_managment.ts";
import { checkCaptchaSolution, initUserCaptcha } from "./captcha.ts"; import { checkCaptchaSolution, initUserCaptcha } from "./captcha.ts";
import { handleSafebooruQuery } from "./safebooru.ts"; import { handleSafebooruQuery } from "./safebooru.ts";
const DEFAULT_LOCALE = "en"
interface ChatMemberUpdateStatus { interface ChatMemberUpdateStatus {
joined: boolean, joined: boolean,
left: boolean, left: boolean,
@ -15,7 +17,6 @@ interface ChatMemberUpdateStatus {
restricted: boolean, restricted: boolean,
roleChanged: boolean roleChanged: boolean
} }
function getChatMemberUpdateStatus(oldMember: ChatMember, newMember: ChatMember): ChatMemberUpdateStatus { function getChatMemberUpdateStatus(oldMember: ChatMember, newMember: ChatMember): ChatMemberUpdateStatus {
return { return {
joined: oldMember.status === "left" && joined: oldMember.status === "left" &&
@ -36,6 +37,7 @@ export const init = (bot: Bot<Ctx>, db: Kysely<Database>, cfg: CompiledConfig) =
bot.on('message', async (ctx, next) => { bot.on('message', async (ctx, next) => {
if (ctx.from?.is_bot) return if (ctx.from?.is_bot) return
console.log(`Chat ID: ${ctx.msg.chat.id} From: ${ctx.from.id} Message: ${ctx.msg.text}`) console.log(`Chat ID: ${ctx.msg.chat.id} From: ${ctx.from.id} Message: ${ctx.msg.text}`)
ctx.i18n.useLocale(ctx.from.language_code || DEFAULT_LOCALE)
await next() await next()
}) })
@ -59,6 +61,8 @@ export const init = (bot: Bot<Ctx>, db: Kysely<Database>, cfg: CompiledConfig) =
bot.on('chat_member', async (ctx, next) => { bot.on('chat_member', async (ctx, next) => {
if (ctx.from.is_bot) return if (ctx.from.is_bot) return
if (ctx.chat.id !== botCfg.chat_id) return if (ctx.chat.id !== botCfg.chat_id) return
ctx.i18n.useLocale(ctx.from.language_code || DEFAULT_LOCALE)
const { old_chat_member, new_chat_member } = ctx.chatMember const { old_chat_member, new_chat_member } = ctx.chatMember
const chatMemberUpdateStatus = getChatMemberUpdateStatus(old_chat_member, new_chat_member) const chatMemberUpdateStatus = getChatMemberUpdateStatus(old_chat_member, new_chat_member)
@ -69,7 +73,7 @@ export const init = (bot: Bot<Ctx>, db: Kysely<Database>, cfg: CompiledConfig) =
// TODO: // TODO:
// const userInfo = await checkUserOnNewChatMember(ctx, db, botCfg) // const userInfo = await checkUserOnNewChatMember(ctx, db, botCfg)
//if (userInfo.isNewUser) { /* Some hello message? */ } //if (userInfo.isNewUser) { /* Some hello message? */ }
} else if (chatMemberUpdateStatus.left) { } else if (chatMemberUpdateStatus.left || chatMemberUpdateStatus.kicked) {
console.log(`Chat member left ${ctx.chatMember.from.id}:'+ console.log(`Chat member left ${ctx.chatMember.from.id}:'+
'${ctx.from.first_name} ${ctx.from.last_name}`) '${ctx.from.first_name} ${ctx.from.last_name}`)
await onMemberLeftChat(ctx, db) await onMemberLeftChat(ctx, db)

View File

@ -20,8 +20,8 @@ export const handleSafebooruQuery = async (
const resp = await fetch(reqURL) const resp = await fetch(reqURL)
if (!resp.ok) { if (!resp.ok) {
console.log(`Error response from safebooru. URL: ${reqURL} Status: ${resp.status} ${resp.text}`) console.log(`Error response from safebooru. URL: ${reqURL} Status: ${resp.status} ${resp.text}`)
const results: InlineQueryResult[] = [] // TODO: Return error to user
await ctx.api.answerInlineQuery(ctx.inlineQuery.id, results, { cache_time: 1 }) await ctx.api.answerInlineQuery(ctx.inlineQuery.id, [], { cache_time: 1 })
return return
} }
const posts: SafebooruPostData[] = await resp.json() const posts: SafebooruPostData[] = await resp.json()
@ -32,12 +32,12 @@ export const handleSafebooruQuery = async (
} }
const results: InlineQueryResult[] = [] const results: InlineQueryResult[] = []
posts.map((post) => { for (const post of posts) {
results.push(InlineQueryResultBuilder.photo(`id-${post.id}`, post.file_url, { results.push(InlineQueryResultBuilder.photo(`id-${post.id}`, post.file_url, {
thumbnail_url: post.preview_url, thumbnail_url: post.preview_url,
caption: `[source](https://${SAFEBOORU_HOST}/index.php?page=post&s=view&id=${post.id})`, caption: `[source](https://${SAFEBOORU_HOST}/index.php?page=post&s=view&id=${post.id})`,
parse_mode: "MarkdownV2", parse_mode: "MarkdownV2",
})) }))
}) }
await ctx.api.answerInlineQuery(ctx.inlineQuery.id, results, { cache_time: 1 }) await ctx.api.answerInlineQuery(ctx.inlineQuery.id, results, { cache_time: 1 })
} }

View File

@ -1,7 +1,7 @@
import { CommandContext, Filter } from "https://deno.land/x/grammy/mod.ts"; import { CommandContext, Filter } from "https://deno.land/x/grammy/mod.ts";
import { Kysely, Transaction } from 'npm:kysely'; import { Kysely, Transaction } from 'npm:kysely';
import { Ctx } from "../ctx.ts"; import { Ctx } from "../ctx.ts";
import { Database } from "../../repo/exports.ts"; import { Database } from "../../repo/scheme.ts";
import { checkUserRestrictions } from "../../core/users.ts"; import { checkUserRestrictions } from "../../core/users.ts";
import { UserCheckedRestrictions } from "../../core/entities.ts"; import { UserCheckedRestrictions } from "../../core/entities.ts";
import { BotConfig } from "../../cfg/config.ts"; import { BotConfig } from "../../cfg/config.ts";

View File

@ -13,10 +13,11 @@ export const MIC_CONFIG_PATH = "MIC_CONFIG_PATH"
export enum BotMode{ setup, normal } export enum BotMode{ setup, normal }
export type BotConfig = { export type BotConfig = {
mode: BotMode, mode: BotMode,
bot_token: string, bot_token: string,
chat_id: number, chat_id: number,
admin_ids: number[], admin_ids: number[],
locales_dir: string
} }
export interface EnvConfig { export interface EnvConfig {

View File

@ -11,6 +11,7 @@ export const DEFAULT_DB_USER = "mic"
export const DEFAULT_DB_NAME = "mic" export const DEFAULT_DB_NAME = "mic"
export const DEFAULT_DB_PORT = 5432 export const DEFAULT_DB_PORT = 5432
export const DEFAULT_DB_TLS = false export const DEFAULT_DB_TLS = false
export const LOCALES_DIR = "bot/locales"
export const loadConfig = (): CompiledConfig => { export const loadConfig = (): CompiledConfig => {
const cfg = getConfig() const cfg = getConfig()
@ -26,9 +27,8 @@ export const loadConfig = (): CompiledConfig => {
mode: BotMode.normal, mode: BotMode.normal,
bot_token: cfg.bot_token, bot_token: cfg.bot_token,
chat_id: MIC_CHAT_ID, chat_id: MIC_CHAT_ID,
admin_ids: [ locales_dir: LOCALES_DIR,
MR_ANDERSON_ID, admin_ids: [ MR_ANDERSON_ID ]
]
} }
return { return {
pgPoolCfg, botCfg, pgPoolCfg, botCfg,

View File

@ -1,5 +1,5 @@
import { Kysely, Transaction } from 'npm:kysely'; import { Kysely, Transaction } from 'npm:kysely';
import { Database } from "../repo/exports.ts"; import { Database } from "../repo/scheme.ts";
import { UserCheckedRestrictions, UserRestrictionsInfo } from "./entities.ts"; import { UserCheckedRestrictions, UserRestrictionsInfo } from "./entities.ts";

523
deno.lock
View File

@ -1,523 +0,0 @@
{
"version": "4",
"specifiers": {
"jsr:@std/path@*": "1.0.6",
"npm:@types/node@*": "18.16.19",
"npm:@types/pg@*": "8.11.10",
"npm:kysely@*": "0.27.4",
"npm:pg@*": "8.13.0"
},
"jsr": {
"@std/path@1.0.6": {
"integrity": "ab2c55f902b380cf28e0eec501b4906e4c1960d13f00e11cfbcd21de15f18fed"
}
},
"npm": {
"@types/node@18.16.19": {
"integrity": "sha512-IXl7o+R9iti9eBW4Wg2hx1xQDig183jj7YLn8F7udNceyfkbn1ZxmzZXuak20gR40D7pIkIY1kYGx5VIGbaHKA=="
},
"@types/pg@8.11.10": {
"integrity": "sha512-LczQUW4dbOQzsH2RQ5qoeJ6qJPdrcM/DcMLoqWQkMLMsq83J5lAX3LXjdkWdpscFy67JSOWDnh7Ny/sPFykmkg==",
"dependencies": [
"@types/node",
"pg-protocol",
"pg-types@4.0.2"
]
},
"kysely@0.27.4": {
"integrity": "sha512-dyNKv2KRvYOQPLCAOCjjQuCk4YFd33BvGdf/o5bC7FiW+BB6snA81Zt+2wT9QDFzKqxKa5rrOmvlK/anehCcgA=="
},
"obuf@1.1.2": {
"integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg=="
},
"pg-cloudflare@1.1.1": {
"integrity": "sha512-xWPagP/4B6BgFO+EKz3JONXv3YDgvkbVrGw2mTo3D6tVDQRh1e7cqVGvyR3BE+eQgAvx1XhW/iEASj4/jCWl3Q=="
},
"pg-connection-string@2.7.0": {
"integrity": "sha512-PI2W9mv53rXJQEOb8xNR8lH7Hr+EKa6oJa38zsK0S/ky2er16ios1wLKhZyxzD7jUReiWokc9WK5nxSnC7W1TA=="
},
"pg-int8@1.0.1": {
"integrity": "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw=="
},
"pg-numeric@1.0.2": {
"integrity": "sha512-BM/Thnrw5jm2kKLE5uJkXqqExRUY/toLHda65XgFTBTFYZyopbKjBe29Ii3RbkvlsMoFwD+tHeGaCjjv0gHlyw=="
},
"pg-pool@3.7.0_pg@8.13.0": {
"integrity": "sha512-ZOBQForurqh4zZWjrgSwwAtzJ7QiRX0ovFkZr2klsen3Nm0aoh33Ls0fzfv3imeH/nw/O27cjdz5kzYJfeGp/g==",
"dependencies": [
"pg"
]
},
"pg-protocol@1.7.0": {
"integrity": "sha512-hTK/mE36i8fDDhgDFjy6xNOG+LCorxLG3WO17tku+ij6sVHXh1jQUJ8hYAnRhNla4QVD2H8er/FOjc/+EgC6yQ=="
},
"pg-types@2.2.0": {
"integrity": "sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==",
"dependencies": [
"pg-int8",
"postgres-array@2.0.0",
"postgres-bytea@1.0.0",
"postgres-date@1.0.7",
"postgres-interval@1.2.0"
]
},
"pg-types@4.0.2": {
"integrity": "sha512-cRL3JpS3lKMGsKaWndugWQoLOCoP+Cic8oseVcbr0qhPzYD5DWXK+RZ9LY9wxRf7RQia4SCwQlXk0q6FCPrVng==",
"dependencies": [
"pg-int8",
"pg-numeric",
"postgres-array@3.0.2",
"postgres-bytea@3.0.0",
"postgres-date@2.1.0",
"postgres-interval@3.0.0",
"postgres-range"
]
},
"pg@8.13.0": {
"integrity": "sha512-34wkUTh3SxTClfoHB3pQ7bIMvw9dpFU1audQQeZG837fmHfHpr14n/AELVDoOYVDW2h5RDWU78tFjkD+erSBsw==",
"dependencies": [
"pg-cloudflare",
"pg-connection-string",
"pg-pool",
"pg-protocol",
"pg-types@2.2.0",
"pgpass"
]
},
"pgpass@1.0.5": {
"integrity": "sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==",
"dependencies": [
"split2"
]
},
"postgres-array@2.0.0": {
"integrity": "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA=="
},
"postgres-array@3.0.2": {
"integrity": "sha512-6faShkdFugNQCLwucjPcY5ARoW1SlbnrZjmGl0IrrqewpvxvhSLHimCVzqeuULCbG0fQv7Dtk1yDbG3xv7Veog=="
},
"postgres-bytea@1.0.0": {
"integrity": "sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w=="
},
"postgres-bytea@3.0.0": {
"integrity": "sha512-CNd4jim9RFPkObHSjVHlVrxoVQXz7quwNFpz7RY1okNNme49+sVyiTvTRobiLV548Hx/hb1BG+iE7h9493WzFw==",
"dependencies": [
"obuf"
]
},
"postgres-date@1.0.7": {
"integrity": "sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q=="
},
"postgres-date@2.1.0": {
"integrity": "sha512-K7Juri8gtgXVcDfZttFKVmhglp7epKb1K4pgrkLxehjqkrgPhfG6OO8LHLkfaqkbpjNRnra018XwAr1yQFWGcA=="
},
"postgres-interval@1.2.0": {
"integrity": "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==",
"dependencies": [
"xtend"
]
},
"postgres-interval@3.0.0": {
"integrity": "sha512-BSNDnbyZCXSxgA+1f5UU2GmwhoI0aU5yMxRGO8CdFEcY2BQF9xm/7MqKnYoM1nJDk8nONNWDk9WeSmePFhQdlw=="
},
"postgres-range@1.1.4": {
"integrity": "sha512-i/hbxIE9803Alj/6ytL7UHQxRvZkI9O4Sy+J3HGc4F4oo/2eQAjTSNJ0bfxyse3bH0nuVesCk+3IRLaMtG3H6w=="
},
"split2@4.2.0": {
"integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg=="
},
"xtend@4.0.2": {
"integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ=="
}
},
"redirects": {
"https://deno.land/x/grammy/mod.ts": "https://deno.land/x/grammy@v1.30.0/mod.ts",
"https://deno.land/x/grammy_types/inline.ts": "https://deno.land/x/grammy_types@v3.14.0/inline.ts",
"https://deno.land/x/grammy_types/manage.ts": "https://deno.land/x/grammy_types@v3.14.0/manage.ts"
},
"remote": {
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/dialect/database-introspector.js": "dce8b6ada28af6b75864ca3fcc2c61bbacb8976def6f715b2f96c5aa7a9331ce",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/dialect/dialect-adapter-base.js": "0fc77b7585f22ac40ebfeb8f15c5ece6ef5273bfca280ab83a07e05bf8f2a714",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/dialect/dialect-adapter.js": "1c01191f10584f2e5b2eac9903cc9b37edc9b50d2581139a94fb25bd0286f343",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/dialect/dialect.js": "bc7f0fbc7f02416647a41f7cf70690bc6b2b4a086e6c5ad1c6faef424ad053f3",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/dialect/mssql/mssql-adapter.js": "b1374bc36da5d35f2996ec1bffb35f9d2972930bff1e6383c860ee08b02b71f4",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/dialect/mssql/mssql-dialect-config.js": "43912f00000b4b20dbf29b6466678383e186258d971479ee2a4ebd77ca2f859f",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/dialect/mssql/mssql-dialect.js": "1ed138c66e844be3e81b0db76aa611c1d66a5d2823d49153e2b5ff8fce619512",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/dialect/mssql/mssql-driver.js": "05559cf68a84f71ecda515269b26bd7f3b80d4726e80239fc8a32fa953e6a399",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/dialect/mssql/mssql-introspector.js": "04212061e8d3baf2887a697518addc6cae43f5729857695bbf62c8150710955f",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/dialect/mssql/mssql-query-compiler.js": "76696a6965f02498fef94fd0cce515da7510d096fd3bbdc80ca018b55fb51fe1",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/dialect/mysql/mysql-adapter.js": "e9bf3ce3e2fa2bc61e9c94f0ec47c081338983eef9508774587a4d9d32c587bd",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/dialect/mysql/mysql-dialect-config.js": "59f8a85958bbeabe2d5f384a9c06995155bd096781019d17c9b692a24a325ae5",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/dialect/mysql/mysql-dialect.js": "c7833569edd0ecb4be9fce659b48a30d6d338db6cf2618076753bdbe87cc7c29",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/dialect/mysql/mysql-driver.js": "251e6a724b514e363833249746c4af4d8500bfa6f8ef5e00549623f22311976b",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/dialect/mysql/mysql-introspector.js": "f7e40693ffffe924fa7c91d20a94f4deed10236edbacff1c961050cefbe212a4",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/dialect/mysql/mysql-query-compiler.js": "133914da89d66a0a5c4ed0f55bf9c99c5b211ffcccce5854b10dad5039c9e91c",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/dialect/postgres/postgres-adapter.js": "35473c74e76ef5199497e7886731664e06daf5eb1e40c8edb9b696a11a219925",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/dialect/postgres/postgres-dialect-config.js": "957787ddf36f92de774908eae93b273136bbcc02dea874a733835c0182ab4969",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/dialect/postgres/postgres-dialect.js": "d036ef03b0a83ddb9e7b5b644532f17223302a8774c98a5f0c6e37e298ab182f",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/dialect/postgres/postgres-driver.js": "e9f141818f809e5ecec6c3a99060f6515badf649f0f90fba6fd04bca2b25c57c",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/dialect/postgres/postgres-introspector.js": "98e6a6af11c323abfdb293bb5da0440ee109e71cd10801bbf438f68fb807e917",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/dialect/postgres/postgres-query-compiler.js": "de4fe38f0eb2ce762d9d5056ea10c67ba09501b28851e0cafbcffe728cf8ed53",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/dialect/sqlite/sqlite-adapter.js": "45e7d18b89bf0b8fbc4af5754699159fffbba884a1ae1fd14d813897f7913096",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/dialect/sqlite/sqlite-dialect-config.js": "a9075b20e40460049321f9e8e5d6faec19bcc8c02cf785e5e218c12612368984",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/dialect/sqlite/sqlite-dialect.js": "f84f9a49ba4f006f3ca9fb78dc9c5a9c0cd77dc9f05c70871b475e5af8b5ff60",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/dialect/sqlite/sqlite-driver.js": "8a3a03ecb9fddd93f9b545647fb14565a8bb3f4769cf623bc154f918f234aea7",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/dialect/sqlite/sqlite-introspector.js": "3887975078e254b2ac2cde63b38d343497b93f56a313a0b08bde6ac4d3d4fe01",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/dialect/sqlite/sqlite-query-compiler.js": "32179d23209f215be44dc1f4303999770e202f083adcc8315f70dfa915b444de",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/driver/connection-provider.js": "3e2b95be1a26442658341533f041efe6b72fad1f04b9c11ac65db7230c875ae3",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/driver/database-connection.js": "f8433f441ecf118349a607c3ae64c42f2121301dc2fe4ce08843ba4b9c625853",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/driver/default-connection-provider.js": "398d632946e5b83207ac7c702162de59c0f2851a6fab5bed1923c8ee197990f1",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/driver/driver.js": "ab33b030273e0f477b9ddf53b62ab16cf87bccaec3266099acaef49f927a5a4d",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/driver/dummy-driver.js": "b1c1766ec0a9f3e12db3e4d7589b7dacb4d62a33d4f7451b442917ead05a072b",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/driver/runtime-driver.js": "aabed44f53cd48302334e20fe4a6d727368e698e532776a285f027c1274d99a2",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/driver/single-connection-provider.js": "25c4ff13b94771e3121161208500015664821f52d5990f74a48b32502ad9570c",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/dynamic/dynamic-reference-builder.js": "5eb17dc79e4dc3c658e4b5ab21d45369bd32ca15fd0f26b4d41d179ba3ad33bc",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/dynamic/dynamic.js": "114968bb80d45986c8077e4146e253616f4a03beefd9db5f0be21df3666b0144",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/expression/expression-builder.js": "da9c44985b130c4d9ebd2dabff36b66e748e5afa8a785313e0d9318967ef24d7",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/expression/expression-wrapper.js": "35742f42558a1cbb369ecf7b3cb863f4486fa0c2384fb23e278244440f3c12c9",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/expression/expression.js": "7c024b0c9f292bbd0aefe486c81328d7b18ece24cb569afc3171e06035f4f970",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/kysely.js": "d6b10df0da4bb8d853d1ff946b8a1a5e4c254c7a2e26d3a5ecacce82c9e3c7eb",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/migration/file-migration-provider.js": "04be6f4d0bb587f254b270875b529bbf30bbdf19af2d95b06272cd5e6b01e56e",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/migration/migrator.js": "35c171e46ae9d18b9b9459148f626be5bc88f22ee5f7844b9b6818dd53ecb77a",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/operation-node/add-column-node.js": "0f6d7a1d9b9f92ff6052bba589fdf232946ce4e3f11be9e67fbee6827402b646",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/operation-node/add-constraint-node.js": "e9a8f803142e0de272cab889fd4221495842c53b4cdecc2d198f651ca52d08fc",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/operation-node/add-index-node.js": "92eae7d92afd2c1fdcd4dfe04bbcd095256153d84915c3710296f819a85d8773",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/operation-node/aggregate-function-node.js": "5b5c81bdc5acd46ff751ab061e638c11ad4aee218df739da0b1c3fd7f322571f",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/operation-node/alias-node.js": "af370f88de1f727e9fad10f1eed9ad7e986f2960c2ee2de2161cdf32a13ef768",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/operation-node/alter-column-node.js": "31fae64210dad0e7b0fef24ad8e26e799b3bb4ce8a048407d619decb38ef81a2",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/operation-node/alter-table-node.js": "e891b182894ad1f8893e5e434c9c8bd869f5a4fdd9732dcf081513c213ecadc9",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/operation-node/and-node.js": "291fed23cde8595fbfba40f60e01943338ae3158a6145da2a9c388a93aa26414",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/operation-node/binary-operation-node.js": "e9e6bbf4e3657a3b3fd7c6dcca10c949d23c691106ff4e1a1b9570dbb18e2ad6",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/operation-node/case-node.js": "9e3d82f1a9b526e0475d8d84991c21ef836aa19ed85cc1cd1bb9b31ba08ae951",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/operation-node/cast-node.js": "20bc1f41288ca0b724e2e74a697063b3c5f38ebefd7aad10042119c8a8789d01",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/operation-node/check-constraint-node.js": "d80a303a89c4fb3b0a3f2bd28deff582a33b841c23c9ad51dab850f96d072760",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/operation-node/column-definition-node.js": "fd894b65827f18fe537a0adaa07527380e5ef81e989df2cb8129993f3df8c766",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/operation-node/column-node.js": "e532dd468a0bf7635667d0d82d0323c49c6af7b63f5199662748bbb9adaf3ccc",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/operation-node/column-update-node.js": "702e1b059f3dea6f96e7d043cf97919293b0435f5f8dc11b26795bb042eac313",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/operation-node/common-table-expression-name-node.js": "3d55f45218d8dca53e0547d1b99a060ce0e2d30cf0eb042ff02e16b2267e2f59",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/operation-node/common-table-expression-node.js": "e25b6968225c6143942688fb967b4defa3672b1f0c5704585b79d1699ff59699",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/operation-node/constraint-node.js": "a15cd6b9be8c210d9fd984955656dd97b4827043b91385b6f88b15093f75ea58",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/operation-node/create-index-node.js": "92d3fe1f124ceba0fcddd3eaa342063217daf7564845a6b788c2420d14c1a9f2",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/operation-node/create-schema-node.js": "89b005e97766d79958859d221b04a5267fba0905b8de79d186cb4132065eb7d9",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/operation-node/create-table-node.js": "d8af47af1c1aa53f6fdef47d5293b5c3a5b2971554c0fc4bd62988a52b06353b",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/operation-node/create-type-node.js": "c62d829776d161d558239db3600ecbd0eb5591cb66864cc22335545565f12947",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/operation-node/create-view-node.js": "17284b5187b47095f7f49710e927e7a3ab4710a8e0e673be3d8d35c175a40a70",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/operation-node/data-type-node.js": "cff6ce397be6dcd19cbb941d66f1311e17d83c6e44e120f6338f899f73c966a8",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/operation-node/default-insert-value-node.js": "ee6c090a70ede51f01e2c464e358aad3317d819c0f8c310237343c08edf53f7c",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/operation-node/default-value-node.js": "5c85a389f24077fbde1a8cf486d7213e58bdd1fa1efce7d95ad58196f98d5437",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/operation-node/delete-query-node.js": "55b8e2b03f3ac13e72407ea4bac4bb43f9e150b37e6851a6bb62ba8d14ce1df9",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/operation-node/drop-column-node.js": "87741508ae12e1921695d71bea1746299ed246d60280337fbebbab121ccba664",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/operation-node/drop-constraint-node.js": "477d37d5354172803be1b0a81bdc5c9a956e13d14aa9b7ab77e21cda89504aec",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/operation-node/drop-index-node.js": "4d2b331a14dd67fcf4594c931b727a1eafbe2b9f3ee40c9418f10ad38197bf68",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/operation-node/drop-schema-node.js": "fe05345c33271c5739fd59ccaba8e58d7d09e0c2e68c46058acfba48c6f02b39",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/operation-node/drop-table-node.js": "68500bb3d53439d9f6651bbc4adbf913d7f42fff4234e01641cdd572cdbdee7c",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/operation-node/drop-type-node.js": "eadf89bd531abd40480da700f67c08474e26341de97ff66966eee31c67f72f90",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/operation-node/drop-view-node.js": "f1e94b2502529c69fd2e8d188395f83d02a16ccf670bb0c58d6831f0b90cbf0a",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/operation-node/explain-node.js": "ee212187b19cfb6a5f085e379822de17ed47b069cb6c382e54ef5e4334d11b2f",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/operation-node/fetch-node.js": "efa6055fbb3609194c9d59fb5f8a9330cc737f76a9b513ba0dc39511075a9358",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/operation-node/foreign-key-constraint-node.js": "ce741b332176f9b62fed495e88ca21f0e028f659873b7410530e2c1d6cb2c28f",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/operation-node/from-node.js": "645c6b94489e3277a87f3922afee2437f139cc098db8dbfe46cb74fa3f48e766",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/operation-node/function-node.js": "05a3333357cc1f2d2c3c0b66363a608bec3e82fc140947cddac8df5e0853a579",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/operation-node/generated-node.js": "211cbb39f3d9fda27dd70e57250ddb19745abd14040b5ba1d5b525918b700b91",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/operation-node/group-by-item-node.js": "c9e501f30f39c3432bc970b1ad6b324112e230e9bc851bc1203b3c7fb3c009c9",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/operation-node/group-by-node.js": "02b9b6a9ec26899ce3b712c32b6bd84c8f1f262017685757013164829a8a0a44",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/operation-node/having-node.js": "2a951b273f40ebfd20194cb02096371939fc2a1331a3a413192f141b06715154",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/operation-node/identifier-node.js": "1ae55799148d9402c6de965a9854add2761432289832ab86fa39f22222ba6aa9",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/operation-node/insert-query-node.js": "62d2fc473beca806b145511fba71b78d97cb495381634a3d50b49f2d453fa3c7",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/operation-node/join-node.js": "665d7b3fb97cce05ccde078b5f724033a825bf5b5a00b8417b3700c45a848795",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/operation-node/json-operator-chain-node.js": "ec97d9d59511f25bab00baf61f01a7bc38da3329fad4ec85e2a7eef3e027bddb",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/operation-node/json-path-leg-node.js": "2ff9e1d24ae5a3c6bb28e6eaf24e2adeb923afa1554b495528791bee60508545",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/operation-node/json-path-node.js": "a24160f11a859ff6bfad7f250e19d8ab9934747181faa5aa92cafd12973c7102",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/operation-node/json-reference-node.js": "f1dd367f7c6be020c0e633dd70b9b5dffc9996a650707c24921b06aa0b1499e0",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/operation-node/limit-node.js": "932e847b5563002840bfa91b43578bd5b217d03b3f013f2bfd11d15ab4475020",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/operation-node/list-node.js": "5653a14d3b0911392f64fe45435869597d216eac2573523a41b61162b9122fc2",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/operation-node/matched-node.js": "25251e0267e67a811eeee07ccf8003ac51df0f5ed741b540f37f2b756c8dce4d",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/operation-node/merge-query-node.js": "ee57c467ceab671d773f9f026967c67c5dc7e1b1760e5ebf5eceda5db87556db",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/operation-node/modify-column-node.js": "657ecaa13dc6860baf9bde928b93e81feb76f7356e7c6f54082032c935e3c08c",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/operation-node/offset-node.js": "606d06630dac8942fe7241f8205dc43344e9cb3f67005791240749542e2d035f",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/operation-node/on-conflict-node.js": "dc1dfe8f806d8dbc548443e39766dc68863674f7679a9a9f7bf06068d83fbd1f",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/operation-node/on-duplicate-key-node.js": "45098c8d1060253ba525af190e5ac386b69a6b40e21e57824c9c0751f3dec3b5",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/operation-node/on-node.js": "87d2f5d9321d4f9846428fa463e11bcd7c3367d73af69caf0b30f7e9acb08e1e",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/operation-node/operation-node-source.js": "1a01eae5f625dfc36bcd72b3b8e8c64f78457c1accb539da56f295d17e6e58ff",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/operation-node/operation-node-transformer.js": "015c8ba4880a44bf3120533c4515471e07e08bb8f8fe84e7ce54512157955463",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/operation-node/operation-node-visitor.js": "3d5d3f57ba58b5e1b1b72d65fbf3cc5e53cafbd99e3f5fca39ab29d359876b25",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/operation-node/operation-node.js": "58dffdc9fa9ab40ceefdb55a10cc66021828b9a2ccb0decf89250a1aa72bc60c",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/operation-node/operator-node.js": "869cb75f571829ffbeccbe0693534ccf303e2b66c97c865b576036f41c56a169",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/operation-node/or-node.js": "c091c4972531c8dea93c80b719ce3ce1a5d77ba5c421d442d89891dc9e0ae382",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/operation-node/order-by-item-node.js": "eb55936bc51145614d1e2aa783ff5eb1cf3ebb9bd33119291215c64995d21294",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/operation-node/order-by-node.js": "37b1da9bc3b96ab50527e1cdf86147e60e7c00830cdacbbb7805af7d145f80b5",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/operation-node/output-node.js": "f59f08e1b3d9e23a25c7caa9ce8f6906b277e811892ec117bc4bad01e1070bcd",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/operation-node/over-node.js": "5a3a04c0d632b3d88d26ae82f6038eb1f1bbe07c1fa658e1b361ced3fef0217c",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/operation-node/parens-node.js": "0a230672caf5e8239f1c37d01c52c6581fbd557df9242a82855b5fc76b8d5a53",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/operation-node/partition-by-item-node.js": "f046cdee32419a6ca3688ce95484c820973ae68f4d9291e2f142fc74d971555d",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/operation-node/partition-by-node.js": "fc0b738203098b757d37a1d3d3b1d8803fcfe5a604fb0de763881bd8b792ae40",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/operation-node/primary-constraint-node.js": "eefed1b85d53d6e5f234a4758bcaacd47eb9b7ae30319e0981c1ae5740b84405",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/operation-node/primitive-value-list-node.js": "92474ac5dc890ca68b49cdb82cd77b898fff0cff392eafc84a5d4287af814fb7",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/operation-node/query-node.js": "e99a22df586242a3675ab0ba1899eb5cc07606931f42e38ccb2fd3e48f82675c",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/operation-node/raw-node.js": "262730ec7655cb5429d22a9a5e9d0eacec99ac10d2ec2d34629ae0cd9b51307e",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/operation-node/reference-node.js": "e55913482ade61a0aa45816624c265c323c297fa6cbec9fb534ce6c1da7780a7",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/operation-node/references-node.js": "8eb898a270f06ffa1290bb40535d77f22b24fd82877875687f482fa631d606ba",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/operation-node/rename-column-node.js": "3606f2d11634147dbc1e895b512d4eb28c7cdac49d19f9f8031a7b76a19fde88",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/operation-node/returning-node.js": "56f5520426377246ec954ef334fa8f6a3b0df9e945b28dd0d0306e0fd21cd489",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/operation-node/schemable-identifier-node.js": "757d8f02c76aae9e037d1efc18c77bca17afa4d0252cc49cced11ef02767d914",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/operation-node/select-all-node.js": "f3d3349929249e15c61da2ee5144d10a544dd7b368811525b02ba6b8d45fc82b",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/operation-node/select-modifier-node.js": "163f27ba07ead9c19b17c1784da9ee33ee9c8fa28b2e8b06199c6d5515a16674",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/operation-node/select-query-node.js": "a67237514d64488292b28462d761d7e32f7b94258037b97e43b61cdcceb95ece",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/operation-node/selection-node.js": "fd89f335da285bcfa980542db56a54b7543bba9c6756284cd4d8277054660b9d",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/operation-node/set-operation-node.js": "1e52cba70d51326e990d0f2c086e9875b381a10fc521467bdc4f2a40c919e1f6",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/operation-node/simple-reference-expression-node.js": "424d77eb8d7170227dcef6983530c72936beda4f2523d736b7df8038f9fae4e5",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/operation-node/table-node.js": "d41cdb31d5f7023814df558b3fea709c99b297cb85edf89fedcb3a47dd5728c9",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/operation-node/top-node.js": "32d387ed37967562e9304e55d8ad9c397ebfd08943e40851225ed02f1928b5aa",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/operation-node/tuple-node.js": "75a246c20190ac4c8219abb4473fe2c378feeb96b94343c2295ed20cdddcc9a9",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/operation-node/unary-operation-node.js": "ef5fb72abc126a5cfefe7c2d7cb7541fb7ae2478a5911921c472948cb021fd4b",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/operation-node/unique-constraint-node.js": "90f55e96916f65662795c8e246fbb3a48acce61b66abdec32acf8252096f3da9",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/operation-node/update-query-node.js": "ff59170667b9b100ad16599fed52847b5c24d4faa6cc092512bf7fbaa0db3063",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/operation-node/using-node.js": "96494cf186fd4d0283357642ace38a72ff2e0f80a64465477e5abb01d442693d",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/operation-node/value-list-node.js": "828f7fbfe74943937a4a48bc649c22c6c689680ea18d3a9b918fc9615373083b",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/operation-node/value-node.js": "15416a29c8228aba0dda56fc45fae548029148583c7fea6acdf9f10e4909597d",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/operation-node/values-node.js": "9f69416283d15c8869e8233a54bab6a20ce18453df723d9d83403209268dc1f9",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/operation-node/when-node.js": "e4c308bbfdd0ad7b1e634679986917f8adf7eb6e9ffbf263c2bccc5bd5ee3e78",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/operation-node/where-node.js": "1567253471091ca914283445aedf9e52965a95e41630d273fc283e0927b9482b",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/operation-node/with-node.js": "494adc469ecea1387402e38ae2c0046a6bbfb8b5fbfa858c852428855bd455c0",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/parser/binary-operation-parser.js": "811984d665c49b13c42ee9beb0bd82b702b9ac82c1fa802e2312e4ef880bad69",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/parser/coalesce-parser.js": "206a3b1368f8b6db762f4126f8e9f829f4fea2f686a96fa5eb38ce57710d850f",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/parser/data-type-parser.js": "55469a0312f74333a05060ee2a908d417ed81f8e13f648a51449c881376479ed",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/parser/default-value-parser.js": "4c202dfac44bdef91500abcedf06151a67c80edc7ed232161307f270f1f70d6d",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/parser/expression-parser.js": "0c98873876d79c2e4e551d93121f6e329f9f0d2b453e636cafe8a80e511d6851",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/parser/fetch-parser.js": "22c1dd31314bad3c9529982e3f8d30be63eb43a7c85bc56674b6a55a038abd0c",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/parser/group-by-parser.js": "7de916aa70f5e0a95baf08806dc4485b50521f032c93ba0e290d4f1822ae6f24",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/parser/identifier-parser.js": "5c4aeecd1d186cd46052a0834beafbc3e5ab719c0c52bdd4e55ea49451ba2ef9",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/parser/insert-values-parser.js": "d53c32af21a4ef6887f294134ddcd445c896e639b768655895f4fbbf3e39a80c",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/parser/join-parser.js": "faf395099eb91cd8b5594c5475c293eaf7035a9c6567aac48a1fa1b85b27aab9",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/parser/merge-parser.js": "6f7c0d96a5810f2090c9f14f05d196cddbe7426026559a1dc3fe821b471a4121",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/parser/on-commit-action-parse.js": "e5b08a1f8f5d637aca82c65b0e407fd87b8b8efd26f49f1bd3007477cde6191b",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/parser/on-modify-action-parser.js": "85bd852178a0b70aa501864b0be472f1fb46d2456835f51d9624585d44fbf3e6",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/parser/order-by-parser.js": "51c2ef391abdc7ee65ca6930051f2477f03bdfce6cd9f46edc2eeac4f5825de5",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/parser/parse-utils.js": "6ca743176c9368c74b72cefd8d247fe35dcc669c12118e3f6daa5bca6d121786",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/parser/partition-by-parser.js": "8e1b52c98760247aba821bdf479daaec10e8b1d195c9af0f540eafaffd063a96",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/parser/reference-parser.js": "79e5933b1cf183133a6c02e7054d129af4eede7157d962df5ae032ed8cec0c7c",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/parser/returning-parser.js": "8f38574e47d3dfa8176805d4253e6fae5b46d880aa40e3fcc55147eae5997063",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/parser/select-parser.js": "1600366d3e14f79d0e3d8fc99f6e1e38cb0f9bd1e589ff7a4f64ebda359b31b5",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/parser/set-operation-parser.js": "96ab15cb920ec120c631f2442237c1d022bf4df89ae034a8ed6c7b18c70caaea",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/parser/table-parser.js": "34504cfda28d61b2708c902245697b6be9c22b4f525bc042b4e09e878b82bafd",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/parser/top-parser.js": "ee6257b5ec062cc6d00b26251a5c7ed20e14d6c8634ef62531a97e45de77bd07",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/parser/tuple-parser.js": "6d757560b5470d2eb6e4afca8d79e1bed70e6eb6754c97333923abf12f262531",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/parser/unary-operation-parser.js": "bfc6b546f0454094bac580033ac2d87cf9e15db6b0c53001fafbbc4e5a6087f9",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/parser/update-set-parser.js": "7926e416f5e421ee105023008d4a6ff390a15ccecfdbc0a617a184a17d53a8fb",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/parser/value-parser.js": "bbc5e2cf8555c476e861350d6d657b9da3325e158b57ba7e35a41035460e6ef6",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/parser/with-parser.js": "854f40ce6d3b96bee6b174fa045e5c0442b2c46e7248c4d58651c9daf1266c6c",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/plugin/camel-case/camel-case-plugin.js": "e19bb89afc69cf6fd2964d1ae9118f653c4b2a402a7222921b7d1631c0f05ae9",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/plugin/camel-case/camel-case-transformer.js": "907542f76753e4dbe699e05e0a977792260583c0d64aa05b929ea9edacb90da3",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/plugin/camel-case/camel-case.js": "add7580c31886cf7143cb52d026b6ef39d95c47c5be4c2019e7eb74f75be1906",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/plugin/deduplicate-joins/deduplicate-joins-plugin.js": "4118e31261e27aaa60764df8d5b257b4f224c758d6119067c06c995e082ec92d",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/plugin/deduplicate-joins/deduplicate-joins-transformer.js": "43840ba97dbf5676eb50e29e792b7acaec91bd024542f05efff485ceeba99ed9",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/plugin/immediate-value/immediate-value-plugin.js": "aba7c20284e9aaecc80bd39b9cb74f9c66f172d794a044d164150e2069a2261c",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/plugin/immediate-value/immediate-value-transformer.js": "97f4ca32dae44c7184361580a1547a50a37658028fb8c6bdf3c7a8c8670cd993",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/plugin/kysely-plugin.js": "76f4027bf5c532fbdfc291c69f0f1555abd01ed743bc8609c3605d7e5093f28a",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/plugin/noop-plugin.js": "a6e2db3ecc35fb456276a97538810d9971e8d875334c4df26bdb337b9bd56a63",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/plugin/parse-json-results/parse-json-results-plugin.js": "299e770730bf5dd1d0dfaa8daa05e6aeaf865c1a6a5ac3e1b419584e1f5989b1",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/plugin/with-schema/with-schema-plugin.js": "b9aff02102def21a150e5cc3d9533372819efc1ce8a9511bb6bff7ee7eecb99e",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/plugin/with-schema/with-schema-transformer.js": "05de6e91bbbd02ff47bdf671f0bcfb515ddae954e2fb03980cf4e2a8dd8bd5b4",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/query-builder/aggregate-function-builder.js": "3a745d8d8da0d27e3f7bca3b99500aba4eafa53e78861274a6bf7f798b67f5f5",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/query-builder/case-builder.js": "3d7fb002d8649fe2817e5f23dab8cb8e65817aca8249814fac5944097dd01f56",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/query-builder/cte-builder.js": "9ef4cab96ce173bfd728328a8e799bb4dd252ca283f5efd4a1cebf79672c7a7d",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/query-builder/delete-query-builder.js": "b088d353dc7a4b95204d1ca87e1324c9fbbc8df867bf3ba58dd758b3b74d4edc",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/query-builder/delete-result.js": "0bb35e4b6af951afca51a3de1c0da8273a5be70cc0919e7de36fc9a2e50a0010",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/query-builder/function-module.js": "c1ca331dd4cefd38562b5ccfa1edaebceb9aca02ec66e3f271a3cef5fb8e15cc",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/query-builder/having-interface.js": "540301e73a9657615d2ec32c613966c8d91895cec9c72110b151d0e1ba9d2e0e",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/query-builder/insert-query-builder.js": "4e4a12c4405d86f11af3ebe5eaea9df5045f80e8eb25caae78a6fdc78974e789",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/query-builder/insert-result.js": "69f56ea9677de0a8c4c99962e8fa974437c17d45de94d3e2c21e899c88aba2f1",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/query-builder/join-builder.js": "1bd0230d0b03fedf5f61555c9fc828b4cd5cdfa11bcb8fcdbddff94007ca02f5",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/query-builder/json-path-builder.js": "6396df5310eed4beec3f1b437e8d2362a4769aa3a0ceb5fc776269c922e53ec1",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/query-builder/merge-query-builder.js": "2424e398113f86b8964787842d9e4095ccf86fce69f763e14bbc375b98d4facb",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/query-builder/merge-result.js": "cec8cca927762b8140833c713a999db2e83c962db9a069a337c0e354e84ba946",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/query-builder/no-result-error.js": "67efb371a70c69a3b3d09cea71b74d4a352b1efe97941e8954da451faeca0651",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/query-builder/on-conflict-builder.js": "dd9640ad7b58e58303536ff9837f26f9f28cd7e058620ee8a6bcfbcee9bfbd21",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/query-builder/output-interface.js": "e9bbccfa0087cf6cceb169e973994d1186ce72abbecfbbcc23b99c54aadc260f",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/query-builder/over-builder.js": "3395ab99bbb030bed81fac8a167a4dbdc3f39f684afbcc464d49f3b249b6db5c",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/query-builder/returning-interface.js": "503067dd1c3e396bc58f5bc99ff6dfcafa6361bffe7c41030d6b2be8d5afe097",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/query-builder/select-query-builder-expression.js": "5b7c5de4b63c5d7da56a26f2f8a89bb4bce053a9e8a982db62d8a6ac1815a76c",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/query-builder/select-query-builder.js": "dc77dfeb7bb4d7780d65f0c3339020ab620b0f44e2ecc37eca44bdd7f42d78a3",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/query-builder/update-query-builder.js": "849809302da578754c691a006d828e696040a0eaa6356a0ad44e86a6d53fa155",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/query-builder/update-result.js": "3fbb71868ab5c53ed42a048ae8237229b7eb623553c7eeb1a99256f64aecb88d",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/query-builder/where-interface.js": "167af01a247a495b92b3cc17346b6c3929efc0345249efd940244a60b3f12d7f",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/query-compiler/compiled-query.js": "8cd7d9ae81b4f1a90ac030af5e7e01b7e0b0c996e7f348f9f2dd4be5a7f37121",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/query-compiler/default-query-compiler.js": "e1f03241ce98f42d0d8e29265bac83fe4649771eb5ca390379b572ed5285ef71",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/query-compiler/query-compiler.js": "bcbbfb74e9e8e6675e7d8dcef77df3208ff46eac6c3567aa366e83ed1356a8da",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/query-creator.js": "01a306d5d0644cd3b9aeda31c088b0ad0625b9360a0b4a6f074414a6a2f2057e",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/query-executor/default-query-executor.js": "7ad0032ea5a2fa966f27ef3664e3f0cbb173558c0ae969dcb3c6f55867b44bc4",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/query-executor/noop-query-executor.js": "92ec228f803d5f594c4231c496d058501c4b786a0a23a072a5788cede71877f2",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/query-executor/query-executor-base.js": "017816d958e0d5e3aedec312e3ab555d0f7fc04fe468706f80643bb652e2dffe",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/query-executor/query-executor-provider.js": "5f075d3b695264be455a00000f4c8e054d7adc099272506f549091f0e5f1ac71",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/query-executor/query-executor.js": "1f028f21025a90f243dee8fef5d9ff177dad2bd3f631be4deeb6cc19216429a6",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/raw-builder/raw-builder.js": "fb35c02e7e331a182b82bb9e98c94f38f54b12022719794a59e98577d215cbff",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/raw-builder/sql.js": "5256ac002c3ac27bcc98a1a7e0721cf7a6a66e625666eb4818aff0cec4abca94",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/schema/alter-column-builder.js": "465d43ea7c287c911194d3015704bf7d31f2b740ba881426e10a43fc9e9e6e8e",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/schema/alter-table-add-foreign-key-constraint-builder.js": "6f24871a36abc4b6a42a6b67dbd0ec8e8297ef558a03956485ffcbcb207b90dd",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/schema/alter-table-add-index-builder.js": "355851e31b7ac2eaad97f2c5efc3d4214927dc94ff035feb724626abc2f2e500",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/schema/alter-table-builder.js": "8bdd3187c1377e94515680d70f424bbee64b3292ca520d9faef9382f00c44506",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/schema/alter-table-drop-constraint-builder.js": "4a439f8814677a3bc0f78f1c4a1f71a4f705c31cb7e7c8ebe3ad967025e7eac8",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/schema/alter-table-executor.js": "30f2a7c93f9a5726c4f6ed7e134b209052ad663bca6af5afc25946b26359e89d",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/schema/column-definition-builder.js": "46b9b196967a88ea796e1df4dc60ba0b9713af659822dee9962d73a128540f72",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/schema/create-index-builder.js": "c591716f546f5257ae61d10ada7473041b9fb3cefde2dea6f5cbd125fb47e176",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/schema/create-schema-builder.js": "e81b6ef71fd9f3d83ef4c17fdea7228864ce2b358d30a1d56efd84453b32e6a7",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/schema/create-table-builder.js": "c5707097cb05a6a942962e97a82b069f5d8ccde89f0dc4c4d5370fc41c2f7c3f",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/schema/create-type-builder.js": "1c7ff2f1de1dca973f5a08b12026774e6a62b14cec22307b1207fea276955aec",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/schema/create-view-builder.js": "6ed921a729120e587dea6b35630b901895e9d4f8a6e5f383da9e65288c252936",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/schema/drop-index-builder.js": "96be3dad02f3c8a7c15537ec5ce4ed2fb75cf9f11f8b6261e28046be8b4d1dae",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/schema/drop-schema-builder.js": "dea9e8355b54c73fba1c15d5773343dc7c60d51cfc54264ced81bf54facbdac9",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/schema/drop-table-builder.js": "dd459c58294a94365624b5d2e2c5aeece3847b50fab6df45504689ea42ad49a5",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/schema/drop-type-builder.js": "ba08b5c39246d9e3e72d08635be60cc00cef550b4c6cf97db1a94735d76d09dd",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/schema/drop-view-builder.js": "6004b4d3788d51377c84a4c8a8f08303060e252f9cba496f342eb9cb3cef9852",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/schema/foreign-key-constraint-builder.js": "0854930052b89f086c25caeeca346c6586e34dd2aa6a292e691365dab68d4293",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/schema/schema.js": "a41546a34d0f0b43040f1d9a7c5872cda76b150bbc8caf52033d08facff4bea3",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/schema/unique-constraint-builder.js": "2a6cf683c0fd62191fa4b02f3ea206c157dcfda0fe355a49d0c62754cae277d1",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/util/column-type.js": "a12e246be06fd237cbc8165f383dc1b6fa24e42164bb5767e0498c68d3f4d983",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/util/compilable.js": "173f66cbceb011720114d3321a37cda9fcca992af24ac888842891c947cdf9e6",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/util/deferred.js": "9e511bf93f67de4d616ae92570e5437cc934fb43f2f574fe54898aeae54ad9cc",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/util/explainable.js": "1132032609d169b0da80540b1e1cc6d4d090ecee966ce9f9dc90462984481868",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/util/infer-result.js": "9becc3e65e1b630a56988b21e01fd72a9f2bdfdf3a3852c1c19b374b6fd65199",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/util/log-once.js": "a12f20e7576677c272af78f99d50b84ec512888f909fddcb17ef172899256202",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/util/log.js": "671369fa5cacdd395995fd764193bcb449d0c5f48861ad57edbf7b37fff07e82",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/util/object-utils.js": "7f86775c1b39b004e3eb346f6283d0632a1f2edc2bea8368433b638239e623b9",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/util/performance-now.js": "400f3f41dbbfbc390e96dd84eb949f7f4e2b1443b3284accc81192ccb0bab358",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/util/prevent-await.js": "4a2d4cb17801d4baaf7d0e79816c350c7484698991f929fce4c0143e768a5329",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/util/query-id.js": "1de6a93565019cec1e08333f569d7f1bb2b5fbd6ce0f89e8679b2acf48c111c3",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/util/random-string.js": "ec04474bf1ae0370c5006ded778827223abe69441d0cf97331eb0700660502d6",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/util/require-all-props.js": "f6c5e97a0cbc647829f3b4b5de5accb392eaddd0bcc03f08116d052e6ed2f3ad",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/util/stack-trace-utils.js": "61697dc58e69ab6bbcc32144cc1fdae52c122489aefb5490f2588caa207dcfb4",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/util/streamable.js": "01d42c3c7407a23c9b818e5a33d961b60785b94f00b4ddb7d77c9ff80c388b08",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/util/type-error.js": "9c32a4302c237198448fc0acd25c44daa2edea4844fe6da02c3d3f14c532d3b1",
"https://cdn.jsdelivr.net/npm/kysely/dist/esm/util/type-utils.js": "87458a2f28a5d816954f1e6f27f2ee302d142822cd56dca2e9600eb68fc50601",
"https://cdn.skypack.dev/-/debug@v4.3.4-o4liVvMlOnQWbLSYZMXw/dist=es2019,mode=imports/optimized/debug.js": "671100993996e39b501301a87000607916d4d2d9f8fc8e9c5200ae5ba64a1389",
"https://cdn.skypack.dev/-/ms@v2.1.2-giBDZ1IA5lmQ3ZXaa87V/dist=es2019,mode=imports/optimized/ms.js": "fd88e2d51900437011f1ad232f3393ce97db1b87a7844b3c58dd6d65562c1276",
"https://cdn.skypack.dev/debug@4.3.4": "7b1d010cc930f71b940ba5941da055bc181115229e29de7214bdb4425c68ea76",
"https://deno.land/std@0.160.0/_util/assert.ts": "e94f2eb37cebd7f199952e242c77654e43333c1ac4c5c700e929ea3aa5489f74",
"https://deno.land/std@0.160.0/_util/os.ts": "8a33345f74990e627b9dfe2de9b040004b08ea5146c7c9e8fe9a29070d193934",
"https://deno.land/std@0.160.0/async/abortable.ts": "87aa7230be8360c24ad437212311c9e8d4328854baec27b4c7abb26e85515c06",
"https://deno.land/std@0.160.0/async/deadline.ts": "48ac998d7564969f3e6ec6b6f9bf0217ebd00239b1b2292feba61272d5dd58d0",
"https://deno.land/std@0.160.0/async/debounce.ts": "dc8b92d4a4fe7eac32c924f2b8d3e62112530db70cadce27042689d82970b350",
"https://deno.land/std@0.160.0/async/deferred.ts": "d8fb253ffde2a056e4889ef7e90f3928f28be9f9294b6505773d33f136aab4e6",
"https://deno.land/std@0.160.0/async/delay.ts": "0419dfc993752849692d1f9647edf13407c7facc3509b099381be99ffbc9d699",
"https://deno.land/std@0.160.0/async/mod.ts": "dd0a8ed4f3984ffabe2fcca7c9f466b7932d57b1864ffee148a5d5388316db6b",
"https://deno.land/std@0.160.0/async/mux_async_iterator.ts": "3447b28a2a582224a3d4d3596bccbba6e85040da3b97ed64012f7decce98d093",
"https://deno.land/std@0.160.0/async/pool.ts": "ef9eb97b388543acbf0ac32647121e4dbe629236899586c4d4311a8770fbb239",
"https://deno.land/std@0.160.0/async/tee.ts": "9af3a3e7612af75861308b52249e167f5ebc3dcfc8a1a4d45462d96606ee2b70",
"https://deno.land/std@0.160.0/bytes/bytes_list.ts": "aba5e2369e77d426b10af1de0dcc4531acecec27f9b9056f4f7bfbf8ac147ab4",
"https://deno.land/std@0.160.0/bytes/equals.ts": "3c3558c3ae85526f84510aa2b48ab2ad7bdd899e2e0f5b7a8ffc85acb3a6043a",
"https://deno.land/std@0.160.0/bytes/mod.ts": "b2e342fd3669176a27a4e15061e9d588b89c1aaf5008ab71766e23669565d179",
"https://deno.land/std@0.160.0/crypto/_fnv/fnv32.ts": "aa9bddead8c6345087d3abd4ef35fb9655622afc333fc41fff382b36e64280b5",
"https://deno.land/std@0.160.0/crypto/_fnv/fnv64.ts": "625d7e7505b6cb2e9801b5fd6ed0a89256bac12b2bbb3e4664b85a88b0ec5bef",
"https://deno.land/std@0.160.0/crypto/_fnv/index.ts": "a8f6a361b4c6d54e5e89c16098f99b6962a1dd6ad1307dbc97fa1ecac5d7060a",
"https://deno.land/std@0.160.0/crypto/_fnv/util.ts": "4848313bed7f00f55be3cb080aa0583fc007812ba965b03e4009665bde614ce3",
"https://deno.land/std@0.160.0/crypto/_wasm_crypto/lib/deno_std_wasm_crypto.generated.mjs": "258b484c2da27578bec61c01d4b62c21f72268d928d03c968c4eb590cb3bd830",
"https://deno.land/std@0.160.0/crypto/_wasm_crypto/mod.ts": "6c60d332716147ded0eece0861780678d51b560f533b27db2e15c64a4ef83665",
"https://deno.land/std@0.160.0/crypto/keystack.ts": "e481eed28007395e554a435e880fee83a5c73b9259ed8a135a75e4b1e4f381f7",
"https://deno.land/std@0.160.0/crypto/mod.ts": "fadedc013b4a86fda6305f1adc6d1c02225834d53cff5d95cc05f62b25127517",
"https://deno.land/std@0.160.0/crypto/timing_safe_equal.ts": "82a29b737bc8932d75d7a20c404136089d5d23629e94ba14efa98a8cc066c73e",
"https://deno.land/std@0.160.0/datetime/formatter.ts": "7c8e6d16a0950f400aef41b9f1eb9168249869776ec520265dfda785d746589e",
"https://deno.land/std@0.160.0/datetime/mod.ts": "ea927ca96dfb28c7b9a5eed5bdc7ac46bb9db38038c4922631895cea342fea87",
"https://deno.land/std@0.160.0/datetime/tokenizer.ts": "7381e28f6ab51cb504c7e132be31773d73ef2f3e1e50a812736962b9df1e8c47",
"https://deno.land/std@0.160.0/encoding/base64.ts": "c57868ca7fa2fbe919f57f88a623ad34e3d970d675bdc1ff3a9d02bba7409db2",
"https://deno.land/std@0.160.0/encoding/base64url.ts": "a5f82a9fa703bd85a5eb8e7c1296bc6529e601ebd9642cc2b5eaa6b38fa9e05a",
"https://deno.land/std@0.160.0/encoding/hex.ts": "4cc5324417cbb4ac9b828453d35aed45b9cc29506fad658f1f138d981ae33795",
"https://deno.land/std@0.160.0/fmt/colors.ts": "9e36a716611dcd2e4865adea9c4bec916b5c60caad4cdcdc630d4974e6bb8bd4",
"https://deno.land/std@0.160.0/io/buffer.ts": "fae02290f52301c4e0188670e730cd902f9307fb732d79c4aa14ebdc82497289",
"https://deno.land/std@0.160.0/path/_constants.ts": "df1db3ffa6dd6d1252cc9617e5d72165cd2483df90e93833e13580687b6083c3",
"https://deno.land/std@0.160.0/path/_interface.ts": "ee3b431a336b80cf445441109d089b70d87d5e248f4f90ff906820889ecf8d09",
"https://deno.land/std@0.160.0/path/_util.ts": "d16be2a16e1204b65f9d0dfc54a9bc472cafe5f4a190b3c8471ec2016ccd1677",
"https://deno.land/std@0.160.0/path/common.ts": "bee563630abd2d97f99d83c96c2fa0cca7cee103e8cb4e7699ec4d5db7bd2633",
"https://deno.land/std@0.160.0/path/glob.ts": "cb5255638de1048973c3e69e420c77dc04f75755524cb3b2e160fe9277d939ee",
"https://deno.land/std@0.160.0/path/mod.ts": "56fec03ad0ebd61b6ab39ddb9b0ddb4c4a5c9f2f4f632e09dd37ec9ebfd722ac",
"https://deno.land/std@0.160.0/path/posix.ts": "6b63de7097e68c8663c84ccedc0fd977656eb134432d818ecd3a4e122638ac24",
"https://deno.land/std@0.160.0/path/separator.ts": "fe1816cb765a8068afb3e8f13ad272351c85cbc739af56dacfc7d93d710fe0f9",
"https://deno.land/std@0.160.0/path/win32.ts": "ee8826dce087d31c5c81cd414714e677eb68febc40308de87a2ce4b40e10fb8d",
"https://deno.land/std@0.160.0/testing/_diff.ts": "a23e7fc2b4d8daa3e158fa06856bedf5334ce2a2831e8bf9e509717f455adb2c",
"https://deno.land/std@0.160.0/testing/_format.ts": "cd11136e1797791045e639e9f0f4640d5b4166148796cad37e6ef75f7d7f3832",
"https://deno.land/std@0.160.0/testing/asserts.ts": "1e340c589853e82e0807629ba31a43c84ebdcdeca910c4a9705715dfdb0f5ce8",
"https://deno.land/std@0.211.0/path/_common/assert_path.ts": "2ca275f36ac1788b2acb60fb2b79cb06027198bc2ba6fb7e163efaedde98c297",
"https://deno.land/std@0.211.0/path/_common/basename.ts": "569744855bc8445f3a56087fd2aed56bdad39da971a8d92b138c9913aecc5fa2",
"https://deno.land/std@0.211.0/path/_common/constants.ts": "dc5f8057159f4b48cd304eb3027e42f1148cf4df1fb4240774d3492b5d12ac0c",
"https://deno.land/std@0.211.0/path/_common/strip_trailing_separators.ts": "7024a93447efcdcfeaa9339a98fa63ef9d53de363f1fbe9858970f1bba02655a",
"https://deno.land/std@0.211.0/path/_os.ts": "8fb9b90fb6b753bd8c77cfd8a33c2ff6c5f5bc185f50de8ca4ac6a05710b2c15",
"https://deno.land/std@0.211.0/path/basename.ts": "5d341aadb7ada266e2280561692c165771d071c98746fcb66da928870cd47668",
"https://deno.land/std@0.211.0/path/posix/_util.ts": "1e3937da30f080bfc99fe45d7ed23c47dd8585c5e473b2d771380d3a6937cf9d",
"https://deno.land/std@0.211.0/path/posix/basename.ts": "39ee27a29f1f35935d3603ccf01d53f3d6e0c5d4d0f84421e65bd1afeff42843",
"https://deno.land/std@0.211.0/path/windows/_util.ts": "d5f47363e5293fced22c984550d5e70e98e266cc3f31769e1710511803d04808",
"https://deno.land/std@0.211.0/path/windows/basename.ts": "e2dbf31d1d6385bfab1ce38c333aa290b6d7ae9e0ecb8234a654e583cf22f8fe",
"https://deno.land/std@0.57.0/encoding/hex.ts": "fa2206fb59cd5098dacaa82f72d1400d763d1497be7e6d5bed3ef964e03961e1",
"https://deno.land/std@0.57.0/hash/md5.ts": "0421b1c6ace83dc6a1b068ab8e24feddd5e8f7e9f3f2da44e1b62b7e795c7501",
"https://deno.land/x/grammy@v1.30.0/bot.ts": "9576361190e2dfcf7d2a665e6e20b66c15ae7a7cf81c25baea50b6c682b7a439",
"https://deno.land/x/grammy@v1.30.0/composer.ts": "dab5a40d8a6fdc734bfb218f8b2e4ef846c05b833219ddd3fdee3f145bb2660b",
"https://deno.land/x/grammy@v1.30.0/context.ts": "9ace341055f75fa9035941aed82617381ef608c6bd4b269c59428bc5b577cddd",
"https://deno.land/x/grammy@v1.30.0/convenience/constants.ts": "1560129784be52f49aa0bea8716f09ed00dac367fef195be6a2c09bdfc43fb99",
"https://deno.land/x/grammy@v1.30.0/convenience/frameworks.ts": "d5fce7be2c3d5f21db752b5b98d6eba97c7a2b18e5d41f4fc4654d387174b861",
"https://deno.land/x/grammy@v1.30.0/convenience/inline_query.ts": "409d1940c7670708064efa495003bcbfdf6763a756b2e6303c464489fd3394ff",
"https://deno.land/x/grammy@v1.30.0/convenience/input_media.ts": "7af72a5fdb1af0417e31b1327003f536ddfdf64e06ab8bc7f5da6b574de38658",
"https://deno.land/x/grammy@v1.30.0/convenience/keyboard.ts": "de39a47199a9dde779c396c951a0452080df0e964e9ea366ae4237acdc3302f7",
"https://deno.land/x/grammy@v1.30.0/convenience/session.ts": "f0ce5742f7938aae146946c8b84d29540d20f592193ebfc217cb79e6e1af33fe",
"https://deno.land/x/grammy@v1.30.0/convenience/webhook.ts": "53937566edaa258401a44594a8f750a15983952bd99aa4d21c6722a7aa1d77a9",
"https://deno.land/x/grammy@v1.30.0/core/api.ts": "9671698e5f7aa68a603d34d221be408b3bcb729a3a8c5364254a9a6b68553b46",
"https://deno.land/x/grammy@v1.30.0/core/client.ts": "0830ccfa575f926092431896071e1999de8a5bd829ffa6c21c1315d58227b51f",
"https://deno.land/x/grammy@v1.30.0/core/error.ts": "5245f18f273da6be364f525090c24d2e9a282c180904f674f66946f2b2556247",
"https://deno.land/x/grammy@v1.30.0/core/payload.ts": "420e17c3c2830b5576ea187cfce77578fe09f1204b25c25ea2f220ca7c86e73b",
"https://deno.land/x/grammy@v1.30.0/filter.ts": "dd30fa957e37a0857e471157bc5a21a13b8f5c3d145b512679aefb3ff5174670",
"https://deno.land/x/grammy@v1.30.0/mod.ts": "7723e08709ff7fd01df3e463503e14e4fd1a581669380eed70351e1121e8a833",
"https://deno.land/x/grammy@v1.30.0/platform.deno.ts": "68272a7e1d9a2d74d8a45342526485dbc0531dee812f675d7f8a4e7fc8393028",
"https://deno.land/x/grammy@v1.30.0/types.deno.ts": "e2b54fac56d6be3aab3fd240cdb4c8b9a72e226317a5dc073d07761d792159a8",
"https://deno.land/x/grammy@v1.30.0/types.ts": "729415590dfa188dbe924dea614dff4e976babdbabb28a307b869fc25777cdf0",
"https://deno.land/x/grammy_types@v3.14.0/api.ts": "ae04d6628e3d25ae805bc07a19475065044fc44cde0a40877405bc3544d03a5f",
"https://deno.land/x/grammy_types@v3.14.0/inline.ts": "ef999d5131968bdc49c0b74d2b0ff94fca310edfa06b02fe1ae1ac2949156934",
"https://deno.land/x/grammy_types@v3.14.0/langs.ts": "5f5fd09c58ba3ae942dd7cea2696f95587d2032c1829bba4bca81762b7ef73b6",
"https://deno.land/x/grammy_types@v3.14.0/manage.ts": "2bf2395311dcfdbb97d3227048eb877cac92d2a247563bb0e4f2e45acd4f99b1",
"https://deno.land/x/grammy_types@v3.14.0/markup.ts": "7430abcea68d294df73a433f621a37cf1281718d3e29e903ed1e474038c7489d",
"https://deno.land/x/grammy_types@v3.14.0/message.ts": "4054128d05fd2b7ea77fea47f995e5c4d268b7150bc7316f3f03fc203e6567ae",
"https://deno.land/x/grammy_types@v3.14.0/methods.ts": "8b6f31f5dd827586d0947f9e5e85db919138e55b383159126b29256c5f6d3519",
"https://deno.land/x/grammy_types@v3.14.0/mod.ts": "7ecea1d3f7085d64419b78183039c78d70d655aeaa8b07f118ffbfb823f5b0b7",
"https://deno.land/x/grammy_types@v3.14.0/passport.ts": "19820e7d6c279521f8bc8912d6a378239f73d4ab525453808994b5f44ef95215",
"https://deno.land/x/grammy_types@v3.14.0/payment.ts": "13a80dd951efee47caad8d71dc8efd293247a42ef4bfff587ca64316ff0d638e",
"https://deno.land/x/grammy_types@v3.14.0/settings.ts": "f8ff810da6f1007ed24cd504809bf46820229c395ff9bfc3e5c8ceaef5b2aae1",
"https://deno.land/x/grammy_types@v3.14.0/update.ts": "71cc0d5ec860149b71415ba03282b1d7edd0466b36e2789521a3b3a3d7796493",
"https://deno.land/x/pg@v0.6.1/arrayParser.ts": "e789bd021e08115642ea8a38af590f01793cfc68c78254712366a97de1fee7b7",
"https://deno.land/x/pg@v0.6.1/client.ts": "5e592fe051efe8b2edee7c7e584117f676f1b67b78d8482420462768501149a4",
"https://deno.land/x/pg@v0.6.1/connection.ts": "cf3777605e48011e5a6df7efcba4402a138760a63fa3932f5102f1379bb5673d",
"https://deno.land/x/pg@v0.6.1/deps.ts": "bf700077e7efb44404de820853596c4dc8c6bf8a450a4dffe243628d46525815",
"https://deno.land/x/pg@v0.6.1/message.ts": "52a244aaeaf090a8af6bcd683af42ced66a858a22e87ca0d58cbc1ca1aea9895",
"https://deno.land/x/pg@v0.6.1/mod.ts": "bd49e8a3694fdcee2e8ef2efb0283e2db527e38c1d88fa30d0a591e53266face",
"https://deno.land/x/pg@v0.6.1/parserBinary.ts": "f1513e8d1096f06f7ea5cd501d87a1a15cb7eacba95e2ade508a40ee57395a6a",
"https://deno.land/x/pg@v0.6.1/parserText.ts": "0e4275a9b3c375242ef22cab3c4077e835179b361e2252cef368183aaff23439",
"https://deno.land/x/pg@v0.6.1/pool.ts": "8e3434a8791289e9061f9bc1a47c7e757723001f0ec69a1d3ea0214a0f818a39",
"https://deno.land/x/pg@v0.6.1/query.ts": "6e5bed7e609444f54361922e27afe290aaca284c5e84f17d48022ef11b835b55",
"https://deno.land/x/pg@v0.6.1/reader.ts": "d31a6792409b1f4e1d5229856b7b03962b28f746c011bc85f3794691ef952593",
"https://deno.land/x/pg@v0.6.1/util.ts": "1a339828c32be5d6f9015a009e47de50fdc592981e66c9bab91fc687e6ba524b",
"https://deno.land/x/pg@v0.6.1/writer.ts": "5d5d8ee5a86d3b250f84c057642a3c950dd54fa2646c82f32bde1b17dce6baa1",
"https://deno.land/x/postgres@v0.17.0/client.ts": "348779c9f6a1c75ef1336db662faf08dce7d2101ff72f0d1e341ba1505c8431d",
"https://deno.land/x/postgres@v0.17.0/client/error.ts": "0817583b666fd546664ed52c1d37beccc5a9eebcc6e3c2ead20ada99b681e5f7",
"https://deno.land/x/postgres@v0.17.0/connection/auth.ts": "1070125e2ac4ca4ade36d69a4222d37001903092826d313217987583edd61ce9",
"https://deno.land/x/postgres@v0.17.0/connection/connection.ts": "428ed3efa055870db505092b5d3545ef743497b7b4b72cf8f0593e7dd4788acd",
"https://deno.land/x/postgres@v0.17.0/connection/connection_params.ts": "52bfe90e8860f584b95b1b08c254dde97c3aa763c4b6bee0c80c5930e35459e0",
"https://deno.land/x/postgres@v0.17.0/connection/message.ts": "f9257948b7f87d58bfbfe3fc6e2e08f0de3ef885655904d56a5f73655cc22c5a",
"https://deno.land/x/postgres@v0.17.0/connection/message_code.ts": "466719008b298770c366c5c63f6cf8285b7f76514dadb4b11e7d9756a8a1ddbf",
"https://deno.land/x/postgres@v0.17.0/connection/packet.ts": "050aeff1fc13c9349e89451a155ffcd0b1343dc313a51f84439e3e45f64b56c8",
"https://deno.land/x/postgres@v0.17.0/connection/scram.ts": "0c7a2551fe7b1a1c62dd856b7714731a7e7534ccca10093336782d1bfc5b2bd2",
"https://deno.land/x/postgres@v0.17.0/deps.ts": "f47ccb41f7f97eaad455d94f407ef97146ae99443dbe782894422c869fbba69e",
"https://deno.land/x/postgres@v0.17.0/mod.ts": "a1e18fd9e6fedc8bc24e5aeec3ae6de45e2274be1411fb66e9081420c5e81d7d",
"https://deno.land/x/postgres@v0.17.0/pool.ts": "892db7b5e1787988babecc994a151ebbd7d017f080905cbe9c3d7b44a73032a9",
"https://deno.land/x/postgres@v0.17.0/query/array_parser.ts": "f8a229d82c3801de8266fa2cc4afe12e94fef8d0c479e73655c86ed3667ef33f",
"https://deno.land/x/postgres@v0.17.0/query/decode.ts": "44a4a6cbcf494ed91a4fecae38a57dce63a7b519166f02c702791d9717371419",
"https://deno.land/x/postgres@v0.17.0/query/decoders.ts": "16cb0e60227d86692931e315421b15768c78526e3aeb84e25fcc4111096de9fd",
"https://deno.land/x/postgres@v0.17.0/query/encode.ts": "5f1418a2932b7c2231556e4a5f5f56efef48728014070cfafe7656963f342933",
"https://deno.land/x/postgres@v0.17.0/query/oid.ts": "8c33e1325f34e4ca9f11a48b8066c8cfcace5f64bc1eb17ad7247af4936999e1",
"https://deno.land/x/postgres@v0.17.0/query/query.ts": "edb473cbcfeff2ee1c631272afb25d079d06b66b5853f42492725b03ffa742b6",
"https://deno.land/x/postgres@v0.17.0/query/transaction.ts": "8e75c3ce0aca97da7fe126e68f8e6c08d640e5c8d2016e62cee5c254bebe7fe8",
"https://deno.land/x/postgres@v0.17.0/query/types.ts": "a6dc8024867fe7ccb0ba4b4fa403ee5d474c7742174128c8e689c3b5e5eaa933",
"https://deno.land/x/postgres@v0.17.0/utils/deferred.ts": "dd94f2a57355355c47812b061a51b55263f72d24e9cb3fdb474c7519f4d61083",
"https://deno.land/x/postgres@v0.17.0/utils/utils.ts": "19c3527ddd5c6c4c49ae36397120274c7f41f9d3cbf479cb36065d23329e9f90",
"npm:kysely": "ba2b09d8e5e4ae121ef77cfd971477858381650c26bcf28dfd3a8e5ed0535e8a"
},
"workspace": {
"dependencies": [
"jsr:@std/assert@1"
]
}
}

8
external/openai_gpt.ts vendored Normal file
View File

@ -0,0 +1,8 @@
// TODO:
// Gonna use it later to convert user
// text into Safebooru tags using ChatGPT
// import OpenAI from "https://deno.land/x/openai@v4.68.2/mod.ts";
// const newOpenAI = () => {
// const client = new OpenAI({})
// }

View File

@ -1,7 +1,7 @@
import { runBot } from "./bot/bot.ts"; import { runBot } from "./bot/bot.ts";
import { init as initNormalMode } from "./bot/normal_mode/init.ts" import { init as initNormalMode } from "./bot/normal_mode/init.ts"
import { init as initSetupMode } from "./bot/setup_mode/init.ts" import { init as initSetupMode } from "./bot/setup_mode/init.ts"
import { setupDB } from "./repo/exports.ts"; import { setupDB } from "./repo/setup_db.ts";
import { loadConfig } from "./config.ts"; import { loadConfig } from "./config.ts";
import { BotMode } from "./cfg/config.ts"; import { BotMode } from "./cfg/config.ts";

View File

@ -1,7 +0,0 @@
export { setupDB } from "./setup_db.ts";
export type {
UserID, User,
TableUsers,
SelectUser, InsertUser, UpdateUser,
Database
} from "./scheme.ts"