示例#1
0
        public async Task PushAvaUbUpdate(int id)
        {
            if (Context.Message.Author.Id != 195567858133106697)
            {
                return;
            }
            await ReplyAsync("Starting push!");

            await AvastarObject.UpdateUBs(id);

            await ReplyAsync("Done!");
        }
示例#2
0
        public async Task PushAvaUbUpdate(int first, int last)
        {
            if (Context.Message.Author.Id != 195567858133106697)
            {
                return;
            }
            for (int i = first; i <= last; i++)
            {
                await ReplyAsync($"Starting push for #{i}!");

                await AvastarObject.UpdateUBs(i);
                await ReplyAsync($"Done pushing #{i}!");
            }
        }
示例#3
0
        public async Task GetTop10Score()
        {
            var waitEmbed = new EmbedBuilder().WithColor(Color.DarkMagenta).WithTitle("Fetching data <a:loading:726356725648719894>");
            var msg       = await ReplyAsync(embed : waitEmbed.Build());

            var list = await AvastarObject.GetSeriesList();

            list = list.OrderByDescending(a => a.Score).ToList();
            var embed = new EmbedBuilder().WithColor(Color.DarkMagenta);

            embed.WithTitle($"Top 10 by Score");
            var str = "";

            for (int i = 0; i < 10; i++)
            {
                str += $"{i + 1}. [Avastar #{list[i].id}]({"https://avastars.io/avastar/"}{list[i].id}) - {list[i].Score}\n";
            }
            embed.WithDescription(str);
            await msg.ModifyAsync(m => m.Embed = embed.Build());
        }
示例#4
0
        public static async Task WatchChainForEvents()
        {
            // initiate web, contract and events
            bool first         = false;
            Web3 web3          = new Web3(web3Url);
            var  newPrimeEvent = web3.Eth.GetEvent <NewPrimeEvent>(avastarContractAddress);
            var  transferEvent = web3.Eth.GetEvent <Transfer>(avastarContractAddress);
            bool isOn          = true;
            // get last block param from db

            var checkCollec = DatabaseConnection.GetDb().GetCollection <Checkpoint>("Checkpoints");
            var checkpoint  = (await checkCollec.FindAsync(c => c.id == 1)).FirstOrDefault();

            BlockParameter lastBlock = await GetLastBlockCheckpoint(web3);

            BlockParameter firstBlock = new BlockParameter(new HexBigInteger(new BigInteger(checkpoint.lastBlockChecked)));

            while (isOn)
            {
                checkpoint = (await checkCollec.FindAsync(c => c.id == 1)).FirstOrDefault();
                firstBlock = new BlockParameter(new HexBigInteger(new BigInteger(checkpoint.lastBlockChecked)));
                lastBlock  = await GetLastBlockCheckpoint(web3);

                try
                {
                    if (lastBlock.BlockNumber.Value - firstBlock.BlockNumber.Value > 20000)
                    {
                        lastBlock = new BlockParameter(new HexBigInteger(firstBlock.BlockNumber.Value + 20000));
                    }
                    // event filters
                    var newPrimeFilter = newPrimeEvent.CreateFilterInput(firstBlock, lastBlock);
                    var transferFilter = transferEvent.CreateFilterInput(firstBlock, lastBlock);

                    // event logs from block range
                    var newPrimeLogs = await newPrimeEvent.GetAllChanges(newPrimeFilter);

                    var transferLogs = await transferEvent.GetAllChanges(transferFilter);

                    foreach (var prime in newPrimeLogs)
                    {
                        if ((int)prime.Event.id > lastMinted)
                        {
                            if (await AvastarObject.GetAvaCount() == (int)prime.Event.id)
                            {
                                await AvastarObject.CreateAva((int)prime.Event.id);

                                lastMinted = (int)prime.Event.id;
                                await PostToBirthChannel((int)prime.Event.id);
                            }
                        }
                    }
                    foreach (var transfer in transferLogs)
                    {
                        await AvastarObject.UpdateOwner((int)transfer.Event.TokenId, transfer.Event.To);
                    }
                    checkpoint.lastBlockChecked = Convert.ToInt32(lastBlock.BlockNumber.Value.ToString());
                    await checkCollec.FindOneAndReplaceAsync(c => c.id == 1, checkpoint);
                }
                catch (Exception e)
                {
                    Logger.Log(e.Message);
                }
                await Task.Delay(120000);
            }
        }