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"); }
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); }
// 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}."); } } }