diff --git a/command.go b/command.go index 796c1ac5b742ff4d3a68f0a28e5d03b2369cd180..e616c89614797e4919ecdf5d06c99698bdc71833 100644 --- a/command.go +++ b/command.go @@ -145,4 +145,74 @@ func init() { context.SendMessage("Action completed.") }, }) + + m.Route(&multiplexer.Route{ + Pattern: "kick", + AliasPatterns: []string{"k", "dc"}, + Description: "Kick an user from channel.", + Category: system, + Handler: func(context *multiplexer.Context) { + + if len(context.Fields) < 2 { + // Return if unexpected amount of arguments. + context.SendMessage("Expecting user.") + return + } + + // Get member + member := context.GetMember(context.Fields[1]) + if member == nil { + context.SendMessage("Expecting member.") + return + } + + // Get instance + instance, ok := instancesUser[context.User.ID] + if !ok { + context.SendMessage("You do not own any volatile channel.") + return + } + + // Perform action + if !instance.actionPerform("kick", + func() bool { + // Check if member is in the channel + state, err := context.Session.State.VoiceState(member.GuildID, member.User.ID) + if err != nil { + log.Errorf("Error getting state of at guild %s on behalf of member %s, %s", + member.GuildID, member.User.ID, err) + return false + } + + if state.ChannelID != instance.Channel.ID { + context.SendMessage("The user is not in your volatile channel") + return false + } + // Perform change + err2 := context.Session.GuildMemberMove(member.GuildID, member.User.ID, nil) + if err2!= nil { + log.Errorf("Error disconnecting user at guild %s on behalf of member %s, %s", + member.GuildID, member.User.ID, err) + return false + } + err3 := context.Session.ChannelPermissionSet(instance.Channel.ID,member.User.ID,1,1024,1048576) + if err3 != nil { + log.Errorf("Error changing permissions for user at guild %s on behalf of member %s, %s", + member.GuildID, member.User.ID, err) + return false + } + return true + }, context.SendMessage) { + return + } + + log.Infof("Kick user from volatile channel #%s (%s) to %v on behalf of %s#%s (%s).", + instance.Channel.Name, + instance.Channel.ID, + instance.Initiator.User.Username, + instance.Initiator.User.Discriminator, + instance.Initiator.User.ID) + context.SendMessage("Action completed.") + }, + }) }