Example #1
0
        public async Task <List <EventMessageObject> > GetMessage(IDiscordGuild guild, EventMessageType type, IDiscordUser user)
        {
            var channels = await guild.GetChannelsAsync();

            var channelIds = channels.Select(x => x.Id.ToDbLong());

            IDiscordGuildUser owner = await guild.GetOwnerAsync();

            var ownerMention = owner.Mention;
            var ownerName    = owner.Username;

            List <EventMessageObject> output = new List <EventMessageObject>();

            using (var context = new MikiContext())
            {
                var messageObjects = await context.EventMessages
                                     .Where(x => channelIds.Contains(x.ChannelId) && (short)type == x.EventType)
                                     .ToListAsync();

                var allUsers = await guild.GetMembersAsync();

                foreach (var c in messageObjects)
                {
                    if (c == null)
                    {
                        continue;
                    }

                    if (string.IsNullOrEmpty(c.Message))
                    {
                        continue;
                    }

                    string modifiedMessage = c.Message;

                    modifiedMessage = modifiedMessage.Replace("-um", user.Mention);
                    modifiedMessage = modifiedMessage.Replace("-uc", guild.MemberCount.ToString());
                    modifiedMessage = modifiedMessage.Replace("-u", user.Username);

                    modifiedMessage = modifiedMessage.Replace("-ru", allUsers.ElementAt(MikiRandom.Next(0, allUsers.Count())).Username);

                    modifiedMessage = modifiedMessage.Replace("-now", DateTime.Now.ToShortDateString());
                    modifiedMessage = modifiedMessage.Replace("-s", guild.Name);

                    modifiedMessage = modifiedMessage.Replace("-om", ownerMention);
                    modifiedMessage = modifiedMessage.Replace("-o", ownerName);

                    modifiedMessage = modifiedMessage.Replace("-cc", channels.Count.ToString());
                    modifiedMessage = modifiedMessage.Replace("-vc", channels.Count.ToString());

                    output.Add(new EventMessageObject()
                    {
                        message            = modifiedMessage,
                        destinationChannel = channels.FirstOrDefault(x => x.Id.ToDbLong() == c.ChannelId)
                    });
                }
                return(output);
            }
        }
Example #2
0
        private async Task Client_JoinedGuild(IDiscordGuild arg)
        {
            using (var scope = MikiApp.Instance.Services.CreateScope())
            {
                var context = scope.ServiceProvider.GetService <DbContext>();

                IDiscordChannel defaultChannel = await arg.GetDefaultChannelAsync();

                if (defaultChannel != null)
                {
                    LocaleInstance i = await Locale.GetLanguageInstanceAsync(context, defaultChannel.Id);

                    (defaultChannel as IDiscordTextChannel).QueueMessage(i.GetString("miki_join_message"));
                }

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

                try
                {
                    var members = await arg.GetMembersAsync();

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

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

                        allExpParams.Add(arg.Id.ToDbLong());
                        allExpParams.Add(members.ElementAt(i).Id.ToDbLong());
                    }

                    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");
            }
        }
Example #3
0
        public async Task <IDiscordGuildUser> GetUser(int argPos = 0)
        {
            if (Arg.Count() <= 0)
            {
                return(null);
            }

            string Data = "";

            for (int i = argPos; i < Arg.Length; i++)
            {
                Data += Data == "" ? Arg [i] : $" {Arg[i]}";
            }

            List <IDiscordGuildUser> Users = new List <IDiscordGuildUser> ();
            var Members = await Guild.GetMembersAsync();

            if (Data.StartsWith("<@"))
            {
                Data = Data.Replace("<@!", "");
                Data = Data.Replace("<@", "");
                Data = Data.Replace(">", "");
            }
            Data = Data.ToLower();
            bool userFound = false;

            foreach (var Member in Members)
            {
                if (Member.Username.Length >= Data.Length)
                {
                    userFound = Member.Username.ToLower().StartsWith(Data);
                }
                if (Member.Nickname != null && Member.Nickname.Length >= Data.Length)
                {
                    userFound = Member.Nickname.ToLower().StartsWith(Data);
                }
                try
                {
                    userFound = Member.Id == Convert.ToUInt64(Data);
                }
                catch (Exception)
                {
                }
                if (userFound)
                {
                    return(Member);
                }
            }
            return(null);
        }
Example #4
0
 public static Task <IDiscordGuildUser> FindUserByNameAsync(IDiscordGuild guild, string name)
 => guild.GetMembersAsync()
 .Map(r => r.First(
          x => x.Nickname?.ToLowerInvariant() == name.ToLowerInvariant() ||
          x.Username.ToLowerInvariant() == name.ToLowerInvariant()));