示例#1
0
        public async Task InviteCount(
            [Summary("The user to ban")] SocketGuildUser user = null)
        {
            await Context.Channel.TriggerTypingAsync();

            if (await ServerHelper.CheckIfContextIsDM(Context))
            {
                return;
            }

            if (user == null)
            {
                //await ReplyAsync("Please provide a user to lookup!");
                user = Context.User as SocketGuildUser;
            }

            _logger.LogInformation("{user}#{discriminator} invoked invite {user} in {channel} on {server}",
                                   Context.User.Username, Context.User.Discriminator, user.Username, Context.Channel.Name, Context.Guild?.Name ?? "DM");

            var server = await ServerHelper.GetOrAddServer(Context.Guild.Id, _serverRepository);

            var dbuser = await UserHelper.GetOrAddUser(user, _userRepository);

            var invite = await _inviteRepository.GetInviteByUser(dbuser.Id, server.Id);

            if (invite == null)
            {
                await ReplyAsync($"This feature is experamental and may have issues.\n{user.Username} has not invited anyone");

                return;
            }

            await ReplyAsync($"This feature is experamental and may have issues.\n{user.Username} has invited {invite.Count} users");
        }
示例#2
0
        public static async Task <Invite> GetOrAddInvite(SocketUser user, Server server, IUserRepository userRepository, IInviteRepository inviteRepository)
        {
            var dbUser = await GetOrAddUser(user, userRepository);

            var invite = await inviteRepository.GetInviteByUser(dbUser.Id, server.Id);

            if (invite == null)
            {
                invite = new Invite
                {
                    UserId = dbUser.Id,
                    Count  = 0
                };

                await inviteRepository.EditAsync(invite);
            }

            return(invite);
        }
示例#3
0
        // User joined a guild
        private async Task OnUserJoined(SocketGuildUser userJoining)
        {
            await AutoRoleHelper.AssignAutoRoles(_autoRoleService, userJoining);

            Task.Run(async() => await ShowWelcomeMessage(userJoining));

            // TODO Make into own method
            var guild  = userJoining.Guild;
            var server = await ServerHelper.GetOrAddServer(guild.Id, _serverRepository);

            var dbinvites = await _serverInviteRepository.GetServerInvites(server.Id);

            var invites = await guild.GetInvitesAsync();

            if (server.TrackInvites)
            {
                var inviteUsed =
                    from ginvite in invites
                    join invite in dbinvites
                    on ginvite.Code equals invite.Code
                    where invite.Uses < ginvite.Uses
                    select ginvite;

                if (inviteUsed.Count() > 1)
                {
                    _logger.LogWarning("More than one invite matches!");
                    await _servers.SendLogsAsync(userJoining.Guild, "Invite Error!", $"More than one invite matched for user {userJoining.Username}!");

                    return;
                }
                if (inviteUsed.Count() < 1)
                {
                    _logger.LogWarning("No invite matches!");
                    await _servers.SendLogsAsync(userJoining.Guild, "Invite Error!", $"Could not find matching invite for user {userJoining.Username}!");

                    return;
                }

                var invused = inviteUsed.FirstOrDefault();

                var inviter = await _userRepository.GetByUserId(invused.Inviter.Id);

                if (inviter == null)
                {
                    inviter = new Models.User
                    {
                        UserId   = invused.Inviter.Id,
                        UserName = invused.Inviter.Username
                    };

                    await _userRepository.AddAsync(inviter);
                }

                var userInvite = await _inviteRepository.GetInviteByUser(inviter.Id, server.Id);

                if (userInvite == null)
                {
                    userInvite = new Invite
                    {
                        Count    = 0,
                        UserId   = inviter.Id,
                        ServerId = server.Id
                    };
                    await _inviteRepository.AddAsync(userInvite);
                }

                userInvite.Count++;
                await _inviteRepository.EditAsync(userInvite);

                var updateInv = dbinvites.Where(x => x.Code == invused.Code).FirstOrDefault();
                updateInv.Uses = invused?.Uses ?? 0;
                await _serverInviteRepository.EditAsync(updateInv);

                await UpdateInvites();

                if (server.LoggingChannel != 0)
                {
                    var user = _userRepository.GetByUserId(userJoining.Id);
                    await _servers.SendLogsAsync(guild, "User invited", $"{inviter.UserName} invited {userJoining.Username} with invite link {invused.Url}.");
                }
            }
        }