Skip to content

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
);
} });