public void MultiValueConversionThrowsForEmptyValues()
        {
            IMultiValueConverter converter = new MathOperationConverter();

            Assert.Throws <ArgumentException>(() =>
                                              converter.Convert(new object[] { }, typeof(object), null, null));
        }
        public void MultiValueConversionThrowsForNonIConvertible()
        {
            IMultiValueConverter converter = new MathOperationConverter();

            Assert.Throws <NotSupportedException>(() =>
                                                  converter.Convert(new object[] { new object() }, typeof(object), null, null));
        }
        public void ThrowsForWrongInputTypes()
        {
            var converter = new MathOperationConverter();

            Assert.Throws <NotSupportedException>(() =>
                                                  converter.Convert(10, new object(), CultureInfo.CurrentCulture));
        }
        public void SilentFailForNullValues()
        {
            var converter = new MathOperationConverter();

            Assert.Null(converter.Convert(null, 1, CultureInfo.CurrentCulture));
            Assert.Equal(10, converter.Convert(10, null, CultureInfo.CurrentCulture));
        }
        public void AcceptsConvertibles()
        {
            var converter = new MathOperationConverter(MathOperator.Multiply);

            // I won't test every convertible here, only two very contrary types.
            var result = converter.Convert("10", (decimal)10.123, CultureInfo.CurrentCulture);

            Assert.IsType <string>(result);
        }
        public void SupportsMultiValueConversion()
        {
            IMultiValueConverter converter = new MathOperationConverter(MathOperator.Add);

            object[] values = { 1, 2, 3, 4, 5, 6 };
            int      sum    = values.Sum(val => (int)val);

            Assert.Equal(
                sum,
                converter.Convert(values, typeof(int), null, null));
        }
        public void ConvertsValues()
        {
            var converter = new MathOperationConverter();

            double l = 10.5;
            double r = 5.5;

            converter.Operator = MathOperator.Add;
            Assert.Equal(l + r, converter.Convert(l, r, CultureInfo.CurrentCulture));

            converter.Operator = MathOperator.Subtract;
            Assert.Equal(l - r, converter.Convert(l, r, CultureInfo.CurrentCulture));

            converter.Operator = MathOperator.Multiply;
            Assert.Equal(l * r, converter.Convert(l, r, CultureInfo.CurrentCulture));

            converter.Operator = MathOperator.Divide;
            Assert.Equal(l / r, converter.Convert(l, r, CultureInfo.CurrentCulture));
        }
        public void InputTypeEqualsOutputType()
        {
            var converter = new MathOperationConverter();

            Assert.IsType <string>(converter.Convert("10", 5.5, CultureInfo.CurrentCulture));
        }
Example #9
0
        private async Task MainAsync()
        {
            // getting versions and assembly info
            SetBotVersionInfo();

            // init log channels
            _logChannels    = new List <DiscordChannel>();
            _lastLogChWrite = File.GetLastWriteTime("logchannels.txt");

            string json = await FileHandler.ReadJsonConfig();

            if (json.Length == 0)
            {
                return;
            }
            if (json == "default")
            {
                Console.ForegroundColor = ConsoleColor.DarkGreen;
                Console.WriteLine("Created default config file.\n" +
                                  "Now you need to get your discord bot token " +
                                  "and put it in config.json file.\n" +
                                  "Also make sure you set other parameters.");
                Console.ResetColor();
                return;
            }

            // setting up client
            var cfgjson = JsonSerializer.Deserialize <ConfigJson>(json);

            if (cfgjson == null)
            {
                return;
            }
            var cfg = new DiscordConfiguration
            {
                Token              = cfgjson.Token,
                TokenType          = TokenType.Bot,
                AutoReconnect      = true,
                MinimumLogLevel    = RuntimeInfo == "Debug" ? LogLevel.Debug : LogLevel.Information,
                MessageCacheSize   = 2048,
                LogTimestampFormat = "dd-MM-yyyy HH:mm:ss zzz"
            };

            // client init and event hooks
            _discord                         = new DiscordClient(cfg);
            _discord.Ready                  += Discord_Ready;
            _discord.GuildAvailable         += Discord_GuildAvailable;
            _discord.GuildUnavailable       += Discord_GuildUnavailable;
            _discord.GuildCreated           += Discord_GuildCreated;
            _discord.GuildDeleted           += Discord_GuildDeleted;
            _discord.ChannelDeleted         += Discord_ChannelDeleted;
            _discord.DmChannelDeleted       += Discord_DmChannelDeleted;
            _discord.GuildDownloadCompleted += Discord_GuildDownloadCompleted;
            _discord.ClientErrored          += Discord_ClientErrored;
            _discord.SocketClosed           += Discord_SocketClosed;
            _discord.Resumed                += Discord_Resumed;
            _discord.Heartbeated            += Discord_Heartbeated;

            // setting up interactivity
            var intcfg = new InteractivityConfiguration
            {
                Timeout            = TimeSpan.FromMinutes(cfgjson.ActTimeout),
                PaginationDeletion = PaginationDeletion.DeleteMessage,
                PollBehaviour      = PollBehaviour.KeepEmojis
            };

            _discord.UseInteractivity(intcfg);

            // setting up commands
            var cmdcfg = new CommandsNextConfiguration
            {
                StringPrefixes = new List <string> {
                    cfgjson.CommandPrefix
                },
                EnableDms           = cfgjson.DmsEnabled,
                EnableMentionPrefix = cfgjson.MentionEnabled,
                CaseSensitive       = cfgjson.CaseSensitive,
                EnableDefaultHelp   = true
            };

            // commands hooks and register
            _commands = _discord.UseCommandsNext(cmdcfg);
            _commands.CommandExecuted += Commands_CommandExecuted;
            _commands.CommandErrored  += Commands_CommandErrored;
            _commands.RegisterCommands <Commands.Commands>();
            _commands.RegisterCommands <LeetCommands>();
            _commands.RegisterCommands <Interactivities.Interactivities>();
            _commands.RegisterCommands <Administrative>();
            _commands.RegisterCommands <Cats>();
            _commands.RegisterCommands <DiceRolling>();
            _commands.RegisterCommands <CryptoAes>();
            _commands.RegisterCommands <CryptoRsa>();
            _commands.RegisterCommands <MathCommands>();
            _commands.RegisterCommands <StatusCommands>();
            _commands.RegisterCommands <VoiceCommands>();
            // adding math converter for custom type and name
            var mathopscvrt = new MathOperationConverter();

            _commands.RegisterConverter(mathopscvrt);
            _commands.RegisterUserFriendlyTypeName <MathOperation>("operator");

            // setting up and enabling voice
            var vcfg = new VoiceNextConfiguration
            {
                AudioFormat    = AudioFormat.Default,
                EnableIncoming = false
            };

            _discord.UseVoiceNext(vcfg);

            // setting custom help formatter
            _commands.SetHelpFormatter <HelpFormatter>();

            // init twitch live and youtube video monitors
            _ttvApIclid   = cfgjson.TwitchApiClid;
            _ttvApIsecret = cfgjson.TwitchApiSecret;
            _ytApIkey     = cfgjson.YoutubeApiKey;
            _tlm          = new TwitchLiveMonitor();
            _yvm          = new YoutubeVideoMonitor();

            // getting aes and rsa keys from config
            AesKey        = cfgjson.AesKey;
            AesIv         = cfgjson.AesIv;
            RsaPublicKey  = cfgjson.RsaPublicKey;
            RsaPrivateKey = cfgjson.RsaPrivateKey;

            // connecting discord
            try
            {
                await _discord.ConnectAsync();
            }
            catch (Exception e)
            {
                _discord.Logger.LogCritical($"{e.Message}");
                return;
            }

            await Task.Delay(-1);
        }