예제 #1
0
        private async Task OnVoiceStateUpdated(SocketUser user, SocketVoiceState oldState, SocketVoiceState newState)
        {
            XDocument doc   = XDocument.Load(Globals.path + "Servers.xml");
            var       oldVC = oldState.VoiceChannel;
            var       newVC = newState.VoiceChannel;

            if (oldVC == null && newVC != null) //joined voice channel
            {
                ulong    guild = newVC.Guild.Id;
                XElement inVoiceChannelElem = doc.Root.XPathSelectElement($"./server[@id='{guild}']/InVoiceChannel");
                if (inVoiceChannelElem.Value == "")
                {
                    return;
                }

                OverwritePermissions permissions = new OverwritePermissions(viewChannel: PermValue.Allow, sendMessages: PermValue.Allow);

                var textChannel = newVC.Guild.GetTextChannel(ulong.Parse(inVoiceChannelElem.Value));
                await textChannel.AddPermissionOverwriteAsync(user, permissions); //give them invoice channel perms
            }
            else if (oldVC != null && newVC == null)                              //left voice channel
            {
                ulong guild = oldVC.Guild.Id;
                if (_voiceManager.HasActiveService(guild))
                {
                    if (oldVC.Id == _voiceManager.GetServiceVoiceChannelId(guild))
                    {
                        if (oldVC.Users.Count == 1)                //only the bot left in there
                        {
                            _voiceManager.ForceStopService(guild); //kill the service
                        }
                    }
                }
                XElement inVoiceChannelElem = doc.Root.XPathSelectElement($"./server[@id='{guild}']/InVoiceChannel");
                if (inVoiceChannelElem.Value == "")
                {
                    return;
                }

                var textChannel = oldVC.Guild.GetTextChannel(ulong.Parse(inVoiceChannelElem.Value));
                await textChannel.RemovePermissionOverwriteAsync(user); //remove their invoice channel perms
            }
            else if (oldVC != null && newVC != null && oldVC != newVC)  //moved channel
            {
                ulong guild = oldVC.Guild.Id;
                if (_voiceManager.HasActiveService(guild))
                {
                    if (oldVC.Id == _voiceManager.GetServiceVoiceChannelId(guild))
                    {
                        if (oldVC.Users.Count == 1)                //only the bot left in there
                        {
                            _voiceManager.ForceStopService(guild); //kill the service
                        }
                    }
                }
            }
        }
예제 #2
0
 public async Task VoiceStop()
 {
     _voiceManager.ForceStopService(Context.Guild.Id);
     await ReplyAsync("Disconnected from voice.");
 }