mirror of
https://github.com/ergochat/ergo.git
synced 2024-12-23 11:12:44 +01:00
Merge pull request #1758 from ergochat/channel_creation
fix channel creation bugs
This commit is contained in:
commit
ad61f9f213
@ -117,23 +117,25 @@ func (cm *ChannelManager) Join(client *Client, name string, key string, isSajoin
|
||||
return errNoSuchChannel, ""
|
||||
}
|
||||
|
||||
channel, err := func() (*Channel, error) {
|
||||
channel, err, newChannel := func() (*Channel, error, bool) {
|
||||
var newChannel bool
|
||||
cm.Lock()
|
||||
defer cm.Unlock()
|
||||
|
||||
if cm.purgedChannels.Has(casefoldedName) {
|
||||
return nil, errChannelPurged
|
||||
return nil, errChannelPurged, false
|
||||
}
|
||||
entry := cm.chans[casefoldedName]
|
||||
if entry == nil {
|
||||
registered := cm.registeredChannels.Has(casefoldedName)
|
||||
// enforce OpOnlyCreation
|
||||
if !registered && server.Config().Channels.OpOnlyCreation && !client.HasRoleCapabs("chanreg") {
|
||||
return nil, errInsufficientPrivs
|
||||
if !registered && server.Config().Channels.OpOnlyCreation &&
|
||||
!(isSajoin || client.HasRoleCapabs("chanreg")) {
|
||||
return nil, errInsufficientPrivs, false
|
||||
}
|
||||
// enforce confusables
|
||||
if !registered && (cm.chansSkeletons.Has(skeleton) || cm.registeredSkeletons.Has(skeleton)) {
|
||||
return nil, errConfusableIdentifier
|
||||
return nil, errConfusableIdentifier, false
|
||||
}
|
||||
entry = &channelManagerEntry{
|
||||
channel: NewChannel(server, name, casefoldedName, registered),
|
||||
@ -148,9 +150,10 @@ func (cm *ChannelManager) Join(client *Client, name string, key string, isSajoin
|
||||
entry.skeleton = skeleton
|
||||
}
|
||||
cm.chans[casefoldedName] = entry
|
||||
newChannel = true
|
||||
}
|
||||
entry.pendingJoins += 1
|
||||
return entry.channel, nil
|
||||
return entry.channel, nil, newChannel
|
||||
}()
|
||||
|
||||
if err != nil {
|
||||
@ -158,7 +161,7 @@ func (cm *ChannelManager) Join(client *Client, name string, key string, isSajoin
|
||||
}
|
||||
|
||||
channel.EnsureLoaded()
|
||||
err, forward = channel.Join(client, key, isSajoin, rb)
|
||||
err, forward = channel.Join(client, key, isSajoin || newChannel, rb)
|
||||
|
||||
cm.maybeCleanup(channel, true)
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user