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