private async Task SendMessages(Contract contract, VetMember sender, string message) { var stakeHolders = await GetStakeHolders(contract.Id); var trade = DbContext.Contracts.AsQueryable().Where(c => c.Id == contract.Id).Select(c => c.Trade).First(); // var dmMessage = $@" //メッセージ元:{trade.Title} //URL:https://vetcoin.azurewebsites.net/Trades/Contracts?contractId={contract.Id} //差出人:{sender.Name} //{message}"; Discord.EmbedBuilder builder = new Discord.EmbedBuilder(); builder.WithTitle(trade.Title) .WithAuthor(sender.Name, sender.GetAvaterIconUrl(), sender.GetMemberPageUrl(StaticSettings.SiteBaseUrl)) .WithUrl($"https://vetcoin.azurewebsites.net/Trades/Contracts?contractId={contract.Id}") // .AddField("アクション", "メッセージがあります") .AddField("メッセージ内容", message); var messageTargets = stakeHolders.Where(c => c.Id != sender.Id).ToArray(); //#if DEBUG // messageTargets = new[] { sender }; //#endif await CoreService.SendDirectMessage(messageTargets, string.Empty, builder.Build()); }
public IQueryable <CoinTransaction> GetCoinTransactionQuery(VetMember vetMember) { return(DbContext .CoinTransactions .AsQueryable() .Where(c => c.SendeVetMemberId == vetMember.Id || c.RecivedVetMemberId == vetMember.Id)); }
private async Task SendMessages(Contract contract, VetMember sender) { var stakeHolders = await GetStakeHolders(contract.Id); var trade = DbContext.Contracts.AsQueryable().Where(c => c.Id == contract.Id).Select(c => c.Trade).First(); EmbedBuilder builder = new EmbedBuilder(); builder.WithTitle(trade.Title) .WithAuthor(sender.Name, sender.GetAvaterIconUrl(), sender.GetMemberPageUrl(StaticSettings.SiteBaseUrl)) .WithUrl($"https://vetcoin.azurewebsites.net/Trades/Contracts?contractId={contract.Id}") .AddField("アクション", "提案がありました") .AddField("報酬", contract.Reword, true) .AddField("納期", GetNotEmptyStr(contract.DeliveryDate), true) .AddField("提案内容", GetNotEmptyStr(contract.AgreementContent)); // var dmMessage = $@"提案がありました。確認してください。 //タイトル:{trade.Title} //提案主:{sender.Name} //URL:https://vetcoin.azurewebsites.net/Trades/Contracts?contractId={contract.Id} //{contract.AgreementContent}"; var messageTargets = stakeHolders.Where(c => c.Id != sender.Id).ToArray(); await CoreService.SendDirectMessage(messageTargets, string.Empty, builder.Build()); }
private async Task SendMessages(Trade trade, VetMember sender, string message) { var senderIsOwner = trade.VetMemberId == sender.Id; var messageTargets = senderIsOwner ? DbContext.TradeMessages.AsQueryable().Where(c => c.TradeId == trade.Id).Select(c => c.VetMember).Distinct().ToArray() : new[] { trade.VetMember }; var dmMessage = $@" メッセージ元:{trade.Title} URL:{StaticSettings.SiteBaseUrl}Trades/Details?id={trade.Id} 差出人:{sender.Name} {message}"; Discord.EmbedBuilder builder = new Discord.EmbedBuilder(); builder.WithTitle(trade.Title) .WithAuthor(sender.Name, sender.GetAvaterIconUrl(), sender.GetMemberPageUrl(StaticSettings.SiteBaseUrl)) .WithUrl($"{StaticSettings.SiteBaseUrl}Trades/Details?id={trade.Id}") // .AddField("アクション", "メッセージがあります") .AddField("メッセージ内容", message); await CoreService.SendDirectMessage(messageTargets, string.Empty, builder.Build()); }
public IEnumerable <SelectListItem> GetOtherUserDdl(VetMember currentUser) { return(DbContext.VetMembers .AsQueryable() //.Where(c => c.Id != 1) .Where(c => c.Id != currentUser.Id) .Where(c => c.MemberType == MemberType.User) .OrderBy(c => c.Name) .Select(c => new SelectListItem { Text = $"{c.Name}", Value = c.Id.ToString() })); }
private async Task SendConfirmNotificationAsync(ExteralApplication app, VetMember user, ExteralApplicationPayment eap) { Discord.EmbedBuilder builder = new Discord.EmbedBuilder(); builder.WithTitle($"{app.Name}:購入確認"); builder.WithUrl(app.CallbackUrl + $"?id={eap.Id}"); builder.WithAuthor(app.VetMember.Name, app.VetMember.GetAvaterIconUrl(), app.VetMember.GetMemberPageUrl(StaticSettings.SiteBaseUrl)); builder.AddField("金額", eap.Amount); builder.WithDescription(eap.Description); builder.WithFooter("よろしければ、タイトルをクリックして購入処理をつづけてください"); await CoreService.SendDirectMessage(new[] { user }, string.Empty, builder.Build()); }
//private async Task<VetMember[]> GetStakeHolders(int id) //{ // var contractMember = DbContext.Contracts.AsQueryable().Where(c => c.Id == id).Select(c => c.VetMember); // var tradeMember = DbContext.Contracts.AsQueryable().Where(c => c.Id == id).Select(c => c.Trade.VetMember); // var messageMembers = DbContext.TradeMessages.AsQueryable().Where(c => c.TradeId == id).Select(c => c.VetMember); // var stakeHolders = contractMember.Concat(tradeMember).Concat(messageMembers).Distinct(); // return await stakeHolders.ToArrayAsync(); //} private async Task SendMessages(Contract contract, VetMember sender, VetMember reciver) { //var stakeHolders = await GetStakeHolders(contract.Id); var trade = DbContext.Contracts.AsQueryable().Where(c => c.Id == contract.Id).Select(c => c.Trade).First(); var dmMessage = $@"契約が完了しました。確認してください。 タイトル:{trade.Title} URL:https://vetcoin.azurewebsites.net/Trades/Contracts?contractId={contract.Id} {contract.AgreementContent}"; var messageTargets = new[] { reciver }; await CoreService.SendDirectMessage(messageTargets, dmMessage); }
public long CalcAmount(VetMember member) { var sendAmount = DbContext.CoinTransactions .AsQueryable() .Where(c => c.SendeVetMemberId == member.Id) .Sum(c => c.Amount); var reciveAmount = DbContext.CoinTransactions .AsQueryable() .Where(c => c.RecivedVetMemberId == member.Id) .Sum(c => c.Amount); return(reciveAmount - sendAmount); }
private async Task SendMessages(Trade trade, VetMember sender, string message) { var stakeHolders = await GetStakeHolders(trade.Id); var dmMessage = $@" メッセージ元:{trade.Title} URL:https://vetcoin.azurewebsites.net/Trades/Details?id={trade.Id} 差出人:{sender.Name} {message}"; var messageTargets = stakeHolders.Where(c => c.Id != sender.Id).ToArray(); await CoreService.SendDirectMessage(messageTargets, dmMessage); }
public async Task <string> GetImagePath(VetMember member) { HttpClient hc = new HttpClient(); var tmpFilePath = Path.GetTempPath(); var imageFilePath = Path.Combine(tmpFilePath, $"{member.DiscordId}_{member.AvatarId}.png"); if (!File.Exists(imageFilePath)) { var url = $"https://cdn.discordapp.com/avatars/{member.DiscordId}/{member.AvatarId}.png?size=128"; var bytes = await hc.GetByteArrayAsync(url); await File.WriteAllBytesAsync(imageFilePath, bytes); } return(imageFilePath); }
public async Task <MemoryStream> CreateImage(VetMember from, VetMember to, int amount) { var colorCode = AmountToColor(amount); //HttpClientBuilderExtensions HttpClient hc = new HttpClient(); //キャンバス画像を作成 100*50pixel using (var myMagick = new ImageMagick.MagickImage(new ImageMagick.MagickColor(colorCode), 640, 128)) { //var hc.GetByteArrayAsync($"https://cdn.discordapp.com/avatars/{from.DiscordId}/{from.AvatarId}.png?size=128")); var tmpFilePath = Path.GetTempPath(); var fromImageFilePath = await GetImagePath(from); var toImageFilePath = await GetImagePath(to); using (var icon = new ImageMagick.MagickImage(fromImageFilePath)) { myMagick.Composite(icon); } using (var icon = new ImageMagick.MagickImage(toImageFilePath)) { myMagick.Composite(icon, new PointD(640 - 128, 0)); } new Drawables() // Draw text on the image .FontPointSize(60) .Font("Comic Sans") .StrokeColor(MagickColors.White) .FillColor(MagickColors.White) //.TextAlignment(TextAlignment.Center) .Text(158, 64, $"{amount:#,0}{StaticSettings.CurrenryUnit}") // Add an ellipse .StrokeColor(new MagickColor(0, Quantum.Max, 0)) //.FillColor(MagickColors.SaddleBrown) //.Ellipse(256, 96, 192, 8, 0, 360) .Draw(myMagick); MemoryStream ms = new MemoryStream(); myMagick.Write(ms, MagickFormat.Png); ms.Seek(0, SeekOrigin.Begin); return(ms); } }
private async Task SendMessages(Contract contract, VetMember sender, string message) { var stakeHolders = await GetStakeHolders(contract.Id); var trade = DbContext.Contracts.AsQueryable().Where(c => c.Id == contract.Id).Select(c => c.Trade).First(); var dmMessage = $@" メッセージ元:{trade.Title} URL:https://vetcoin.azurewebsites.net/Trades/Contracts?contractId={contract.Id} 差出人:{sender.Name} {message}"; var messageTargets = stakeHolders.Where(c => c.Id != sender.Id).ToArray(); await CoreService.SendDirectMessage(messageTargets, dmMessage); }
public async Task <IEnumerable <Contract> > EnumWaitingContracts(VetMember vetMember) { if (vetMember == null) { return(new Contract[0]); } return(await DbContext .Contracts .Include(c => c.VetMember) .Include(c => c.Trade.VetMember) .AsQueryable() .Where(c => c.ContractStatus == ContractStatus.Deliveryed) .Where(c => (c.Trade.Direction == Data.Direction.Buy && c.Trade.VetMemberId == vetMember.Id) || (c.Trade.Direction == Data.Direction.Sell && c.VetMemberId == vetMember.Id)) .ToArrayAsync()); }
public async Task <VetMember> JoinUser(RestSelfUser user) { var addUser = new VetMember { DiscordId = user.Id, AvatarId = user.AvatarId, Name = user.Username }; var issuer = await DbContext.VetMembers .AsQueryable() .FirstOrDefaultAsync(c => c.MemberType == MemberType.Issuer); var vault = await DbContext .VetMembers .AsQueryable().FirstOrDefaultAsync(c => c.MemberType == MemberType.Vault); //var initTran = new CoinTransaction //{ // Amount = 4000, // SendVetMember = vault, // RecivedVetMember = addUser, // Text = "[初期配布コイン]", // TransactionType = CoinTransactionType.InitialDistribution, //}; DbContext.VetMembers.Add(addUser); if (DbContext.CoinTransactions.Count() != 0) { var issueTran = new CoinTransaction { Amount = 100000, SendVetMember = issuer, RecivedVetMember = vault, TransactionType = CoinTransactionType.Issue, Text = $"[登録時発行:{user.Username}]" }; DbContext.CoinTransactions.Add(issueTran); } //DbContext.CoinTransactions.Add(initTran); return(addUser); }
//private async Task<VetMember[]> GetStakeHolders(int id) //{ // var contractMember = DbContext.Contracts.AsQueryable().Where(c => c.Id == id).Select(c => c.VetMember); // var tradeMember = DbContext.Contracts.AsQueryable().Where(c => c.Id == id).Select(c => c.Trade.VetMember); // var messageMembers = DbContext.TradeMessages.AsQueryable().Where(c => c.TradeId == id).Select(c => c.VetMember); // var stakeHolders = contractMember.Concat(tradeMember).Concat(messageMembers).Distinct(); // return await stakeHolders.ToArrayAsync(); //} private async Task SendMessages(Contract contract, VetMember sender, VetMember reciver, VetMember postUser) { //var stakeHolders = await GetStakeHolders(contract.Id); var trade = DbContext.Contracts.AsQueryable().Where(c => c.Id == contract.Id).Select(c => c.Trade).First(); Discord.EmbedBuilder builder = new Discord.EmbedBuilder(); builder.WithTitle(trade.Title) .WithAuthor(postUser.Name, postUser.GetAvaterIconUrl(), postUser.GetMemberPageUrl(StaticSettings.SiteBaseUrl)) .WithUrl($"https://vetcoin.azurewebsites.net/Trades/Contracts?contractId={contract.Id}") .AddField("アクション", "作業完了通知") .AddField("メッセージ内容", @"作業完了したようです。 納品物などを確認して契約完了ボタンをおしてください"); var messageTargets = new[] { sender }; await CoreService.SendDirectMessage(messageTargets, string.Empty, builder.Build()); }
private async Task SendMessages(Vender vender, VetMember sender, string message) { var senderIsOwner = vender.VetMemberId == sender.Id; var messageTargets = senderIsOwner ? DbContext.VenderMessages .AsQueryable() .Where(c => c.VenderId == vender.Id) .Select(c => c.VetMember).Distinct().ToArray() : new[] { vender.VetMember }; Discord.EmbedBuilder builder = new Discord.EmbedBuilder(); builder.WithTitle($"{ vender.Title} 【メッセージ】") .WithAuthor(sender.Name, sender.GetAvaterIconUrl(), sender.GetMemberPageUrl(StaticSettings.SiteBaseUrl)) .WithUrl($"{StaticSettings.SiteBaseUrl}Venders/Details?id={vender.Id}") .AddField("内容", message); await CoreService.SendDirectMessage(messageTargets, string.Empty, builder.Build()); }
public async Task <AuthenticationResult> StubAuthentication() { var entity = DbContext.VetMembers.FirstOrDefault(c => c.DiscordId == STUB_USER_ID); if (entity == null) { entity = new VetMember { DiscordId = STUB_USER_ID, AvatarId = string.Empty, Name = "[STUB_USER]" }; DbContext.VetMembers.Add(entity); } await DbContext.SaveChangesAsync(); return(new AuthenticationResult { IsAuthenticated = true, User = entity }); }
private async Task Notification(VetMember from, VetMember to, long amount, string message, long totalAmount) { var builder = new Discord.EmbedBuilder(); builder .WithTitle($"{from.Name} から{amount}{StaticSettings.CurrenryUnit} 送金されました") .WithAuthor( from.Name, from.GetAvaterIconUrl(), from.GetMemberPageUrl(StaticSettings.SiteBaseUrl) ) .AddField("金額", $"{amount}{StaticSettings.CurrenryUnit}", false) .AddField("残高", $"{totalAmount}{StaticSettings.CurrenryUnit}", false); if (!string.IsNullOrEmpty(message)) { builder .AddField("メッセージ", message, false); } var messageTargets = new[] { to }; await CoreService.SendDirectMessage(messageTargets, string.Empty, builder.Build()); }