예제 #1
0
        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());
        }
예제 #2
0
파일: CoreService.cs 프로젝트: zio3/VetCoin
 public IQueryable <CoinTransaction> GetCoinTransactionQuery(VetMember vetMember)
 {
     return(DbContext
            .CoinTransactions
            .AsQueryable()
            .Where(c => c.SendeVetMemberId == vetMember.Id || c.RecivedVetMemberId == vetMember.Id));
 }
예제 #3
0
        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());
        }
예제 #4
0
        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());
        }
예제 #5
0
파일: CoreService.cs 프로젝트: zio3/VetCoin
 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()
     }));
 }
예제 #6
0
        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());
        }
예제 #7
0
        //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);
        }
예제 #8
0
파일: CoreService.cs 프로젝트: zio3/VetCoin
        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);
        }
예제 #9
0
        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);
        }
예제 #10
0
        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);
        }
예제 #11
0
        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);
            }
        }
예제 #12
0
        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);
        }
예제 #13
0
파일: CoreService.cs 프로젝트: zio3/VetCoin
        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());
        }
예제 #14
0
        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);
        }
예제 #15
0
        //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());
        }
예제 #16
0
        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());
        }
예제 #17
0
파일: CoreService.cs 프로젝트: zio3/VetCoin
        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
            });
        }
예제 #18
0
        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());
        }