コード例 #1
0
        private async Task Client_JoinedGuild(IGuild arg)
        {
            ITextChannel defaultChannel = await arg.GetDefaultChannelAsync();

            defaultChannel.QueueMessageAsync(Locale.GetString(defaultChannel.Id, "miki_join_message"));

            List <string> allArgs      = new List <string>();
            List <object> allParams    = new List <object>();
            List <object> allExpParams = new List <object>();

            try
            {
                var users = await arg.GetUsersAsync();

                for (int i = 0; i < users.Count; i++)
                {
                    allArgs.Add($"(@p{i * 2}, @p{i * 2 + 1})");

                    allParams.Add(users.ElementAt(i).Id.ToDbLong());
                    allParams.Add(users.ElementAt(i).Username);

                    allExpParams.Add(users.ElementAt(i).GuildId.ToDbLong());
                    allExpParams.Add(users.ElementAt(i).Id.ToDbLong());
                }

                using (var context = new MikiContext())
                {
                    await context.Database.ExecuteSqlCommandAsync(
                        $"INSERT INTO dbo.\"Users\" (\"Id\", \"Name\") VALUES {string.Join(",", allArgs)} ON CONFLICT DO NOTHING", allParams);

                    await context.Database.ExecuteSqlCommandAsync(
                        $"INSERT INTO dbo.\"LocalExperience\" (\"ServerId\", \"UserId\") VALUES {string.Join(",", allArgs)} ON CONFLICT DO NOTHING", allExpParams);

                    await context.SaveChangesAsync();
                }
            }
            catch (Exception e)
            {
                Log.Error(e.ToString());
            }

            DogStatsd.Increment("guilds.joined");
            DogStatsd.Set("guilds", Bot.Instance.Client.Guilds.Count, Bot.Instance.Client.Guilds.Count);
        }