Пример #1
0
        private async void SendRemindMessageAsync(Reminder reminder)
        {
            var users = reminder.Users.Select(id => ParentShard.GetUser(reminder.Server, id));

            var channel = ParentShard.GetTextChannel(reminder.Server, reminder.Channel);

            //Can't send the message if the channel has been deleted
            if (channel == null)
            {
                return;
            }

            var stringBuilder = new StringBuilder();

            foreach (var user in users)
            {
                stringBuilder.Append(user.Mention).Append(" ");
            }


            var builder = new EmbedBuilder();

            builder.WithDescription($"Reminder for [Message]({reminder.Link})");


            await channel.SendMessageAsync(stringBuilder.ToString(), embed : builder.Build());
        }
Пример #2
0
        public override async Task Stop()
        {
            try
            {
                await ParentShard.ListenForEvent <JObject>(
                    (int)Shard.MessageType.Dispatch,
                    "VOICE_STATE_UPDATE",
                    listenerCreateCallback : async() =>
                {
                    await ParentShard.Send((int)Shard.MessageType.VoiceStateUpdate, new JObject
                    {
                        { "guild_id", _serverId },
                        { "channel_id", null },
                        { "self_mute", false },
                        { "self_deaf", false },
                    });
                },
                    validator : data =>
                {
                    return(data["guild_id"].ToObject <string>() == _serverId);
                });
            }
            finally
            {
                // Discord should close the socket after the voice state update.
                await Task.WhenAny(
                    Task.Run(() =>
                {
                    while (Socket.State != WebSocket4Net.WebSocketState.Closed)
                    {
                        Thread.Sleep(200);
                    }
                }),
                    Task.Delay(TimeSpan.FromSeconds(10)));

                if (Socket.State != WebSocket4Net.WebSocketState.Closed)
                {
                    Logger.Warn($"[{Name}] Expected Discord to close the socket, but it did not.");
                }

                await base.Stop();
            }
        }