gramiojs/gramio

Типы для 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

Надо бы мне дописать ту часть документации))