xpadd will now trigger rewards and notifications, after so long
This commit is contained in:
parent
cbb9f8d1ac
commit
11141df435
2 changed files with 116 additions and 137 deletions
src/EllieBot/Modules/Xp
|
@ -164,12 +164,12 @@ public partial class Xp : EllieModule<XpService>
|
|||
if (role.IsManaged)
|
||||
return;
|
||||
|
||||
var count = await _service.AddXpToUsersAsync(ctx.Guild.Id,
|
||||
await _service.AddXpAsync(ctx.Channel.Id,
|
||||
amount,
|
||||
role.Members.Select(x => x.Id).ToArray());
|
||||
role.Members.Cast<IGuildUser>().ToArray());
|
||||
|
||||
await Response()
|
||||
.Confirm(
|
||||
strs.xpadd_users(Format.Bold(amount.ToString()), Format.Bold(count.ToString())))
|
||||
.Confirm(strs.xpadd_users(Format.Bold(amount.ToString()), Format.Bold(role.Name)))
|
||||
.SendAsync();
|
||||
}
|
||||
|
||||
|
@ -177,23 +177,15 @@ public partial class Xp : EllieModule<XpService>
|
|||
[RequireContext(ContextType.Guild)]
|
||||
[UserPerm(GuildPerm.Administrator)]
|
||||
[Priority(3)]
|
||||
public async Task XpAdd(int amount, ulong userId)
|
||||
public async Task XpAdd(int amount, [Leftover] IGuildUser user)
|
||||
{
|
||||
if (amount == 0)
|
||||
return;
|
||||
|
||||
await _service.AddXpAsync(userId, ctx.Guild.Id, amount);
|
||||
var usr = ((SocketGuild)ctx.Guild).GetUser(userId)?.ToString() ?? userId.ToString();
|
||||
await Response().Confirm(strs.modified(Format.Bold(usr), Format.Bold(amount.ToString()))).SendAsync();
|
||||
await _service.AddXpAsync(ctx.Channel.Id, amount, user);
|
||||
await Response().Confirm(strs.modified(Format.Bold(user.ToString()), Format.Bold(amount.ToString()))).SendAsync();
|
||||
}
|
||||
|
||||
[Cmd]
|
||||
[RequireContext(ContextType.Guild)]
|
||||
[UserPerm(GuildPerm.Administrator)]
|
||||
[Priority(4)]
|
||||
public Task XpAdd(int amount, [Leftover] IGuildUser user)
|
||||
=> XpAdd(amount, user.Id);
|
||||
|
||||
[Cmd]
|
||||
[RequireContext(ContextType.Guild)]
|
||||
[OwnerOnly]
|
||||
|
@ -312,7 +304,7 @@ public partial class Xp : EllieModule<XpService>
|
|||
.WithDescription(GetText(strs.not_found))
|
||||
.WithErrorColor();
|
||||
|
||||
var (key, item) = items.FirstOrDefault();
|
||||
var (_, item) = items.FirstOrDefault();
|
||||
|
||||
var eb = CreateEmbed()
|
||||
.WithOkColor()
|
||||
|
|
|
@ -551,25 +551,12 @@ public class XpService : IEService, IReadyExecutor, IExecNoCommand
|
|||
return false;
|
||||
}
|
||||
|
||||
public async Task<int> AddXpToUsersAsync(ulong guildId, long amount, params ulong[] userIds)
|
||||
public Task AddXpAsync(ulong channelId, long amount, params IGuildUser[] users)
|
||||
{
|
||||
await using var ctx = _db.GetDbContext();
|
||||
return await ctx.GetTable<UserXpStats>()
|
||||
.Where(x => x.GuildId == guildId && userIds.Contains(x.UserId))
|
||||
.UpdateAsync(old => new()
|
||||
{
|
||||
Xp = old.Xp + amount
|
||||
});
|
||||
}
|
||||
foreach (var user in users)
|
||||
_usersBatch.Add(new(user, amount, channelId));
|
||||
|
||||
public async Task AddXpAsync(ulong userId, ulong guildId, int amount)
|
||||
{
|
||||
await using var uow = _db.GetDbContext();
|
||||
var usr = uow.GetOrCreateUserXpStats(guildId, userId);
|
||||
|
||||
usr.Xp += amount;
|
||||
|
||||
await uow.SaveChangesAsync();
|
||||
return Task.CompletedTask;
|
||||
}
|
||||
|
||||
private Task<bool> TryAddUserGainedXpAsync(ulong userId, float cdInMinutes)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue