Типы для prompt
Closed this issue · 3 comments
использую prompt плагин, но редактор ругается на отсутствие prompt в контексте
// bot/instance.ts
export const bot = new Bot(BOT_TOKEN).extend(prompt());
// main
import type { bot } from "$lib/server/bot/instance";
export async function proceed_form_start(
context: CallbackQueryContext<typeof bot>,
) {
context.prompt // Property 'prompt' does not exist on type ...
}
однако если все сделать в одном файле, то все работает. то есть вынести из функции код в
bot.on("callback_query", async (context) => {
context.prompt // ok
});
использую prompt плагин, но редактор ругается на отсутствие prompt в контексте
// bot/instance.ts export const bot = new Bot(BOT_TOKEN).extend(prompt()); // main import type { bot } from "$lib/server/bot/instance"; export async function proceed_form_start( context: CallbackQueryContext<typeof bot>, ) { context.prompt // Property 'prompt' does not exist on type ... }однако если все сделать в одном файле, то все работает. то есть вынести из функции код в
bot.on("callback_query", async (context) => { context.prompt // ok });
К сожалению не все нужные решения приняты чтобы так выносить было удобнее
На данный момент получить нужные типы можно сделав
export async function proceed_form_start(
context: CallbackQueryContext<typeof bot> & typeof bot.__Derives["callback_query"] & typeof bot.__Derives["global"],
) {
context.prompt
}
В будущем подумаю как это можно упростить и сделать более удобным)
Но на данный момент честно говоря выносить логику из обработчика не рекомендуется (ибо так удобнее работать с TypeScript).
Если хочется вынести - нужно не допустить протекания в бизнес логику окружения (запросы, сообщения), но с prompt наверное это не так хорошо ляжет)
Вообще я могу работать с __Derives
на уровне типа CallbackQueryContext
, но на данный момент придётся сделать это самому)
Спасибо за быстрый ответ)
вообще у меня код вот так выглядит
bot.on("callback_query", async (context) => {
const data: CallbackData = context.data ? JSON.parse(context.data) : {};
if (data?.event === "form_start") {
proceed_form_start(context, data);
}
if (data?.event === "cancel_announce") {
proceed_cancel_announce(context);
}
if (data?.event === "delete_announce") {
proceed_delete_announce(context);
}
});
то есть разные сценарии обработки ответа в callback_query. Как вынести по-другому не придумал, если подскажешь вариант как сделать лучше буду признателен)
Спасибо за быстрый ответ) вообще у меня код вот так выглядит
bot.on("callback_query", async (context) => { const data: CallbackData = context.data ? JSON.parse(context.data) : {}; if (data?.event === "form_start") { proceed_form_start(context, data); } if (data?.event === "cancel_announce") { proceed_cancel_announce(context); } if (data?.event === "delete_announce") { proceed_delete_announce(context); } });то есть разные сценарии обработки ответа в callback_query. Как вынести по-другому не придумал, если подскажешь вариант как сделать лучше буду признателен)
вообще я бы посоветовал воспользоваться callbackQuery + CallbackData
Надо бы мне дописать ту часть документации))