ShardedDiscordClient Implemented. I'm not feeling well
This commit is contained in:
		@@ -22,7 +22,7 @@ namespace NadekoBot.Modules.Administration
 | 
			
		||||
    [NadekoModule("Administration", ".")]
 | 
			
		||||
    public partial class Administration : DiscordModule
 | 
			
		||||
    {
 | 
			
		||||
        public Administration(ILocalization loc, CommandService cmds, DiscordSocketClient client) : base(loc, cmds, client)
 | 
			
		||||
        public Administration(ILocalization loc, CommandService cmds, ShardedDiscordClient client) : base(loc, cmds, client)
 | 
			
		||||
        {
 | 
			
		||||
            NadekoBot.CommandHandler.CommandExecuted += DelMsgOnCmd_Handler;
 | 
			
		||||
        }
 | 
			
		||||
@@ -614,7 +614,7 @@ namespace NadekoBot.Modules.Administration
 | 
			
		||||
        {
 | 
			
		||||
            var channel = (ITextChannel)umsg.Channel;
 | 
			
		||||
 | 
			
		||||
            foreach (var ch in (await _client.GetGuildsAsync().ConfigureAwait(false)).Select(async g => await g.GetDefaultChannelAsync().ConfigureAwait(false)))
 | 
			
		||||
            foreach (var ch in _client.GetGuilds().Select(async g => await g.GetDefaultChannelAsync().ConfigureAwait(false)))
 | 
			
		||||
            {
 | 
			
		||||
                await channel.SendMessageAsync(message).ConfigureAwait(false);
 | 
			
		||||
            }
 | 
			
		||||
 
 | 
			
		||||
@@ -22,7 +22,7 @@ namespace NadekoBot.Modules.Administration
 | 
			
		||||
        [Group]
 | 
			
		||||
        public class LogCommands
 | 
			
		||||
        {
 | 
			
		||||
            private DiscordSocketClient _client { get; }
 | 
			
		||||
            private ShardedDiscordClient _client { get; }
 | 
			
		||||
            private Logger _log { get; }
 | 
			
		||||
 | 
			
		||||
            private string prettyCurrentTime => $"【{DateTime.Now:HH:mm:ss}】";
 | 
			
		||||
@@ -33,7 +33,7 @@ namespace NadekoBot.Modules.Administration
 | 
			
		||||
            private Timer t;
 | 
			
		||||
            private IGoogleApiService _google { get; }
 | 
			
		||||
 | 
			
		||||
            public LogCommands(DiscordSocketClient client, IGoogleApiService google)
 | 
			
		||||
            public LogCommands(ShardedDiscordClient client, IGoogleApiService google)
 | 
			
		||||
            {
 | 
			
		||||
                _client = client;
 | 
			
		||||
                _google = google;
 | 
			
		||||
 
 | 
			
		||||
@@ -17,7 +17,7 @@ namespace NadekoBot.Modules.Administration
 | 
			
		||||
        {
 | 
			
		||||
            public static ConcurrentDictionary<ulong, Ratelimiter> RatelimitingChannels = new ConcurrentDictionary<ulong, Ratelimiter>();
 | 
			
		||||
 | 
			
		||||
            private DiscordSocketClient _client { get; }
 | 
			
		||||
            private ShardedDiscordClient _client { get; }
 | 
			
		||||
 | 
			
		||||
            public class Ratelimiter
 | 
			
		||||
            {
 | 
			
		||||
 
 | 
			
		||||
@@ -12,9 +12,9 @@ namespace NadekoBot.Modules.Administration
 | 
			
		||||
        [Group]
 | 
			
		||||
        class SelfCommands
 | 
			
		||||
        {
 | 
			
		||||
            private DiscordSocketClient _client;
 | 
			
		||||
            private ShardedDiscordClient _client;
 | 
			
		||||
 | 
			
		||||
            public SelfCommands(DiscordSocketClient client)
 | 
			
		||||
            public SelfCommands(ShardedDiscordClient client)
 | 
			
		||||
            {
 | 
			
		||||
                this._client = client;
 | 
			
		||||
            }
 | 
			
		||||
 
 | 
			
		||||
@@ -19,7 +19,7 @@ namespace NadekoBot.Modules.ClashOfClans
 | 
			
		||||
    {
 | 
			
		||||
        public static ConcurrentDictionary<ulong, List<ClashWar>> ClashWars { get; set; } = new ConcurrentDictionary<ulong, List<ClashWar>>();
 | 
			
		||||
 | 
			
		||||
        public ClashOfClans(ILocalization loc, CommandService cmds, DiscordSocketClient client) : base(loc, cmds, client)
 | 
			
		||||
        public ClashOfClans(ILocalization loc, CommandService cmds, ShardedDiscordClient client) : base(loc, cmds, client)
 | 
			
		||||
        {
 | 
			
		||||
            using (var uow = DbHandler.UnitOfWork())
 | 
			
		||||
            {
 | 
			
		||||
 
 | 
			
		||||
@@ -10,11 +10,11 @@ namespace NadekoBot.Modules
 | 
			
		||||
    {
 | 
			
		||||
        protected ILocalization _l { get; }
 | 
			
		||||
        protected CommandService _commands { get; }
 | 
			
		||||
        protected DiscordSocketClient _client { get; }
 | 
			
		||||
        protected ShardedDiscordClient  _client { get; }
 | 
			
		||||
        protected Logger _log { get; }
 | 
			
		||||
        private string _prefix { get; }
 | 
			
		||||
 | 
			
		||||
        public DiscordModule(ILocalization loc, CommandService cmds, DiscordSocketClient client)
 | 
			
		||||
        public DiscordModule(ILocalization loc, CommandService cmds, ShardedDiscordClient client)
 | 
			
		||||
        {
 | 
			
		||||
            string prefix;
 | 
			
		||||
            if (NadekoBot.ModulePrefixes.TryGetValue(this.GetType().Name, out prefix))
 | 
			
		||||
 
 | 
			
		||||
@@ -21,7 +21,7 @@ namespace NadekoBot.Modules.Gambling
 | 
			
		||||
        public static string CurrencyPluralName { get; set; }
 | 
			
		||||
        public static string CurrencySign { get; set; }
 | 
			
		||||
        
 | 
			
		||||
        public Gambling(ILocalization loc, CommandService cmds, DiscordSocketClient client) : base(loc, cmds, client)
 | 
			
		||||
        public Gambling(ILocalization loc, CommandService cmds, ShardedDiscordClient client) : base(loc, cmds, client)
 | 
			
		||||
        {
 | 
			
		||||
            using (var uow = DbHandler.UnitOfWork())
 | 
			
		||||
            {
 | 
			
		||||
 
 | 
			
		||||
@@ -111,7 +111,7 @@ namespace NadekoBot.Modules.Games.Trivia
 | 
			
		||||
                {
 | 
			
		||||
                    if (!(umsg.Channel is IGuildChannel && umsg.Channel is ITextChannel)) return;
 | 
			
		||||
                    if ((umsg.Channel as ITextChannel).Guild != guild) return;
 | 
			
		||||
                    if (umsg.Author.Id == (await NadekoBot.Client.GetCurrentUserAsync()).Id) return;
 | 
			
		||||
                    if (umsg.Author.Id == NadekoBot.Client.GetCurrentUser().Id) return;
 | 
			
		||||
 | 
			
		||||
                    var guildUser = umsg.Author as IGuildUser;
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -23,7 +23,7 @@ namespace NadekoBot.Modules.Games
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        public Games(ILocalization loc, CommandService cmds, DiscordSocketClient client) : base(loc, cmds, client)
 | 
			
		||||
        public Games(ILocalization loc, CommandService cmds, ShardedDiscordClient client) : base(loc, cmds, client)
 | 
			
		||||
        {
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
@@ -97,7 +97,7 @@ namespace NadekoBot.Modules.Games
 | 
			
		||||
            else if ((pick == 0 && nadekoPick == 1) ||
 | 
			
		||||
                     (pick == 1 && nadekoPick == 2) ||
 | 
			
		||||
                     (pick == 2 && nadekoPick == 0))
 | 
			
		||||
                msg = $"{(await NadekoBot.Client.GetCurrentUserAsync()).Mention} won! :{GetRPSPick(nadekoPick)}: beats :{GetRPSPick(pick)}:";
 | 
			
		||||
                msg = $"{NadekoBot.Client.GetCurrentUser().Mention} won! :{GetRPSPick(nadekoPick)}: beats :{GetRPSPick(pick)}:";
 | 
			
		||||
            else
 | 
			
		||||
                msg = $"{umsg.Author.Mention} won! :{GetRPSPick(pick)}: beats :{GetRPSPick(nadekoPick)}:";
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -23,7 +23,7 @@ namespace NadekoBot.Modules.Help
 | 
			
		||||
                return str + String.Format(str, NadekoBot.Credentials.ClientId);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        public Help(ILocalization loc, CommandService cmds, DiscordSocketClient client) : base(loc, cmds, client)
 | 
			
		||||
        public Help(ILocalization loc, CommandService cmds, ShardedDiscordClient client) : base(loc, cmds, client)
 | 
			
		||||
        {
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
@@ -99,7 +99,7 @@ namespace NadekoBot.Modules.Help
 | 
			
		||||
        [LocalizedCommand, LocalizedRemarks, LocalizedSummary, LocalizedAlias]
 | 
			
		||||
        [RequireContext(ContextType.Guild)]
 | 
			
		||||
        [OwnerOnly]
 | 
			
		||||
        public async Task Hgit(IUserMessage umsg)
 | 
			
		||||
        public Task Hgit(IUserMessage umsg)
 | 
			
		||||
        {
 | 
			
		||||
            var helpstr = new StringBuilder();
 | 
			
		||||
 | 
			
		||||
@@ -115,12 +115,13 @@ namespace NadekoBot.Modules.Help
 | 
			
		||||
                }
 | 
			
		||||
                helpstr.AppendLine($"`{com.Text}` {string.Join(" ", com.Aliases.Skip(1).Select(a=>"`"+a+"`"))} | {com.Remarks} | {com.Summary}");
 | 
			
		||||
            }
 | 
			
		||||
            helpstr = helpstr.Replace((await NadekoBot.Client.GetCurrentUserAsync()).Username , "@BotName");
 | 
			
		||||
            helpstr = helpstr.Replace(NadekoBot.Client.GetCurrentUser().Username , "@BotName");
 | 
			
		||||
#if DEBUG
 | 
			
		||||
            File.WriteAllText("../../../../../docs/Commands List.md", helpstr.ToString());
 | 
			
		||||
#else
 | 
			
		||||
            File.WriteAllText("commandlist.md", helpstr.ToString());
 | 
			
		||||
#endif
 | 
			
		||||
            return Task.CompletedTask;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        [LocalizedCommand, LocalizedRemarks, LocalizedSummary, LocalizedAlias]
 | 
			
		||||
 
 | 
			
		||||
@@ -25,7 +25,7 @@ namespace NadekoBot.Modules.Music
 | 
			
		||||
        public const string MusicDataPath = "data/musicdata";
 | 
			
		||||
        private IGoogleApiService _google;
 | 
			
		||||
 | 
			
		||||
        public Music(ILocalization loc, CommandService cmds, DiscordSocketClient client, IGoogleApiService google) : base(loc, cmds, client)
 | 
			
		||||
        public Music(ILocalization loc, CommandService cmds, ShardedDiscordClient client, IGoogleApiService google) : base(loc, cmds, client)
 | 
			
		||||
        {
 | 
			
		||||
            //it can fail if its currenctly opened or doesn't exist. Either way i don't care
 | 
			
		||||
            try { Directory.Delete(MusicDataPath, true); } catch { }
 | 
			
		||||
@@ -520,16 +520,33 @@ namespace NadekoBot.Modules.Music
 | 
			
		||||
            await channel.SendMessageAsync($"🎵🔁`Repeat playlist {(currentValue ? "enabled" : "disabled")}`").ConfigureAwait(false);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        ///
 | 
			
		||||
        //[LocalizedCommand, LocalizedDescription, LocalizedSummary, LocalizedAlias]
 | 
			
		||||
        //[LocalizedCommand, LocalizedRemarks, LocalizedSummary, LocalizedAlias]
 | 
			
		||||
        //[RequireContext(ContextType.Guild)]
 | 
			
		||||
        //public async Task Save(IUserMessage umsg, [Remainder] string name)
 | 
			
		||||
        //{
 | 
			
		||||
        //    var channel = (ITextChannel)umsg.Channel;
 | 
			
		||||
        //    MusicPlayer musicPlayer;
 | 
			
		||||
        //    if (!MusicPlayers.TryGetValue(channel.Guild.Id, out musicPlayer))
 | 
			
		||||
        //        return;
 | 
			
		||||
 | 
			
		||||
        //    var curSong = musicPlayer.CurrentSong;
 | 
			
		||||
        //    var items = musicPlayer.Playlist.Append(curSong);
 | 
			
		||||
 | 
			
		||||
        //    MusicPlaylist playlist;
 | 
			
		||||
        //    using (var uow = DbHandler.UnitOfWork())
 | 
			
		||||
        //    {
 | 
			
		||||
        //        playlist = new MusicPlaylist
 | 
			
		||||
        //        {
 | 
			
		||||
        //            Name = name,
 | 
			
		||||
        //            Songs = items.ToList()
 | 
			
		||||
        //        };
 | 
			
		||||
        //        uow.MusicPlaylists.Add(playlist);
 | 
			
		||||
        //    }
 | 
			
		||||
 | 
			
		||||
        //    await channel.SendMessageAsync($"Playlist saved as {name}, id: {playlist.Id}.");
 | 
			
		||||
        //}
 | 
			
		||||
 | 
			
		||||
        //[LocalizedCommand, LocalizedDescription, LocalizedSummary, LocalizedAlias]
 | 
			
		||||
        //[LocalizedCommand, LocalizedRemarks, LocalizedSummary, LocalizedAlias]
 | 
			
		||||
        //[RequireContext(ContextType.Guild)]
 | 
			
		||||
        //public async Task Load(IUserMessage umsg, [Remainder] string name)
 | 
			
		||||
        //{
 | 
			
		||||
@@ -537,7 +554,7 @@ namespace NadekoBot.Modules.Music
 | 
			
		||||
 | 
			
		||||
        //}
 | 
			
		||||
 | 
			
		||||
        //[LocalizedCommand, LocalizedDescription, LocalizedSummary, LocalizedAlias]
 | 
			
		||||
        //[LocalizedCommand, LocalizedRemarks, LocalizedSummary, LocalizedAlias]
 | 
			
		||||
        //[RequireContext(ContextType.Guild)]
 | 
			
		||||
        //public async Task Playlists(IUserMessage umsg, [Remainder] string num)
 | 
			
		||||
        //{
 | 
			
		||||
@@ -545,7 +562,7 @@ namespace NadekoBot.Modules.Music
 | 
			
		||||
 | 
			
		||||
        //}
 | 
			
		||||
 | 
			
		||||
        //[LocalizedCommand, LocalizedDescription, LocalizedSummary, LocalizedAlias]
 | 
			
		||||
        //[LocalizedCommand, LocalizedRemarks, LocalizedSummary, LocalizedAlias]
 | 
			
		||||
        //[RequireContext(ContextType.Guild)]
 | 
			
		||||
        //public async Task DeletePlaylist(IUserMessage umsg, [Remainder] string pl)
 | 
			
		||||
        //{
 | 
			
		||||
 
 | 
			
		||||
@@ -18,7 +18,7 @@ namespace NadekoBot.Modules.NSFW
 | 
			
		||||
    [NadekoModule("NSFW", "~")]
 | 
			
		||||
    public class NSFW : DiscordModule
 | 
			
		||||
    {
 | 
			
		||||
        public NSFW(ILocalization loc, CommandService cmds, DiscordSocketClient client) : base(loc, cmds, client)
 | 
			
		||||
        public NSFW(ILocalization loc, CommandService cmds, ShardedDiscordClient client) : base(loc, cmds, client)
 | 
			
		||||
        {
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -17,7 +17,7 @@ namespace NadekoBot.Modules.Permissions
 | 
			
		||||
    [NadekoModule("Permissions", ";")]
 | 
			
		||||
    public class Permissions : DiscordModule
 | 
			
		||||
    {
 | 
			
		||||
        public Permissions(ILocalization loc, CommandService cmds, DiscordSocketClient client) : base(loc, cmds, client)
 | 
			
		||||
        public Permissions(ILocalization loc, CommandService cmds, ShardedDiscordClient client) : base(loc, cmds, client)
 | 
			
		||||
        {
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -10,7 +10,7 @@ namespace NadekoBot.Modules.Games
 | 
			
		||||
    [Module(">", AppendSpace = false)]
 | 
			
		||||
    public partial class Pokemon : DiscordModule
 | 
			
		||||
    {
 | 
			
		||||
        public Pokemon(ILocalization loc, CommandService cmds, DiscordSocketClient client) : base(loc, cmds, client)
 | 
			
		||||
        public Pokemon(ILocalization loc, CommandService cmds, ShardedDiscordClient client) : base(loc, cmds, client)
 | 
			
		||||
        {
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -25,7 +25,7 @@ namespace NadekoBot.Modules.Searches
 | 
			
		||||
    {
 | 
			
		||||
        private IGoogleApiService _google { get; }
 | 
			
		||||
 | 
			
		||||
        public Searches(ILocalization loc, CommandService cmds, DiscordSocketClient client, IGoogleApiService youtube) : base(loc, cmds, client)
 | 
			
		||||
        public Searches(ILocalization loc, CommandService cmds, ShardedDiscordClient client, IGoogleApiService youtube) : base(loc, cmds, client)
 | 
			
		||||
        {
 | 
			
		||||
            _google = youtube;
 | 
			
		||||
        }
 | 
			
		||||
 
 | 
			
		||||
@@ -12,7 +12,7 @@ namespace NadekoBot.Modules.Translator
 | 
			
		||||
    [NadekoModule("Translator", "~")]
 | 
			
		||||
    public class Translator : DiscordModule
 | 
			
		||||
    {
 | 
			
		||||
        public Translator(ILocalization loc, CommandService cmds, DiscordSocketClient client) : base(loc, cmds, client)
 | 
			
		||||
        public Translator(ILocalization loc, CommandService cmds, ShardedDiscordClient client) : base(loc, cmds, client)
 | 
			
		||||
        {
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -18,7 +18,7 @@ namespace NadekoBot.Modules.Utility
 | 
			
		||||
    [NadekoModule("Utility", ".")]
 | 
			
		||||
    public partial class Utility : DiscordModule
 | 
			
		||||
    {
 | 
			
		||||
        public Utility(ILocalization loc, CommandService cmds, DiscordSocketClient client) : base(loc, cmds, client)
 | 
			
		||||
        public Utility(ILocalization loc, CommandService cmds, ShardedDiscordClient client) : base(loc, cmds, client)
 | 
			
		||||
        {
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
 
 | 
			
		||||
@@ -26,7 +26,7 @@ namespace NadekoBot
 | 
			
		||||
 | 
			
		||||
        public static CommandService CommandService { get; private set; }
 | 
			
		||||
        public static CommandHandler CommandHandler { get; private set; }
 | 
			
		||||
        public static DiscordSocketClient Client { get; private set; }
 | 
			
		||||
        public static ShardedDiscordClient  Client { get; private set; }
 | 
			
		||||
        public static Localization Localizer { get; private set; }
 | 
			
		||||
        public static BotCredentials Credentials { get; private set; }
 | 
			
		||||
 | 
			
		||||
@@ -43,7 +43,7 @@ namespace NadekoBot
 | 
			
		||||
            _log.Info("Starting NadekoBot v" + typeof(NadekoBot).GetTypeInfo().Assembly.GetCustomAttribute<AssemblyInformationalVersionAttribute>().InformationalVersion);
 | 
			
		||||
 | 
			
		||||
            //create client
 | 
			
		||||
            Client = new DiscordSocketClient(new DiscordSocketConfig
 | 
			
		||||
            Client = new ShardedDiscordClient (new DiscordSocketConfig
 | 
			
		||||
            {
 | 
			
		||||
                AudioMode = Discord.Audio.AudioMode.Outgoing,
 | 
			
		||||
                MessageCacheSize = 10,
 | 
			
		||||
@@ -61,7 +61,7 @@ namespace NadekoBot
 | 
			
		||||
            //setup DI
 | 
			
		||||
            var depMap = new DependencyMap();
 | 
			
		||||
            depMap.Add<ILocalization>(Localizer);
 | 
			
		||||
            depMap.Add<DiscordSocketClient>(Client);
 | 
			
		||||
            depMap.Add<ShardedDiscordClient >(Client);
 | 
			
		||||
            depMap.Add<CommandService>(CommandService);
 | 
			
		||||
            depMap.Add<IGoogleApiService>(Google);
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -18,13 +18,13 @@ namespace NadekoBot.Services
 | 
			
		||||
{
 | 
			
		||||
    public class CommandHandler
 | 
			
		||||
    {
 | 
			
		||||
        private DiscordSocketClient _client;
 | 
			
		||||
        private ShardedDiscordClient  _client;
 | 
			
		||||
        private CommandService _commandService;
 | 
			
		||||
        private Logger _log;
 | 
			
		||||
 | 
			
		||||
        public event EventHandler<CommandExecutedEventArgs> CommandExecuted = delegate { };
 | 
			
		||||
 | 
			
		||||
        public CommandHandler(DiscordSocketClient client, CommandService commandService)
 | 
			
		||||
        public CommandHandler(ShardedDiscordClient client, CommandService commandService)
 | 
			
		||||
        {
 | 
			
		||||
            _client = client;
 | 
			
		||||
            _commandService = commandService;
 | 
			
		||||
 
 | 
			
		||||
@@ -13,7 +13,7 @@ namespace NadekoBot.Services.Impl
 | 
			
		||||
    public class StatsService : IStatsService
 | 
			
		||||
    {
 | 
			
		||||
        private int messageCounter;
 | 
			
		||||
        private DiscordSocketClient client;
 | 
			
		||||
        private ShardedDiscordClient  client;
 | 
			
		||||
        private DateTime started;
 | 
			
		||||
        private int commandsRan = 0;
 | 
			
		||||
 | 
			
		||||
@@ -22,7 +22,7 @@ namespace NadekoBot.Services.Impl
 | 
			
		||||
        public string Heap => Math.Round((double)GC.GetTotalMemory(false) / 1.MiB(), 2).ToString();
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        public StatsService(DiscordSocketClient client, CommandHandler cmdHandler)
 | 
			
		||||
        public StatsService(ShardedDiscordClient  client, CommandHandler cmdHandler)
 | 
			
		||||
        {
 | 
			
		||||
 | 
			
		||||
            this.client = client;
 | 
			
		||||
@@ -33,14 +33,18 @@ namespace NadekoBot.Services.Impl
 | 
			
		||||
 | 
			
		||||
            this.client.Disconnected += _ => Reset();
 | 
			
		||||
        }
 | 
			
		||||
        public Task<string> Print() => Task.FromResult($@"`Author: Kwoth` `Library: Discord.Net`
 | 
			
		||||
        public Task<string> Print()
 | 
			
		||||
        {
 | 
			
		||||
            var curUser = client.GetCurrentUser();
 | 
			
		||||
            return Task.FromResult($@"`Author: Kwoth` `Library: Discord.Net`
 | 
			
		||||
`Bot Version: {BotVersion}`
 | 
			
		||||
`Bot id: {(client.GetCurrentUser()).Id}`
 | 
			
		||||
`Bot id: {curUser.Id}`
 | 
			
		||||
`Owners' Ids: {string.Join(", ", NadekoBot.Credentials.OwnerIds)}`
 | 
			
		||||
`Uptime: {GetUptimeString()}`
 | 
			
		||||
`Servers: {client.GetGuilds().Count} | TextChannels: {client.GetGuilds().SelectMany(g => g.GetChannels().Where(c => c is ITextChannel)).Count()} | VoiceChannels: {client.GetGuilds().SelectMany(g => g.GetChannels().Where(c => c is IVoiceChannel)).Count()}`
 | 
			
		||||
`Commands Ran this session: {commandsRan}`
 | 
			
		||||
`Messages: {messageCounter} ({messageCounter / (double)GetUptime().TotalSeconds:F2}/sec)` `Heap: {Heap} MB`");
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public Task Reset()
 | 
			
		||||
        {
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										83
									
								
								src/NadekoBot/ShardedDiscordClient.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										83
									
								
								src/NadekoBot/ShardedDiscordClient.cs
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,83 @@
 | 
			
		||||
using Discord;
 | 
			
		||||
using Discord.WebSocket;
 | 
			
		||||
using System;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.Linq;
 | 
			
		||||
using System.Text;
 | 
			
		||||
using System.Threading.Tasks;
 | 
			
		||||
using Discord.API;
 | 
			
		||||
using Discord.Logging;
 | 
			
		||||
using System.IO;
 | 
			
		||||
 | 
			
		||||
namespace NadekoBot
 | 
			
		||||
{
 | 
			
		||||
    public class ShardedDiscordClient 
 | 
			
		||||
    {
 | 
			
		||||
        private DiscordSocketConfig discordSocketConfig;
 | 
			
		||||
 | 
			
		||||
        public Func<IGuildUser, Task> UserJoined { get; internal set; } = delegate { return Task.CompletedTask; };
 | 
			
		||||
        public Func<IMessage, Task> MessageReceived { get; internal set; } = delegate { return Task.CompletedTask; };
 | 
			
		||||
        public Func<IGuildUser, Task> UserLeft { get; internal set; } = delegate { return Task.CompletedTask; };
 | 
			
		||||
        public Func<IGuildUser, IGuildUser, Task> UserUpdated { get; internal set; } = delegate { return Task.CompletedTask; };
 | 
			
		||||
        public Func<Optional<IMessage>, IMessage, Task> MessageUpdated { get; internal set; } = delegate { return Task.CompletedTask; };
 | 
			
		||||
        public Func<ulong, Optional<IMessage>, Task> MessageDeleted { get; internal set; } = delegate { return Task.CompletedTask; };
 | 
			
		||||
        public Func<IUser, IGuild, Task> UserBanned { get; internal set; } = delegate { return Task.CompletedTask; };
 | 
			
		||||
        public Func<IUser, IGuild, Task> UserUnbanned { get; internal set; } = delegate { return Task.CompletedTask; };
 | 
			
		||||
        public Func<IGuildUser, IPresence, IPresence, Task> UserPresenceUpdated { get; internal set; } = delegate { return Task.CompletedTask; };
 | 
			
		||||
        public Func<IUser, IVoiceState, IVoiceState, Task> UserVoiceStateUpdated { get; internal set; } = delegate { return Task.CompletedTask; };
 | 
			
		||||
        public Func<IChannel, Task> ChannelCreated { get; internal set; } = delegate { return Task.CompletedTask; };
 | 
			
		||||
        public Func<IChannel, Task> ChannelDestroyed { get; internal set; } = delegate { return Task.CompletedTask; };
 | 
			
		||||
        public Func<IChannel, IChannel, Task> ChannelUpdated { get; internal set; } = delegate { return Task.CompletedTask; };
 | 
			
		||||
        public Func<Exception, Task> Disconnected { get; internal set; } = delegate { return Task.CompletedTask; };
 | 
			
		||||
 | 
			
		||||
        private IReadOnlyList<DiscordSocketClient> Clients { get; }
 | 
			
		||||
 | 
			
		||||
        public ShardedDiscordClient (DiscordSocketConfig discordSocketConfig)
 | 
			
		||||
        {
 | 
			
		||||
            this.discordSocketConfig = discordSocketConfig;
 | 
			
		||||
 | 
			
		||||
            var clientList = new List<DiscordSocketClient>();
 | 
			
		||||
            for (int i = 0; i < discordSocketConfig.TotalShards; i++)
 | 
			
		||||
            {
 | 
			
		||||
                discordSocketConfig.ShardId = i;
 | 
			
		||||
                var client = new DiscordSocketClient(discordSocketConfig);
 | 
			
		||||
                clientList.Add(client);
 | 
			
		||||
                client.UserJoined += async arg1 => await UserJoined(arg1);
 | 
			
		||||
                client.MessageReceived += async arg1 => await MessageReceived(arg1);
 | 
			
		||||
                client.UserLeft += async arg1 => await UserLeft(arg1);
 | 
			
		||||
                client.UserUpdated += async (arg1, gu2) => await UserUpdated(arg1, gu2);
 | 
			
		||||
                client.MessageUpdated += async (arg1, m2) => await MessageUpdated(arg1, m2);
 | 
			
		||||
                client.MessageDeleted += async (arg1, arg2) => await MessageDeleted(arg1, arg2);
 | 
			
		||||
                client.UserBanned += async (arg1, arg2) => await UserBanned(arg1, arg2);
 | 
			
		||||
                client.UserPresenceUpdated += async (arg1, arg2, arg3) => await UserPresenceUpdated(arg1, arg2, arg3);
 | 
			
		||||
                client.UserVoiceStateUpdated += async (arg1, arg2, arg3) => await UserVoiceStateUpdated(arg1, arg2, arg3);
 | 
			
		||||
                client.ChannelCreated += async arg => await ChannelCreated(arg);
 | 
			
		||||
                client.ChannelDestroyed += async arg => await ChannelDestroyed(arg);
 | 
			
		||||
                client.ChannelUpdated += async (arg1, arg2) => await ChannelUpdated(arg1, arg2);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            Clients = clientList.AsReadOnly();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public ISelfUser GetCurrentUser() => 
 | 
			
		||||
            Clients.Select(c => c.GetCurrentUser()).FirstOrDefault(u => u != null);
 | 
			
		||||
 | 
			
		||||
        public IReadOnlyCollection<IGuild> GetGuilds() =>
 | 
			
		||||
            Clients.SelectMany(c => c.GetGuilds()).ToArray();
 | 
			
		||||
 | 
			
		||||
        public IGuild GetGuild(ulong id) =>
 | 
			
		||||
            Clients.Select(c => c.GetGuild(id)).FirstOrDefault(g => g != null);
 | 
			
		||||
 | 
			
		||||
        public Task<IDMChannel> GetDMChannelAsync(ulong channelId) =>
 | 
			
		||||
            Clients.Select(async c => await c.GetDMChannelAsync(channelId).ConfigureAwait(false)).FirstOrDefault(c => c != null);
 | 
			
		||||
 | 
			
		||||
        internal Task LoginAsync(TokenType tokenType, string token) =>
 | 
			
		||||
            Task.WhenAll(Clients.Select(c => c.LoginAsync(tokenType, token)));
 | 
			
		||||
 | 
			
		||||
        internal Task ConnectAsync() =>
 | 
			
		||||
            Task.WhenAll(Clients.Select(c => c.ConnectAsync()));
 | 
			
		||||
 | 
			
		||||
        internal Task DownloadAllUsersAsync() =>
 | 
			
		||||
            Task.WhenAll(Clients.Select(c => c.DownloadAllUsersAsync()));
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user