now >pick has 60 seconds cooldown
This commit is contained in:
parent
9b887b7688
commit
4aaeba34a0
@ -35,6 +35,8 @@ namespace NadekoBot.Modules.Games
|
|||||||
//channelId/last generation
|
//channelId/last generation
|
||||||
private static ConcurrentDictionary<ulong, DateTime> lastGenerations { get; } = new ConcurrentDictionary<ulong, DateTime>();
|
private static ConcurrentDictionary<ulong, DateTime> lastGenerations { get; } = new ConcurrentDictionary<ulong, DateTime>();
|
||||||
|
|
||||||
|
private static ConcurrentHashSet<ulong> usersRecentlyPicked { get; } = new ConcurrentHashSet<ulong>();
|
||||||
|
|
||||||
private static float chance { get; }
|
private static float chance { get; }
|
||||||
private static int cooldown { get; }
|
private static int cooldown { get; }
|
||||||
private static Logger _log { get; }
|
private static Logger _log { get; }
|
||||||
@ -101,23 +103,29 @@ namespace NadekoBot.Modules.Games
|
|||||||
{
|
{
|
||||||
var channel = (ITextChannel)imsg.Channel;
|
var channel = (ITextChannel)imsg.Channel;
|
||||||
|
|
||||||
if (!channel.Guild.GetCurrentUser().GetPermissions(channel).ManageMessages)
|
if (!channel.Guild.GetCurrentUser().GetPermissions(channel).ManageMessages || !usersRecentlyPicked.Add(imsg.Author.Id))
|
||||||
|
return;
|
||||||
|
|
||||||
|
try
|
||||||
{
|
{
|
||||||
await channel.SendErrorAsync("I need manage channel permissions in order to process this command.").ConfigureAwait(false);
|
|
||||||
return;
|
List<IUserMessage> msgs;
|
||||||
|
|
||||||
|
try { await imsg.DeleteAsync().ConfigureAwait(false); } catch { }
|
||||||
|
if (!plantedFlowers.TryRemove(channel.Id, out msgs))
|
||||||
|
return;
|
||||||
|
|
||||||
|
await Task.WhenAll(msgs.Select(toDelete => toDelete.DeleteAsync())).ConfigureAwait(false);
|
||||||
|
|
||||||
|
await CurrencyHandler.AddCurrencyAsync((IGuildUser)imsg.Author, "Picked flower(s).", msgs.Count, false).ConfigureAwait(false);
|
||||||
|
var msg = await channel.SendConfirmAsync($"**{imsg.Author}** picked {msgs.Count}{Gambling.Gambling.CurrencySign}!").ConfigureAwait(false);
|
||||||
|
msg.DeleteAfter(10);
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
await Task.Delay(60000);
|
||||||
|
usersRecentlyPicked.TryRemove(imsg.Author.Id);
|
||||||
}
|
}
|
||||||
|
|
||||||
List<IUserMessage> msgs;
|
|
||||||
|
|
||||||
try { await imsg.DeleteAsync().ConfigureAwait(false); } catch { }
|
|
||||||
if (!plantedFlowers.TryRemove(channel.Id, out msgs))
|
|
||||||
return;
|
|
||||||
|
|
||||||
await Task.WhenAll(msgs.Select(toDelete => toDelete.DeleteAsync())).ConfigureAwait(false);
|
|
||||||
|
|
||||||
await CurrencyHandler.AddCurrencyAsync((IGuildUser)imsg.Author, "Picked flower(s).", msgs.Count, false).ConfigureAwait(false);
|
|
||||||
var msg = await channel.SendConfirmAsync($"**{imsg.Author}** picked {msgs.Count}{Gambling.Gambling.CurrencySign}!").ConfigureAwait(false);
|
|
||||||
msg.DeleteAfter(10);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
[NadekoCommand, Usage, Description, Aliases]
|
[NadekoCommand, Usage, Description, Aliases]
|
||||||
|
@ -4767,7 +4767,7 @@ namespace NadekoBot.Resources {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Looks up a localized string similar to Picks the currency planted in this channel..
|
/// Looks up a localized string similar to Picks the currency planted in this channel. 60 seconds cooldown..
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static string pick_desc {
|
public static string pick_desc {
|
||||||
get {
|
get {
|
||||||
|
@ -1363,7 +1363,7 @@
|
|||||||
<value>pick</value>
|
<value>pick</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="pick_desc" xml:space="preserve">
|
<data name="pick_desc" xml:space="preserve">
|
||||||
<value>Picks the currency planted in this channel.</value>
|
<value>Picks the currency planted in this channel. 60 seconds cooldown.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="pick_usage" xml:space="preserve">
|
<data name="pick_usage" xml:space="preserve">
|
||||||
<value>`{0}pick`</value>
|
<value>`{0}pick`</value>
|
||||||
|
@ -64,80 +64,14 @@ namespace NadekoBot.Services
|
|||||||
_client.MessageReceived += MessageReceivedHandler;
|
_client.MessageReceived += MessageReceivedHandler;
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task MessageReceivedHandler(IMessage msg)
|
private Task MessageReceivedHandler(IMessage msg)
|
||||||
{
|
{
|
||||||
var usrMsg = msg as IUserMessage;
|
var usrMsg = msg as IUserMessage;
|
||||||
if (usrMsg == null)
|
if (usrMsg == null)
|
||||||
return;
|
return Task.CompletedTask;
|
||||||
|
|
||||||
if (usrMsg.Author.IsBot || !NadekoBot.Ready) //no bots
|
if (usrMsg.Author.IsBot || !NadekoBot.Ready) //no bots
|
||||||
return;
|
return Task.CompletedTask;
|
||||||
|
|
||||||
var guild = (msg.Channel as ITextChannel)?.Guild;
|
|
||||||
|
|
||||||
if (guild != null && guild.OwnerId != usrMsg.Author.Id)
|
|
||||||
{
|
|
||||||
if (Permissions.FilterCommands.InviteFilteringChannels.Contains(usrMsg.Channel.Id) ||
|
|
||||||
Permissions.FilterCommands.InviteFilteringServers.Contains(guild.Id))
|
|
||||||
{
|
|
||||||
if (usrMsg.Content.IsDiscordInvite())
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
await usrMsg.DeleteAsync().ConfigureAwait(false);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
catch (HttpException ex)
|
|
||||||
{
|
|
||||||
_log.Warn("I do not have permission to filter invites in channel with id " + usrMsg.Channel.Id, ex);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
var filteredWords = Permissions.FilterCommands.FilteredWordsForChannel(usrMsg.Channel.Id, guild.Id).Concat(Permissions.FilterCommands.FilteredWordsForServer(guild.Id));
|
|
||||||
var wordsInMessage = usrMsg.Content.ToLowerInvariant().Split(' ');
|
|
||||||
if (filteredWords.Any(w => wordsInMessage.Contains(w)))
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
await usrMsg.DeleteAsync().ConfigureAwait(false);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
catch (HttpException ex)
|
|
||||||
{
|
|
||||||
_log.Warn("I do not have permission to filter words in channel with id " + usrMsg.Channel.Id, ex);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
BlacklistItem blacklistedItem;
|
|
||||||
if ((blacklistedItem = Permissions.BlacklistCommands.BlacklistedItems.FirstOrDefault(bi =>
|
|
||||||
(bi.Type == BlacklistItem.BlacklistType.Server && bi.ItemId == guild?.Id) ||
|
|
||||||
(bi.Type == BlacklistItem.BlacklistType.Channel && bi.ItemId == msg.Channel.Id) ||
|
|
||||||
(bi.Type == BlacklistItem.BlacklistType.User && bi.ItemId == usrMsg.Author.Id))) != null)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
var cleverbotExecuted = await Games.CleverBotCommands.TryAsk(usrMsg);
|
|
||||||
|
|
||||||
if (cleverbotExecuted)
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
catch (Exception ex) { _log.Warn(ex, "Error in cleverbot"); }
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
// maybe this message is a custom reaction
|
|
||||||
var crExecuted = await CustomReactions.TryExecuteCustomReaction(usrMsg).ConfigureAwait(false);
|
|
||||||
|
|
||||||
//if it was, don't execute the command
|
|
||||||
if (crExecuted)
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
catch { }
|
|
||||||
|
|
||||||
var throwaway = Task.Run(async () =>
|
var throwaway = Task.Run(async () =>
|
||||||
{
|
{
|
||||||
@ -146,6 +80,72 @@ namespace NadekoBot.Services
|
|||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
var guild = (msg.Channel as ITextChannel)?.Guild;
|
||||||
|
|
||||||
|
if (guild != null && guild.OwnerId != usrMsg.Author.Id)
|
||||||
|
{
|
||||||
|
if (Permissions.FilterCommands.InviteFilteringChannels.Contains(usrMsg.Channel.Id) ||
|
||||||
|
Permissions.FilterCommands.InviteFilteringServers.Contains(guild.Id))
|
||||||
|
{
|
||||||
|
if (usrMsg.Content.IsDiscordInvite())
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
await usrMsg.DeleteAsync().ConfigureAwait(false);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
catch (HttpException ex)
|
||||||
|
{
|
||||||
|
_log.Warn("I do not have permission to filter invites in channel with id " + usrMsg.Channel.Id, ex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var filteredWords = Permissions.FilterCommands.FilteredWordsForChannel(usrMsg.Channel.Id, guild.Id).Concat(Permissions.FilterCommands.FilteredWordsForServer(guild.Id));
|
||||||
|
var wordsInMessage = usrMsg.Content.ToLowerInvariant().Split(' ');
|
||||||
|
if (filteredWords.Any(w => wordsInMessage.Contains(w)))
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
await usrMsg.DeleteAsync().ConfigureAwait(false);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
catch (HttpException ex)
|
||||||
|
{
|
||||||
|
_log.Warn("I do not have permission to filter words in channel with id " + usrMsg.Channel.Id, ex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
BlacklistItem blacklistedItem;
|
||||||
|
if ((blacklistedItem = Permissions.BlacklistCommands.BlacklistedItems.FirstOrDefault(bi =>
|
||||||
|
(bi.Type == BlacklistItem.BlacklistType.Server && bi.ItemId == guild?.Id) ||
|
||||||
|
(bi.Type == BlacklistItem.BlacklistType.Channel && bi.ItemId == msg.Channel.Id) ||
|
||||||
|
(bi.Type == BlacklistItem.BlacklistType.User && bi.ItemId == usrMsg.Author.Id))) != null)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var cleverbotExecuted = await Games.CleverBotCommands.TryAsk(usrMsg);
|
||||||
|
|
||||||
|
if (cleverbotExecuted)
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
catch (Exception ex) { _log.Warn(ex, "Error in cleverbot"); }
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
// maybe this message is a custom reaction
|
||||||
|
var crExecuted = await CustomReactions.TryExecuteCustomReaction(usrMsg).ConfigureAwait(false);
|
||||||
|
|
||||||
|
//if it was, don't execute the command
|
||||||
|
if (crExecuted)
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
catch { }
|
||||||
|
|
||||||
var t = await ExecuteCommand(usrMsg, usrMsg.Content, guild, usrMsg.Author, MultiMatchHandling.Best);
|
var t = await ExecuteCommand(usrMsg, usrMsg.Content, guild, usrMsg.Author, MultiMatchHandling.Best);
|
||||||
var command = t.Item1;
|
var command = t.Item1;
|
||||||
var permCache = t.Item2;
|
var permCache = t.Item2;
|
||||||
@ -209,7 +209,8 @@ namespace NadekoBot.Services
|
|||||||
_log.Warn(ex.InnerException, "Inner Exception of the error in CommandHandler");
|
_log.Warn(ex.InnerException, "Inner Exception of the error in CommandHandler");
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
return;
|
|
||||||
|
return Task.CompletedTask;
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<Tuple<Command, PermissionCache, IResult>> ExecuteCommand(IUserMessage message, string input, IGuild guild, IUser user, MultiMatchHandling multiMatchHandling = MultiMatchHandling.Best) {
|
public async Task<Tuple<Command, PermissionCache, IResult>> ExecuteCommand(IUserMessage message, string input, IGuild guild, IUser user, MultiMatchHandling multiMatchHandling = MultiMatchHandling.Best) {
|
||||||
|
Loading…
Reference in New Issue
Block a user