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); } }
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); }