onError (Обработка ошибок)
Бывает, что в middleware возникают ошибки, и нам нужно их обрабатывать. Для этого был создан хук onError
.
ts
bot.on("message", () => {
bot.api.sendMessage({
chat_id: "@not_found",
text: "Чат не существует....",
});
});
bot.onError(({ context, kind, error }) => {
if (context.is("message")) return context.send(`${kind}: ${error.message}`);
});
Добавление хука только для определенных контекстов
ts
bot.onError("message", ({ context, kind, error }) => {
return context.send(`${kind}: ${error.message}`);
});
// или массив
bot.onError(["message", "message_reaction"], ({ context, kind, error }) => {
return context.send(`${kind}: ${error.message}`);
});
Типы ошибок
Пользовательские
Вы можете отловить ошибку определенного класса, унаследованного от Error.
ts
export class NoRights extends Error {
needRole: "admin" | "moderator";
constructor(role: "admin" | "moderator") {
super();
this.needRole = role;
}
}
const bot = new Bot(process.env.BOT_TOKEN as string)
.error("NO_RIGHTS", NoRights)
.onError("message", ({ context, kind, error }) => {
if (kind === "NO_RIGHTS")
return context.send(
format`У вас недостаточно прав! Вам нужно иметь роль «${bold(
error.needRole
)}».`
);
});
bot.on("message", (context) => {
if (context.text === "ban") throw new NoRights("admin");
});
IMPORTANT
Мы рекомендуем следовать соглашению и называть типы ошибок в формате SCREAMING_SNAKE_CASE
Telegram
Эта ошибка является результатом неудачного запроса к Telegram Bot API.
ts
bot.onError(({ context, kind, error }) => {
if (kind === "TELEGRAM" && error.method === "sendMessage") {
error.params; // это параметры sendMessage
}
});
Unknown
Эта ошибка - любая неизвестная ошибка, будь то ваш класс или просто Error.
ts
bot.onError(({ context, kind, error }) => {
if (kind === "UNKNOWN") {
console.log(error.message);
}
});