telebot/errors.go
2020-05-21 12:02:35 +03:00

173 lines
6.5 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package telebot
import (
"fmt"
"regexp"
"strings"
)
type APIError struct {
Code int
Description string
Message string
}
// ʔ returns description of error.
// A tiny shortcut to make code clearer.
func (err *APIError) ʔ() string {
return err.Description
}
// Error implements error interface.
func (err *APIError) Error() string {
msg := err.Message
if msg == "" {
split := strings.Split(err.Description, ": ")
if len(split) == 2 {
msg = split[1]
} else {
msg = err.Description
}
}
return fmt.Sprintf("telegram: %s (%d)", msg, err.Code)
}
// NewAPIError returns new APIError instance with given description.
// First element of msgs is Description. The second is optional Message.
func NewAPIError(code int, msgs ...string) *APIError {
err := &APIError{Code: code}
if len(msgs) >= 1 {
err.Description = msgs[0]
}
if len(msgs) >= 2 {
err.Message = msgs[1]
}
return err
}
var errorRx = regexp.MustCompile(`{.+"error_code":(\d+),"description":"(.+)".*}`)
var (
// General errors
ErrUnauthorized = NewAPIError(401, "Unauthorized")
ErrNotStartedByUser = NewAPIError(403, "Forbidden: bot can't initiate conversation with a user")
ErrBlockedByUser = NewAPIError(401, "Forbidden: bot was blocked by the user")
ErrUserIsDeactivated = NewAPIError(401, "Forbidden: user is deactivated")
ErrNotFound = NewAPIError(404, "Not Found")
ErrInternal = NewAPIError(500, "Internal Server Error")
// Bad request errors
ErrTooLarge = NewAPIError(400, "Request Entity Too Large")
ErrMessageTooLong = NewAPIError(400, "Bad Request: message is too long")
ErrToForwardNotFound = NewAPIError(400, "Bad Request: message to forward not found")
ErrToReplyNotFound = NewAPIError(400, "Bad Request: reply message not found")
ErrToDeleteNotFound = NewAPIError(400, "Bad Request: message to delete not found")
ErrEmptyMessage = NewAPIError(400, "Bad Request: message must be non-empty")
ErrEmptyText = NewAPIError(400, "Bad Request: text is empty")
ErrEmptyChatID = NewAPIError(400, "Bad Request: chat_id is empty")
ErrChatNotFound = NewAPIError(400, "Bad Request: chat not found")
ErrMessageNotModified = NewAPIError(400, "Bad Request: message is not modified")
ErrButtonDataInvalid = NewAPIError(400, "Bad Request: BUTTON_DATA_INVALID")
ErrWrongTypeOfContent = NewAPIError(400, "Bad Request: wrong type of the web page content")
ErrBadURLContent = NewAPIError(400, "Bad Request: failed to get HTTP URL content")
ErrWrongFileID = NewAPIError(400, "Bad Request: wrong file identifier/HTTP URL specified")
ErrWrongFileIDSymbol = NewAPIError(400, "Bad Request: wrong remote file id specified: can't unserialize it. Wrong last symbol")
ErrWrongFileIDLength = NewAPIError(400, "Bad Request: wrong remote file id specified: Wrong string length")
ErrWrongFileIDCharacter = NewAPIError(400, "Bad Request: wrong remote file id specified: Wrong character in the string")
ErrWrongFileIDPadding = NewAPIError(400, "Bad Request: wrong remote file id specified: Wrong padding in the string")
ErrFailedImageProcess = NewAPIError(400, "Bad Request: IMAGE_PROCESS_FAILED", "Image process failed")
ErrInvalidStickerSet = NewAPIError(400, "Bad Request: STICKERSET_INVALID", "Stickerset is invalid")
ErrBadPollOptions = NewAPIError(400, "Bad Request: expected Array of String as options")
// No rights errors
ErrNoRightsToRestrict = NewAPIError(400, "Bad Request: not enough rights to restrict/unrestrict chat member")
ErrNoRightsToSend = NewAPIError(400, "Bad Request: have no rights to send a message")
ErrNoRightsToSendPhoto = NewAPIError(400, "Bad Request: not enough rights to send photos to the chat")
ErrNoRightsToSendStickers = NewAPIError(400, "Bad Request: not enough rights to send stickers to the chat")
ErrNoRightsToSendGifs = NewAPIError(400, "Bad Request: CHAT_SEND_GIFS_FORBIDDEN", "sending GIFS is not allowed in this chat")
ErrNoRightsToDelete = NewAPIError(400, "Bad Request: message can't be deleted")
ErrKickingChatOwner = NewAPIError(400, "Bad Request: can't remove chat owner")
// Super/groups errors
ErrBotKickedFromGroup = NewAPIError(403, "Forbidden: bot was kicked from the group chat")
ErrBotKickedFromSuperGroup = NewAPIError(403, "Forbidden: bot was kicked from the supergroup chat")
)
// ErrByDescription returns APIError instance by given description.
func ErrByDescription(s string) error {
switch s {
case ErrUnauthorized.ʔ():
return ErrUnauthorized
case ErrNotStartedByUser.ʔ():
return ErrNotStartedByUser
case ErrNotFound.ʔ():
return ErrNotFound
case ErrUserIsDeactivated.ʔ():
return ErrUserIsDeactivated
case ErrToForwardNotFound.ʔ():
return ErrToForwardNotFound
case ErrToReplyNotFound.ʔ():
return ErrToReplyNotFound
case ErrMessageTooLong.ʔ():
return ErrMessageTooLong
case ErrBlockedByUser.ʔ():
return ErrBlockedByUser
case ErrToDeleteNotFound.ʔ():
return ErrToDeleteNotFound
case ErrEmptyMessage.ʔ():
return ErrEmptyMessage
case ErrEmptyText.ʔ():
return ErrEmptyText
case ErrEmptyChatID.ʔ():
return ErrEmptyChatID
case ErrChatNotFound.ʔ():
return ErrChatNotFound
case ErrMessageNotModified.ʔ():
return ErrMessageNotModified
case ErrButtonDataInvalid.ʔ():
return ErrButtonDataInvalid
case ErrBadPollOptions.ʔ():
return ErrBadPollOptions
case ErrNoRightsToRestrict.ʔ():
return ErrNoRightsToRestrict
case ErrNoRightsToSend.ʔ():
return ErrNoRightsToSend
case ErrNoRightsToSendPhoto.ʔ():
return ErrNoRightsToSendPhoto
case ErrNoRightsToSendStickers.ʔ():
return ErrNoRightsToSendStickers
case ErrNoRightsToSendGifs.ʔ():
return ErrNoRightsToSendGifs
case ErrNoRightsToDelete.ʔ():
return ErrNoRightsToDelete
case ErrKickingChatOwner.ʔ():
return ErrKickingChatOwner
case ErrBotKickedFromGroup.ʔ():
return ErrKickingChatOwner
case ErrBotKickedFromSuperGroup.ʔ():
return ErrBotKickedFromSuperGroup
case ErrWrongTypeOfContent.ʔ():
return ErrWrongTypeOfContent
case ErrBadURLContent.ʔ():
return ErrBadURLContent
case ErrWrongFileIDSymbol.ʔ():
return ErrWrongFileIDSymbol
case ErrWrongFileIDLength.ʔ():
return ErrWrongFileIDLength
case ErrWrongFileIDCharacter.ʔ():
return ErrWrongFileIDCharacter
case ErrWrongFileID.ʔ():
return ErrWrongFileID
case ErrTooLarge.ʔ():
return ErrTooLarge
case ErrWrongFileIDPadding.ʔ():
return ErrWrongFileIDPadding
case ErrFailedImageProcess.ʔ():
return ErrFailedImageProcess
case ErrInvalidStickerSet.ʔ():
return ErrInvalidStickerSet
default:
return nil
}
}