Skip to content

Types conversations

One of the most important topics in context of tgbotapi is types conversations. This library is very strong-typed and a lot of things are based on types hierarchy. Lets look into the hierarchy of classes for the Message in 0.35.8:

%%{init: {"flowchart": {"defaultRenderer": "elk"}} }%% classDiagram Message <|-- AccessibleMessage AccessibleMessage <|-- ChatEventMessage ChatEventMessage <|-- ChannelEventMessage ChatEventMessage <|-- GroupEventMessage GroupEventMessage <|-- ChannelDirectMessagesEventMessage ChannelDirectMessagesEventMessage <|-- CommonChannelDirectMessagesEventMessage GroupEventMessage <|-- CommonGroupEventMessage GroupEventMessage <|-- SupergroupEventMessage SupergroupEventMessage <|-- CommonSupergroupEventMessage ChatEventMessage <|-- PrivateEventMessage ChatEventMessage <|-- PrivateForumEventMessage AccessibleMessage <|-- CommonMessage CommonMessage <|-- PossiblySentViaBotCommonMessage PossiblySentViaBotCommonMessage <|-- BusinessContentMessage BusinessContentMessage <|-- BusinessContentMessageImpl PossiblySentViaBotCommonMessage <|-- ChannelContentMessage ChannelContentMessage <|-- ChannelContentMessageImpl ChannelContentMessage <|-- ChannelPaidPost ChannelPaidPost <|-- ChannelPaidPostImpl PossiblySentViaBotCommonMessage <|-- PrivateContentMessage PrivateContentMessage <|-- PrivateContentMessageImpl PrivateContentMessage <|-- PrivateForumContentMessage PrivateForumContentMessage <|-- PrivateForumContentMessageImpl PossiblySentViaBotCommonMessage <|-- PublicContentMessage PublicContentMessage <|-- GroupContentMessage GroupContentMessage <|-- AnonymousGroupContentMessage AnonymousGroupContentMessage <|-- AnonymousGroupContentMessageImpl GroupContentMessage <|-- ChannelDirectMessagesContentMessage ChannelDirectMessagesContentMessage <|-- CommonChannelDirectMessagesContentMessage CommonChannelDirectMessagesContentMessage <|-- CommonChannelDirectMessagesContentMessageImpl ChannelDirectMessagesContentMessage <|-- FromChannelChannelDirectMessagesContentMessage FromChannelChannelDirectMessagesContentMessage <|-- FromChannelChannelDirectMessagesContentMessageImpl ChannelDirectMessagesContentMessage <|-- SuggestedChannelDirectMessagesContentMessage SuggestedChannelDirectMessagesContentMessage <|-- CommonSuggestedChannelDirectMessagesContentMessage CommonSuggestedChannelDirectMessagesContentMessage <|-- CommonSuggestedChannelDirectMessagesContentMessageImpl SuggestedChannelDirectMessagesContentMessage <|-- FromChannelSuggestedChannelDirectMessagesContentMessage FromChannelSuggestedChannelDirectMessagesContentMessage <|-- FromChannelSuggestedChannelDirectMessagesContentMessageImpl GroupContentMessage <|-- CommonGroupContentMessage CommonGroupContentMessage <|-- CommonGroupContentMessageImpl GroupContentMessage <|-- ForumContentMessage ForumContentMessage <|-- AnonymousForumContentMessage AnonymousForumContentMessage <|-- AnonymousForumContentMessageImpl ForumContentMessage <|-- CommonForumContentMessage CommonForumContentMessage <|-- CommonForumContentMessageImpl ForumContentMessage <|-- FromChannelForumContentMessage FromChannelForumContentMessage <|-- FromChannelForumContentMessageImpl GroupContentMessage <|-- FromChannelGroupContentMessage FromChannelGroupContentMessage <|-- ConnectedFromChannelGroupContentMessage ConnectedFromChannelGroupContentMessage <|-- ConnectedFromChannelGroupContentMessageImpl FromChannelGroupContentMessage <|-- FromChannelChannelDirectMessagesContentMessage FromChannelGroupContentMessage <|-- FromChannelForumContentMessage FromChannelGroupContentMessage <|-- FromChannelSuggestedChannelDirectMessagesContentMessage FromChannelGroupContentMessage <|-- UnconnectedFromChannelGroupContentMessage UnconnectedFromChannelGroupContentMessage <|-- UnconnectedFromChannelGroupContentMessageImpl GroupContentMessage <|-- PotentiallyFromUserGroupContentMessage PotentiallyFromUserGroupContentMessage <|-- CommonChannelDirectMessagesContentMessage PotentiallyFromUserGroupContentMessage <|-- CommonForumContentMessage PotentiallyFromUserGroupContentMessage <|-- CommonGroupContentMessage PotentiallyFromUserGroupContentMessage <|-- CommonSuggestedChannelDirectMessagesContentMessage AccessibleMessage <|-- ContentMessage ContentMessage <|-- CommonMessage ContentMessage <|-- PossiblyMediaGroupMessage PossiblyMediaGroupMessage <|-- CommonMessage AccessibleMessage <|-- OptionallyFromUserMessage OptionallyFromUserMessage <|-- ChannelContentMessage OptionallyFromUserMessage <|-- FromUserMessage FromUserMessage <|-- BusinessContentMessage FromUserMessage <|-- CommonChannelDirectMessagesContentMessage FromUserMessage <|-- CommonForumContentMessage FromUserMessage <|-- CommonGroupContentMessage FromUserMessage <|-- CommonSuggestedChannelDirectMessagesContentMessage FromUserMessage <|-- GroupEventMessage FromUserMessage <|-- PassportMessage FromUserMessage <|-- PrivateContentMessage AccessibleMessage <|-- PassportMessage AccessibleMessage <|-- PossiblyEditedMessage PossiblyEditedMessage <|-- CommonMessage AccessibleMessage <|-- PossiblyForwardedMessage PossiblyForwardedMessage <|-- CommonMessage AccessibleMessage <|-- PossiblyPaymentMessage AccessibleMessage <|-- PossiblyTopicMessage PossiblyTopicMessage <|-- ForumContentMessage PossiblyTopicMessage <|-- PrivateForumContentMessage AccessibleMessage <|-- SignedMessage SignedMessage <|-- AnonymousForumContentMessage SignedMessage <|-- AnonymousGroupContentMessage SignedMessage <|-- ChannelContentMessage SignedMessage <|-- FromChannelGroupContentMessage AccessibleMessage <|-- UnknownMessageType Message <|-- InaccessibleMessage Message <|-- PossiblyOfflineMessage PossiblyOfflineMessage <|-- CommonMessage PossiblyOfflineMessage <|-- PrivateContentMessage Message <|-- PossiblyPaidMessage PossiblyPaidMessage <|-- CommonMessage Message <|-- PossiblyWithEffectMessage PossiblyWithEffectMessage <|-- PrivateContentMessage

As you may see, it is a little bit complex and require several tools for types conversation.

As

as conversations will return new type in case if it is possible. For example, when you got Message, you may use asContentMessage conversation to get message with content:

val message: Message;
println(message.asContentMessage() ?.content)

This code will print null in case when message is not ContentMessage, and content when is.

Require

require works like as, but instead of returning nullable type, it will always return object with required type OR throw ClassCastException:

val message: Message;
println(message.requireContentMessage().content)

This code will throw exception when message is not ContentMessage and print content when is.

When

when extensions will call passed block when type is correct. For example:

val message: Message;
message.whenContentMessage {
    println(it.content)
}

Code placed above will print content when message is ContentMessage and do nothing when not