possible fix for flowerreaction event on public nadeko
This commit is contained in:
parent
70906ed5cb
commit
7a1895bf31
@ -11,6 +11,8 @@ using NadekoBot.Common;
|
|||||||
using NadekoBot.Common.Attributes;
|
using NadekoBot.Common.Attributes;
|
||||||
using NadekoBot.Common.Collections;
|
using NadekoBot.Common.Collections;
|
||||||
using NLog;
|
using NLog;
|
||||||
|
using System.Collections.Concurrent;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
|
||||||
namespace NadekoBot.Modules.Gambling
|
namespace NadekoBot.Modules.Gambling
|
||||||
{
|
{
|
||||||
@ -137,14 +139,14 @@ namespace NadekoBot.Modules.Gambling
|
|||||||
desc, footer: footer)
|
desc, footer: footer)
|
||||||
.ConfigureAwait(false);
|
.ConfigureAwait(false);
|
||||||
|
|
||||||
await new FlowerReactionEvent(_client, _cs).Start(msg, context, amount);
|
await new FlowerReactionEvent(_client, _cs, amount).Start(msg, context);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public abstract class CurrencyEvent
|
public abstract class CurrencyEvent
|
||||||
{
|
{
|
||||||
public abstract Task Start(IUserMessage msg, ICommandContext channel, int amount);
|
public abstract Task Start(IUserMessage msg, ICommandContext channel);
|
||||||
}
|
}
|
||||||
|
|
||||||
public class FlowerReactionEvent : CurrencyEvent
|
public class FlowerReactionEvent : CurrencyEvent
|
||||||
@ -160,14 +162,39 @@ namespace NadekoBot.Modules.Gambling
|
|||||||
private CancellationTokenSource Source { get; }
|
private CancellationTokenSource Source { get; }
|
||||||
private CancellationToken CancelToken { get; }
|
private CancellationToken CancelToken { get; }
|
||||||
|
|
||||||
public FlowerReactionEvent(DiscordSocketClient client, CurrencyService cs)
|
private readonly ConcurrentQueue<ulong> _toGiveTo = new ConcurrentQueue<ulong>();
|
||||||
|
private readonly int _amount;
|
||||||
|
|
||||||
|
public FlowerReactionEvent(DiscordSocketClient client, CurrencyService cs, int amount)
|
||||||
{
|
{
|
||||||
_log = LogManager.GetCurrentClassLogger();
|
_log = LogManager.GetCurrentClassLogger();
|
||||||
_client = client;
|
_client = client;
|
||||||
_cs = cs;
|
_cs = cs;
|
||||||
_botUser = client.CurrentUser;
|
_botUser = client.CurrentUser;
|
||||||
|
_amount = amount;
|
||||||
Source = new CancellationTokenSource();
|
Source = new CancellationTokenSource();
|
||||||
CancelToken = Source.Token;
|
CancelToken = Source.Token;
|
||||||
|
|
||||||
|
var _ = Task.Run(async () =>
|
||||||
|
{
|
||||||
|
|
||||||
|
var users = new List<ulong>();
|
||||||
|
while (!CancelToken.IsCancellationRequested)
|
||||||
|
{
|
||||||
|
await Task.Delay(1000).ConfigureAwait(false);
|
||||||
|
while (_toGiveTo.TryDequeue(out var usrId))
|
||||||
|
{
|
||||||
|
users.Add(usrId);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (users.Count > 0)
|
||||||
|
{
|
||||||
|
await _cs.AddToManyAsync("", _amount, users.ToArray()).ConfigureAwait(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
users.Clear();
|
||||||
|
}
|
||||||
|
}, CancelToken);
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task End()
|
private async Task End()
|
||||||
@ -191,7 +218,7 @@ namespace NadekoBot.Modules.Gambling
|
|||||||
return Task.CompletedTask;
|
return Task.CompletedTask;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override async Task Start(IUserMessage umsg, ICommandContext context, int amount)
|
public override async Task Start(IUserMessage umsg, ICommandContext context)
|
||||||
{
|
{
|
||||||
StartingMessage = umsg;
|
StartingMessage = umsg;
|
||||||
_client.MessageDeleted += MessageDeletedEventHandler;
|
_client.MessageDeleted += MessageDeletedEventHandler;
|
||||||
@ -206,7 +233,7 @@ namespace NadekoBot.Modules.Gambling
|
|||||||
catch { return; }
|
catch { return; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
using (StartingMessage.OnReaction(_client, async (r) =>
|
using (StartingMessage.OnReaction(_client, (r) =>
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@ -215,8 +242,7 @@ namespace NadekoBot.Modules.Gambling
|
|||||||
|
|
||||||
if (r.Emote.Name == "🌸" && r.User.IsSpecified && ((DateTime.UtcNow - r.User.Value.CreatedAt).TotalDays > 5) && _flowerReactionAwardedUsers.Add(r.User.Value.Id))
|
if (r.Emote.Name == "🌸" && r.User.IsSpecified && ((DateTime.UtcNow - r.User.Value.CreatedAt).TotalDays > 5) && _flowerReactionAwardedUsers.Add(r.User.Value.Id))
|
||||||
{
|
{
|
||||||
await _cs.AddAsync(r.User.Value, "Flower Reaction Event", amount, false)
|
_toGiveTo.Enqueue(r.UserId);
|
||||||
.ConfigureAwait(false);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch
|
catch
|
||||||
|
@ -4,6 +4,7 @@ using Discord;
|
|||||||
using NadekoBot.Extensions;
|
using NadekoBot.Extensions;
|
||||||
using NadekoBot.Services.Database.Models;
|
using NadekoBot.Services.Database.Models;
|
||||||
using NadekoBot.Services.Database;
|
using NadekoBot.Services.Database;
|
||||||
|
using NadekoBot.Services;
|
||||||
|
|
||||||
namespace NadekoBot.Services
|
namespace NadekoBot.Services
|
||||||
{
|
{
|
||||||
@ -60,6 +61,26 @@ namespace NadekoBot.Services
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public async Task AddToManyAsync(string reason, long amount, params ulong[] userIds)
|
||||||
|
{
|
||||||
|
using (var uow = _db.UnitOfWork)
|
||||||
|
{
|
||||||
|
foreach (var userId in userIds)
|
||||||
|
{
|
||||||
|
var transaction = new CurrencyTransaction()
|
||||||
|
{
|
||||||
|
UserId = userId,
|
||||||
|
Reason = reason,
|
||||||
|
Amount = amount,
|
||||||
|
};
|
||||||
|
uow.Currency.TryUpdateState(userId, amount);
|
||||||
|
uow.CurrencyTransactions.Add(transaction);
|
||||||
|
}
|
||||||
|
|
||||||
|
await uow.CompleteAsync();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public async Task AddAsync(IUser author, string reason, long amount, bool sendMessage)
|
public async Task AddAsync(IUser author, string reason, long amount, bool sendMessage)
|
||||||
{
|
{
|
||||||
await AddAsync(author.Id, reason, amount);
|
await AddAsync(author.Id, reason, amount);
|
||||||
|
@ -23,6 +23,8 @@ namespace NadekoBot.Services.Discord
|
|||||||
}
|
}
|
||||||
|
|
||||||
private Task Discord_ReactionsCleared(Cacheable<IUserMessage, ulong> msg, ISocketMessageChannel channel)
|
private Task Discord_ReactionsCleared(Cacheable<IUserMessage, ulong> msg, ISocketMessageChannel channel)
|
||||||
|
{
|
||||||
|
Task.Run(() =>
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@ -30,11 +32,14 @@ namespace NadekoBot.Services.Discord
|
|||||||
OnReactionsCleared?.Invoke();
|
OnReactionsCleared?.Invoke();
|
||||||
}
|
}
|
||||||
catch { }
|
catch { }
|
||||||
|
});
|
||||||
|
|
||||||
return Task.CompletedTask;
|
return Task.CompletedTask;
|
||||||
}
|
}
|
||||||
|
|
||||||
private Task Discord_ReactionRemoved(Cacheable<IUserMessage, ulong> msg, ISocketMessageChannel channel, SocketReaction reaction)
|
private Task Discord_ReactionRemoved(Cacheable<IUserMessage, ulong> msg, ISocketMessageChannel channel, SocketReaction reaction)
|
||||||
|
{
|
||||||
|
Task.Run(() =>
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@ -42,11 +47,14 @@ namespace NadekoBot.Services.Discord
|
|||||||
OnReactionRemoved?.Invoke(reaction);
|
OnReactionRemoved?.Invoke(reaction);
|
||||||
}
|
}
|
||||||
catch { }
|
catch { }
|
||||||
|
});
|
||||||
|
|
||||||
return Task.CompletedTask;
|
return Task.CompletedTask;
|
||||||
}
|
}
|
||||||
|
|
||||||
private Task Discord_ReactionAdded(Cacheable<IUserMessage, ulong> msg, ISocketMessageChannel channel, SocketReaction reaction)
|
private Task Discord_ReactionAdded(Cacheable<IUserMessage, ulong> msg, ISocketMessageChannel channel, SocketReaction reaction)
|
||||||
|
{
|
||||||
|
Task.Run(() =>
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@ -54,6 +62,7 @@ namespace NadekoBot.Services.Discord
|
|||||||
OnReactionAdded?.Invoke(reaction);
|
OnReactionAdded?.Invoke(reaction);
|
||||||
}
|
}
|
||||||
catch { }
|
catch { }
|
||||||
|
});
|
||||||
|
|
||||||
return Task.CompletedTask;
|
return Task.CompletedTask;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user