1package bridge 2 3import ( 4 "time" 5) 6 7type Bridger interface { 8 Invite(channelID, username string) error 9 Join(channelName string) (string, string, error) 10 List() (map[string]string, error) 11 Part(channel string) error 12 SetTopic(channelID, text string) error 13 Topic(channelID string) string 14 Kick(channelID, username string) error 15 Nick(name string) error 16 17 UpdateChannels() error 18 Logout() error 19 Connected() bool 20 21 MsgUser(userID, text string) (string, error) 22 MsgUserThread(userID, parentID, text string) (string, error) 23 MsgChannel(channelID, text string) (string, error) 24 MsgChannelThread(channelID, parentID, text string) (string, error) 25 26 AddReaction(msgID, emoji string) error 27 RemoveReaction(msgID, emoji string) error 28 29 StatusUser(userID string) (string, error) 30 StatusUsers() (map[string]string, error) 31 SetStatus(status string) error 32 33 Protocol() string 34 35 GetChannels() []*ChannelInfo 36 GetChannel(channelID string) (*ChannelInfo, error) 37 GetChannelName(channelID string) string 38 GetLastViewedAt(channelID string) int64 39 UpdateLastViewed(channelID string) 40 UpdateLastViewedUser(userID string) error 41 GetChannelID(name, teamID string) string 42 43 GetChannelUsers(channelID string) ([]*UserInfo, error) 44 GetUsers() []*UserInfo 45 GetUser(userID string) *UserInfo 46 GetMe() *UserInfo 47 GetUserByUsername(username string) *UserInfo 48 SearchUsers(query string) ([]*UserInfo, error) 49 50 GetTeamName(teamID string) string 51 52 GetPostsSince(channelID string, since int64) interface{} 53 GetPosts(channelID string, limit int) interface{} 54 SearchPosts(search string) interface{} 55 ModifyPost(msgID, text string) error 56 GetFileLinks(fileIDs []string) []string 57} 58 59type ChannelInfo struct { 60 Name string 61 ID string 62 TeamID string 63 DM bool 64 Private bool 65} 66 67type UserInfo struct { 68 Nick string // From NICK command 69 User string // From USER command 70 Real string // From USER command 71 Pass []string // From PASS command 72 Host string 73 Roles string 74 DisplayName string 75 Ghost bool 76 Me bool 77 Username string 78 TeamID string 79 FirstName string 80 LastName string 81 MentionKeys []string 82} 83 84type Credentials struct { 85 Login string 86 Team string 87 Pass string 88 Server string 89 Token string 90 MFAToken string 91} 92 93type Event struct { 94 Type string 95 Data interface{} 96} 97 98type ChannelAddEvent struct { 99 Adder *UserInfo 100 Added []*UserInfo 101 ChannelID string 102} 103 104type ChannelRemoveEvent struct { 105 Remover *UserInfo 106 Removed []*UserInfo 107 ChannelID string 108} 109 110type ChannelCreateEvent struct { 111 ChannelID string 112} 113 114type ChannelDeleteEvent struct { 115 ChannelID string 116} 117 118type ChannelMessageEvent struct { 119 Text string 120 ChannelID string 121 Sender *UserInfo 122 MessageType string 123 ChannelType string 124 Files []*File 125 MessageID string 126 Event string 127 ParentID string 128} 129 130type ChannelTopicEvent struct { 131 Text string 132 ChannelID string 133 UserID string 134} 135 136type DirectMessageEvent struct { 137 Text string 138 ChannelID string 139 Receiver *UserInfo 140 Sender *UserInfo 141 Files []*File 142 MessageID string 143 Event string 144 ParentID string 145} 146 147type FileEvent struct { 148 Receiver *UserInfo 149 Sender *UserInfo 150 ChannelID string 151 ChannelType string 152 Files []*File 153 MessageID string 154 ParentID string 155} 156 157type ReactionAddEvent struct { 158 Sender *UserInfo 159 ChannelID string 160 MessageID string 161 Reaction string 162 ChannelType string 163 ParentUser *UserInfo 164 Message string 165} 166 167type ReactionRemoveEvent ReactionAddEvent 168 169type UserUpdateEvent struct { 170 User *UserInfo 171} 172 173type StatusChangeEvent struct { 174 UserID string 175 Status string 176} 177 178type LogoutEvent struct{} 179 180type File struct { 181 Name string 182} 183 184type Message struct { 185 Text string `json:"text"` 186 Channel string `json:"channel"` 187 Username string `json:"username"` 188 UserID string `json:"userid"` // userid on the bridge 189 Account string `json:"account"` 190 Event string `json:"event"` 191 Protocol string `json:"protocol"` 192 ParentID string `json:"parent_id"` 193 Timestamp time.Time `json:"timestamp"` 194 ID string `json:"id"` 195 Extra map[string][]interface{} 196} 197