Currency generation added (>gc) command.
This commit is contained in:
parent
1b3b65817e
commit
947472a77b
@ -108,6 +108,22 @@ namespace NadekoBot.Classes
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[JsonIgnore]
|
||||||
|
private ObservableCollection<ulong> generateCurrencyChannels;
|
||||||
|
|
||||||
|
public ObservableCollection<ulong> GenerateCurrencyChannels {
|
||||||
|
get { return generateCurrencyChannels; }
|
||||||
|
set {
|
||||||
|
generateCurrencyChannels = value;
|
||||||
|
if (value != null)
|
||||||
|
generateCurrencyChannels.CollectionChanged += (s, e) =>
|
||||||
|
{
|
||||||
|
if (!SpecificConfigurations.Instantiated) return;
|
||||||
|
OnPropertyChanged();
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
[JsonIgnore]
|
[JsonIgnore]
|
||||||
private ObservableCollection<StreamNotificationConfig> observingStreams;
|
private ObservableCollection<StreamNotificationConfig> observingStreams;
|
||||||
|
|
||||||
@ -150,6 +166,7 @@ namespace NadekoBot.Classes
|
|||||||
{
|
{
|
||||||
ListOfSelfAssignableRoles = new ObservableCollection<ulong>();
|
ListOfSelfAssignableRoles = new ObservableCollection<ulong>();
|
||||||
ObservingStreams = new ObservableCollection<StreamNotificationConfig>();
|
ObservingStreams = new ObservableCollection<StreamNotificationConfig>();
|
||||||
|
GenerateCurrencyChannels = new ObservableCollection<ulong>();
|
||||||
}
|
}
|
||||||
|
|
||||||
public event PropertyChangedEventHandler PropertyChanged = delegate { SpecificConfigurations.Default.Save(); };
|
public event PropertyChangedEventHandler PropertyChanged = delegate { SpecificConfigurations.Default.Save(); };
|
||||||
|
@ -5,6 +5,7 @@ using System;
|
|||||||
using System.Collections.Concurrent;
|
using System.Collections.Concurrent;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
using System.Security.Cryptography;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
namespace NadekoBot.Modules.Games.Commands
|
namespace NadekoBot.Modules.Games.Commands
|
||||||
@ -18,11 +19,31 @@ namespace NadekoBot.Modules.Games.Commands
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
class PlantPick : DiscordCommand
|
class PlantPick : DiscordCommand
|
||||||
{
|
{
|
||||||
|
|
||||||
|
private Random rng;
|
||||||
public PlantPick(DiscordModule module) : base(module)
|
public PlantPick(DiscordModule module) : base(module)
|
||||||
{
|
{
|
||||||
|
NadekoBot.Client.MessageReceived += PotentialFlowerGeneration;
|
||||||
|
rng = new Random();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private async void PotentialFlowerGeneration(object sender, Discord.MessageEventArgs e)
|
||||||
|
{
|
||||||
|
if (e.Server == null || e.Channel.IsPrivate)
|
||||||
|
return;
|
||||||
|
var config = Classes.SpecificConfigurations.Default.Of(e.Server.Id);
|
||||||
|
if (config.GenerateCurrencyChannels.Contains(e.Channel.Id))
|
||||||
|
{
|
||||||
|
var rnd = Math.Abs(GetRandomNumber());
|
||||||
|
if ((rnd % 50) == 0)
|
||||||
|
{
|
||||||
|
var msg = await e.Channel.SendFile(GetRandomCurrencyImagePath());
|
||||||
|
await e.Channel.SendMessage($"❗ A random {NadekoBot.Config.CurrencyName} appeared! Pick it up by typing `>pick`");
|
||||||
|
plantedFlowerChannels.AddOrUpdate(e.Channel.Id, msg, (u, m) => { m.Delete().GetAwaiter().GetResult(); return msg; });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
//channelid/messageid pair
|
//channelid/messageid pair
|
||||||
ConcurrentDictionary<ulong, Message> plantedFlowerChannels = new ConcurrentDictionary<ulong, Message>();
|
ConcurrentDictionary<ulong, Message> plantedFlowerChannels = new ConcurrentDictionary<ulong, Message>();
|
||||||
|
|
||||||
@ -65,8 +86,7 @@ namespace NadekoBot.Modules.Games.Commands
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
var rng = new Random();
|
var file = GetRandomCurrencyImagePath();
|
||||||
var file = Directory.GetFiles("data/currency_images").OrderBy(s => rng.Next()).FirstOrDefault();
|
|
||||||
Message msg;
|
Message msg;
|
||||||
//todo send message after, not in lock
|
//todo send message after, not in lock
|
||||||
if (file == null)
|
if (file == null)
|
||||||
@ -80,6 +100,37 @@ namespace NadekoBot.Modules.Games.Commands
|
|||||||
await Task.Delay(20000).ConfigureAwait(false);
|
await Task.Delay(20000).ConfigureAwait(false);
|
||||||
await msg2.Delete().ConfigureAwait(false);
|
await msg2.Delete().ConfigureAwait(false);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
cgb.CreateCommand(Prefix + "gencurrency")
|
||||||
|
.Alias(Prefix + "gc")
|
||||||
|
.Description($"Toggles currency generation on this channel. Every posted message will have 2% chance to spawn a {NadekoBot.Config.CurrencyName}. | `gc`")
|
||||||
|
.Do(async e =>
|
||||||
|
{
|
||||||
|
var config = SpecificConfigurations.Default.Of(e.Server.Id);
|
||||||
|
if (config.GenerateCurrencyChannels.Remove(e.Channel.Id))
|
||||||
|
{
|
||||||
|
await e.Channel.SendMessage("`Currency generation disabled on this channel.`");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
config.GenerateCurrencyChannels.Add(e.Channel.Id);
|
||||||
|
await e.Channel.SendMessage("`Currency generation enabled on this channel.`");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
private string GetRandomCurrencyImagePath() =>
|
||||||
|
Directory.GetFiles("data/currency_images").OrderBy(s => rng.Next()).FirstOrDefault();
|
||||||
|
|
||||||
|
int GetRandomNumber()
|
||||||
|
{
|
||||||
|
using (RNGCryptoServiceProvider rg = new RNGCryptoServiceProvider())
|
||||||
|
{
|
||||||
|
byte[] rno = new byte[4];
|
||||||
|
rg.GetBytes(rno);
|
||||||
|
int randomvalue = BitConverter.ToInt32(rno, 0);
|
||||||
|
return randomvalue;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user