Skip to content

Commit 30eecfa

Browse files
committed
Implement clan chat channels
1 parent e8298ed commit 30eecfa

File tree

5 files changed

+70
-4
lines changed

5 files changed

+70
-4
lines changed

chat/channel.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ const (
2929
ChannelNormal ChannelType = iota
3030
ChannelTypeMultiplayer
3131
ChannelTypeSpectator
32+
ChannelTypeClan
3233
)
3334

3435
// NewChannel Creates a new chat channel instance

chat/chat.go

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,16 @@ func Initialize() {
3434
addChannel(NewChannel(ChannelNormal, channel.Name, channel.Description, channel.AdminOnly, channel.AutoJoin, channel.LimitedChat, channel.DiscordWebhook))
3535
}
3636

37+
clans, err := db.GetAllClans()
38+
39+
if err != nil {
40+
panic(err)
41+
}
42+
43+
for _, clan := range clans {
44+
AddClanChannel(clan.Id)
45+
}
46+
3747
_ = sessions.AddUser(Bot)
3848
addBotChatHandlers()
3949
addSpectatorHandlers()
@@ -47,7 +57,10 @@ func GetAvailableChannels(userGroups common.UserGroups) []*Channel {
4757
var availableChannels []*Channel
4858

4959
for _, channel := range channels {
50-
if (channel.Type != ChannelTypeMultiplayer && channel.Type != ChannelTypeSpectator && !channel.AdminOnly) || (channel.AdminOnly && isChatModerator(userGroups)) {
60+
if (channel.Type != ChannelNormal &&
61+
channel.Type != ChannelTypeMultiplayer &&
62+
channel.Type != ChannelTypeSpectator && !channel.AdminOnly) ||
63+
(channel.AdminOnly && isChatModerator(userGroups)) {
5164
availableChannels = append(availableChannels, channel)
5265
}
5366
}
@@ -243,6 +256,18 @@ func addChannel(channel *Channel) {
243256
log.Printf("Initialized chat channel: %v\n", channel.Name)
244257
}
245258

259+
// AddClanChannel Adds a new clan channel
260+
func AddClanChannel(clanId int) *Channel {
261+
name := fmt.Sprintf("#clan_%v", clanId)
262+
263+
channel := NewChannel(ChannelTypeClan, name, "Communicate with your fellow clan members",
264+
false, false, false, "")
265+
266+
addChannel(channel)
267+
268+
return channel
269+
}
270+
246271
// Removes a channel from channels
247272
func removeChannel(channel *Channel) {
248273
chatMutex.Lock()

db/clans.go

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package db
2+
3+
import "database/sql"
4+
5+
type Clan struct {
6+
Id int `db:"id"`
7+
OwnerId int `db:"owner_id"`
8+
Name string `db:"name"`
9+
Tag string `db:"tag"`
10+
Customizable bool `db:"customizable"`
11+
}
12+
13+
// GetAllClans Retrieves all of the clans in the db
14+
func GetAllClans() ([]*Clan, error) {
15+
result := make([]*Clan, 0)
16+
17+
err := SQL.Select(&result, "SELECT id, owner_id, name, tag, customizable FROM clans")
18+
19+
if err != nil && err != sql.ErrNoRows {
20+
return nil, err
21+
}
22+
23+
return result, nil
24+
}

db/users.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ type User struct {
2121
Country string `db:"country"`
2222
AvatarUrl sql.NullString `db:"avatar_url"`
2323
TwitchUsername sql.NullString `db:"twitch_username"`
24+
ClanId sql.NullInt32 `db:"clan_id"`
2425
}
2526

2627
// GetProfileUrl Returns the full profile url for the user
@@ -30,7 +31,7 @@ func (u *User) GetProfileUrl() string {
3031

3132
// GetUserById Retrieves a user from the database by their id
3233
func GetUserById(id int) (*User, error) {
33-
query := "SELECT id, steam_id, username, allowed, privileges, usergroups, mute_endtime, country, avatar_url, twitch_username FROM users WHERE id = ? LIMIT 1"
34+
query := "SELECT id, steam_id, username, allowed, privileges, usergroups, mute_endtime, country, avatar_url, twitch_username, clan_id FROM users WHERE id = ? LIMIT 1"
3435

3536
var user User
3637
err := SQL.Get(&user, query, id)
@@ -44,7 +45,7 @@ func GetUserById(id int) (*User, error) {
4445

4546
// GetUserBySteamId Retrieves a user from the database by their Steam id
4647
func GetUserBySteamId(steamId string) (*User, error) {
47-
query := "SELECT id, steam_id, username, allowed, privileges, usergroups, mute_endtime, country, avatar_url, twitch_username FROM users WHERE steam_id = ? LIMIT 1"
48+
query := "SELECT id, steam_id, username, allowed, privileges, usergroups, mute_endtime, country, avatar_url, twitch_username, clan_id FROM users WHERE steam_id = ? LIMIT 1"
4849

4950
var user User
5051
err := SQL.Get(&user, query, steamId)
@@ -58,7 +59,7 @@ func GetUserBySteamId(steamId string) (*User, error) {
5859

5960
// GetUserByUsername Rerieves a user from the database by their username
6061
func GetUserByUsername(username string) (*User, error) {
61-
query := "SELECT id, steam_id, username, allowed, privileges, usergroups, mute_endtime, country, avatar_url, twitch_username FROM users WHERE username = ? LIMIT 1"
62+
query := "SELECT id, steam_id, username, allowed, privileges, usergroups, mute_endtime, country, avatar_url, twitch_username, clan_id FROM users WHERE username = ? LIMIT 1"
6263

6364
var user User
6465
err := SQL.Get(&user, query, username)

handlers/login.go

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -422,6 +422,21 @@ func joinChatChannels(user *sessions.User) {
422422
channel.AddUser(user)
423423
}
424424
}
425+
426+
// Add user to clan channel (creates the new clan channel if necessary)
427+
if user.Info.ClanId.Valid {
428+
name := fmt.Sprintf("#clan_%v", user.Info.ClanId.Int32)
429+
430+
channel := chat.GetChannelByName(name)
431+
432+
if channel != nil {
433+
channel.AddUser(user)
434+
return
435+
}
436+
437+
channel = chat.AddClanChannel(int(user.Info.ClanId.Int32))
438+
channel.AddUser(user)
439+
}
425440
}
426441

427442
// Logs a generic login failure

0 commit comments

Comments
 (0)