Esempio n. 1
0
        public async Task RainAsync([Summary("金額")] decimal totalAmount = decimal.MinusOne, [Remainder] string comment = null)
        {
            if (totalAmount == decimal.MinusOne)
            {
                totalAmount = (decimal)Math.Pow(10, Random.NextDouble()) - 1;
            }
            var targets = await TippingManager.GetUsersAsync(Context.Channel, Context.User, 10).ConfigureAwait(false);

            if (targets.Any())
            {
                var limit  = DateTimeOffset.Now.AddDays(3);
                var amount = comment?.ToLower()?.Contains("powerful") ?? false ? totalAmount : Math.Truncate(totalAmount / targets.Count * 10000000) / 10000000;
                var count  = targets.Count;
                var embed  =
                    new EmbedBuilder()
                    .WithTitle("撒き銭完了")
                    .WithDescription("撒き銭しました。DM通知は行われませんのでご注意下さい。")
                    .WithCurrentTimestamp()
                    .WithColor(Colors.Green)
                    .WithFooter(EmbedManager.CurrentFooter)
                    .WithAuthor(Context.User)
                    .AddInlineField("一人あたりの金額", $"{amount:N8} ZNY")
                    .AddInlineField("対象者数", $"{count} 人")
                    .AddInlineField("総金額", $"{amount * count:N8} ZNY");
                if (!string.IsNullOrEmpty(comment))
                {
                    embed = embed.AddField("コメント", comment);
                }
                await Task.WhenAll(targets.Select(x => TippingManager.AddRequestAsync(new TipRequest(Context.User.Id, x.Id, amount, limit))).Append(ReplyAsync
                                                                                                                                                    (
                                                                                                                                                        message: Context.User.Mention,
                                                                                                                                                        embed: embed
                                                                                                                                                    ))).ConfigureAwait(false);
            }
            else
            {
                await ReplyAsync
                (
                    message : Context.User.Mention,
                    embed :
                    new EmbedBuilder()
                    .WithTitle("撒き銭失敗")
                    .WithDescription("撒き銭に失敗しました。撒き銭対象となれるユーザーがいないか、指定した金額が不正である可能性があります。")
                    .WithCurrentTimestamp()
                    .WithColor(Colors.Red)
                    .WithFooter(EmbedManager.CurrentFooter)
                    .WithAuthor(Context.User)
                ).ConfigureAwait(false);
            }
        }
Esempio n. 2
0
        public async Task TipAsync([Summary("送り先のユーザー")] IUser user, [Summary("金額")] decimal amount, [Remainder] string comment = null)
        {
            var limit = DateTimeOffset.Now.AddDays(3);
            await TippingManager.AddRequestAsync(new TipRequest(Context.User.Id, user.Id, amount, limit));

            await ReplyAsync
            (
                message : Context.User.Mention,
                embed :
                new EmbedBuilder()
                .WithTitle("投げ銭完了")
                .WithDescription($"{user.Mention} に投げ銭を行いました。")
                .WithCurrentTimestamp()
                .WithColor(Colors.Green)
                .WithFooter(EmbedManager.CurrentFooter)
                .WithAuthor(Context.User)
                .WithThumbnailUrl(user.GetAvatarUrl())
                .AddInlineField("金額", $"{amount:N8} ZNY")
            ).ConfigureAwait(false);

            var embed =
                new EmbedBuilder()
                .WithTitle("投げ銭通知")
                .WithDescription($"{Context.User.Mention} から投げ銭が届いています。受取期限までに`{ModuleManager.Prefix}balance`を実行することで投げ銭を受け取れます。")
                .WithCurrentTimestamp()
                .WithColor(Colors.Orange)
                .WithFooter(EmbedManager.CurrentFooter)
                .WithAuthor(user)
                .WithThumbnailUrl(Context.User.GetAvatarUrl())
                .AddInlineField("金額", $"{amount:N8} ZNY")
                .AddInlineField("受取期限", limit);

            if (!string.IsNullOrEmpty(comment))
            {
                embed = embed.AddField("コメント", comment);
            }
            var dm = await user.GetOrCreateDMChannelAsync().ConfigureAwait(false);

            await dm.SendMessageAsync
            (
                text : user.Mention,
                embed : embed
            ).ConfigureAwait(false);
        }