Beispiel #1
0
        /// <summary>
        /// 1. LoadDatabase
        /// 2. Append Data
        /// 3. Save Database
        /// </summary>
        /// <returns></returns>
        public async Task AddEntryToDatabase(PollInfo pollInfo)
        {
            var db = await ReadDatabase();

            db.Add(pollInfo);

            var filesFolder = _configuration["FileStore:DataFolder"];

            if (!Directory.Exists(filesFolder))
            {
                _logger.LogError("FileStore:DataFolder does not refer to an existing directory. Did you configure it in appsettings.json?");
                await ReplyAsync("Bot not properly configured. Check logs for details.");

                return;
            }

            var pollModuleDirectory = Directory.CreateDirectory(Path.Combine(filesFolder, "PollModule"));
            var serialized          = JsonConvert.SerializeObject(db);
            await File.WriteAllTextAsync(Path.Combine(pollModuleDirectory.FullName, "PollDb.json"), serialized);
        }
        public async Task CreatePollAsync(string title, params string[] options)
        {
            if (options.Length > 10)
            {
                var msg = await ReplyAsync("Das Maximum an 10 Optionen von `poll` wurde überschritten!");

                await Task.Delay(3000);

                await base.Context.Message.DeleteAsync();

                await msg.DeleteAsync();

                return;
            }
            var emojis = new[]
            {
                "one",
                "two",
                "three",
                "four",
                "five",
                "six",
                "seven",
                "eight",
                "nine",
                "keycap_ten"
            }
            .Select(emoji => GEmojiSharp.Emoji.Get(emoji).Raw)
            .ToList();

            var pollInfo = new PollInfo()
            {
                UserId  = base.Context.User.Id,
                Title   = title,
                IsEnded = false
            };

            for (int i = 0; i < options.Length; i++)
            {
                pollInfo.Options.Add(new OptionEmojiPair
                {
                    Emoji  = emojis[i],
                    Option = options[i]
                });
            }

            var builder = new EmbedBuilder()
                          .WithColor(Color.DarkRed)
                          .WithFooter(footer => footer.Text = $"{_prefix}poll")
                          .WithCurrentTimestamp()
                          .WithTitle(title);

            StringBuilder desc = new StringBuilder();

            foreach (var emojiPair in pollInfo.Options)
            {
                desc.AppendLine($"{emojiPair.Emoji} - {emojiPair.Option}\n");
            }

            builder.AddField("Reagiere mit einem Emoji um zu voten:", desc.ToString());

            //await base.Context.Message.DeleteAsync();
            IUserMessage message = await base.Context.Channel.SendMessageAsync(embed : builder.Build());

            pollInfo.MessageId = message.Id;
            pollInfo.ChannelId = message.Channel.Id;

            for (int i = 0; i < options.Length; i++)
            {
                await message.AddReactionAsync(new Emoji(emojis[i]));
            }

            //Save database
            await AddEntryToDatabase(pollInfo);
        }
 private Task UpdateDb(PollInfo info) => _container.Upsert(info);
 /// <summary>
 /// 1. LoadDatabase
 /// 2. Append Data
 /// 3. Save Database
 /// </summary>
 /// <returns></returns>
 private Task AddEntryToDatabase(PollInfo info) => _container.Insert(info);