"何か(hello eventのような)イベントがあれば、<-rtm.IncomingEventsというチャネルに送られてくるから、それを読み取って実装しましょう"
ということですか?
もしそうであるとすれば、<-rtm.IncomingEventsの中身ってどうやったらわかりますか?
apiのソースコードを見ればわかるのかと思うのですが、どのページを見たら使い方がわかるのかがわかりません。
chan に送信する場合は <-
を使うので、ソースコード websocket_managed_conn.go
を IncomingEvent <-
で検索すると分かります。ただこのパッケージは文字列から生成するイベントの struct を reflect を使って動的に作るという、少し玄人なコードになっているので全てのイベントを探すのに苦労するかもしれません。実際は websocket_managed_conn.go の以下の部分が発生し得るイベントになります。
go
1var eventMapping = map[string]interface{}{
2 "message": MessageEvent{},
3 "presence_change": PresenceChangeEvent{},
4 "user_typing": UserTypingEvent{},
5
6 "channel_marked": ChannelMarkedEvent{},
7 "channel_created": ChannelCreatedEvent{},
8 "channel_joined": ChannelJoinedEvent{},
9 "channel_left": ChannelLeftEvent{},
10 "channel_deleted": ChannelDeletedEvent{},
11 "channel_rename": ChannelRenameEvent{},
12 "channel_archive": ChannelArchiveEvent{},
13 "channel_unarchive": ChannelUnarchiveEvent{},
14 "channel_history_changed": ChannelHistoryChangedEvent{},
15
16 "dnd_updated": DNDUpdatedEvent{},
17 "dnd_updated_user": DNDUpdatedEvent{},
18
19 "im_created": IMCreatedEvent{},
20 "im_open": IMOpenEvent{},
21 "im_close": IMCloseEvent{},
22 "im_marked": IMMarkedEvent{},
23 "im_history_changed": IMHistoryChangedEvent{},
24
25 "group_marked": GroupMarkedEvent{},
26 "group_open": GroupOpenEvent{},
27 "group_joined": GroupJoinedEvent{},
28 "group_left": GroupLeftEvent{},
29 "group_close": GroupCloseEvent{},
30 "group_rename": GroupRenameEvent{},
31 "group_archive": GroupArchiveEvent{},
32 "group_unarchive": GroupUnarchiveEvent{},
33 "group_history_changed": GroupHistoryChangedEvent{},
34
35 "file_created": FileCreatedEvent{},
36 "file_shared": FileSharedEvent{},
37 "file_unshared": FileUnsharedEvent{},
38 "file_public": FilePublicEvent{},
39 "file_private": FilePrivateEvent{},
40 "file_change": FileChangeEvent{},
41 "file_deleted": FileDeletedEvent{},
42 "file_comment_added": FileCommentAddedEvent{},
43 "file_comment_edited": FileCommentEditedEvent{},
44 "file_comment_deleted": FileCommentDeletedEvent{},
45
46 "pin_added": PinAddedEvent{},
47 "pin_removed": PinRemovedEvent{},
48
49 "star_added": StarAddedEvent{},
50 "star_removed": StarRemovedEvent{},
51
52 "reaction_added": ReactionAddedEvent{},
53 "reaction_removed": ReactionRemovedEvent{},
54
55 "pref_change": PrefChangeEvent{},
56
57 "team_join": TeamJoinEvent{},
58 "team_rename": TeamRenameEvent{},
59 "team_pref_change": TeamPrefChangeEvent{},
60 "team_domain_change": TeamDomainChangeEvent{},
61 "team_migration_started": TeamMigrationStartedEvent{},
62
63 "manual_presence_change": ManualPresenceChangeEvent{},
64
65 "user_change": UserChangeEvent{},
66
67 "emoji_changed": EmojiChangedEvent{},
68
69 "commands_changed": CommandsChangedEvent{},
70
71 "email_domain_changed": EmailDomainChangedEvent{},
72
73 "bot_added": BotAddedEvent{},
74 "bot_changed": BotChangedEvent{},
75
76 "accounts_changed": AccountsChangedEvent{},
77
78 "reconnect_url": ReconnectUrlEvent{},
79}
これは、処理中に文字列で与えられるメッセージタイプに対してどの struct を生成し、json ででコードするかを管理しているテーブルです。
またこれ以外にもイベントが発生する様で、ソースを見たところ
go
1AckErrorEvent
2ConnectedEvent
3ConnectingEvent
4ConnectionErrorEvent
5DisconnectedEvent
6HelloEvent
7IncomingEventError
8InvalidAuthEvent
9LatencyReport
10MessageTooLongEvent
11OutgoingErrorEvent
12UnmarshallingErrorEvent
こちらも .IncomingEvents <-
でソースコードを検索すると見つかるかと思います。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。