public static void Create(Token token, string appName, Func <Client, Task> runner) { DiscordDebug.WriteLine("Creating client...", appName); var env = new DiscordEnvironment(new Client(token), appName); var t = new Thread(() => { AsyncContext.Switch(async() => { await env.RunAsync(async() => { DiscordDebug.WriteLine("Client created.", appName); await runner(env.Client); }); }); }); t.Start(); }
private static void CreateGateway(Token token, string appName, GatewayOptions options, int shardId, int shardCount, Func <GatewayClient, Task> runner) { DiscordDebug.WriteLine("Creating gateway client...", appName); var env = new DiscordEnvironment(new GatewayClient(token, shardId, shardCount), appName); var t = new Thread(() => { AsyncContext.Switch(async() => { await env.RunAsync(async() => { env.GatewayClient.FirePinEvents = options.HasFlag(GatewayOptions.FirePinEvents); Server[] servers = null; if (!options.HasFlag(GatewayOptions.ManualConnect)) { DiscordDebug.WriteLine("Connecting...", appName); servers = await env.GatewayClient.ConnectAsync(); DiscordDebug.WriteLine("Connected.", appName); } DiscordDebug.WriteLine("Gateway client created.", appName); if (env.GatewayClient.FirePinEvents && servers != null) { DiscordDebug.WriteLine("Getting initial channel pins..."); var tasks = new List <Task>(); // ReSharper disable LoopCanBeConvertedToQuery (confusing) foreach (Server s in servers) { foreach (IChannel channel in s.Channels.Values.Where(x => x is ServerTextChannel)) { var c = (ServerTextChannel)channel; tasks.Add(c.GetPinnedMessagesAsync(env.Client)); } } // ReSharper restore LoopCanBeConvertedToQuery await Task.WhenAll(tasks); DiscordDebug.WriteLine("Initial channel pins retreived."); } await runner((GatewayClient)env.Client); }); }); }); t.Start(); }