コード例 #1
0
ファイル: Program.cs プロジェクト: sorashi/nekos-moe-daily
        private static async Task Main(string[] args)
        {
            var config = Config.Config.Load(Environment.GetEnvironmentVariable("NEKO_USE_TEST_CONFIG") == "true"
                ? "config.test.yml"
                : "config.yml");

            using var database = new TextFileDatabase(config.DataDir);
            await database.ConnectAsync();

            if (!string.IsNullOrWhiteSpace(config.DiscordWebhook))
            {
                posters.Add(new DiscordWebhookClient(new Uri(config.DiscordWebhook)));
            }
            if (!string.IsNullOrWhiteSpace(config.TelegramBotToken))
            {
                posters.Add(new TelegramClient(database, config));
            }

            var moeClient = new NekosMoeClient();
            var random    = new Random();
            var number    = random.NextDouble();
            var nsfw      = number < config.NsfwChance;

            Console.WriteLine($"NSFW rolled: {number}, configured chance {config.NsfwChance}, nsfw {nsfw}");
            var neko = await GetRandomNekoThatHasNotBeenPostedYet(database, moeClient, nsfw);

            if (posters.Count == 0)
            {
                return;
            }
            await Task.WhenAll(posters.Select(x => TaskWithExceptionHandling(x.PostAsync(neko))));

            await database.PostNekoAsync(neko.Id);
        }
コード例 #2
0
        public async Task PostAsync(Image neko)
        {
            var updates = await GetMessageUpdates();

            while (updates.Any())
            {
                var offset = await HandleUpdates(updates);

                updates = await GetMessageUpdates(offset);
            }

            string fileId = null;
            var    sb     = new StringBuilder();

            sb.AppendLine(neko.TagsTruncated());
            sb.AppendLine($"nsfw: {(neko.Nsfw ? "yes" : "no")}");
            var caption = sb.ToString();

            await foreach (var client in db.GetTelegramClientIdsAsync())
            {
                if (fileId == null)
                {
                    fileId = await SendPhoto(client, NekosMoeClient.GetImageUrlFromId(neko.Id), caption);
                }
                else
                {
                    await SendPhoto(client, fileId, caption);
                }
            }
        }
コード例 #3
0
        public async Task PostAsync(Image neko)
        {
            var request = new RestRequest(Method.POST);

            request.AddHeader("Content-Type", "application/json");
            var sb = new StringBuilder();

            sb.AppendLine(NekosMoeClient.GetImageUrlFromId(neko.Id));
            sb.AppendLine(neko.TagsTruncated());
            sb.Append($"nsfw: **{(neko.Nsfw ? "yes" : "no")}**");
            request.AddJsonBody(new { content = sb.ToString() });
            await c.ExecutePostAsync(request);
        }
コード例 #4
0
ファイル: Program.cs プロジェクト: sorashi/nekos-moe-daily
        private static async Task <Image> GetRandomNekoThatHasNotBeenPostedYet(INekoDatabase database, NekosMoeClient client, bool nsfw)
        {
            while (true)
            {
                // TODO handle rate limiting
                var nekos = await client.GetRandomNekos(nsfw, 50);

                foreach (var neko in nekos.Images)
                {
                    if (await database.HasBeenPostedAsync(neko.Id))
                    {
                        continue;
                    }
                    return(neko);
                }
            }
        }