Leet command converted
This commit is contained in:
parent
c954861baa
commit
8a7ae9339e
@ -1,129 +0,0 @@
|
||||
using Discord.Commands;
|
||||
using NadekoBot.Classes;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace NadekoBot.Modules.Games.Commands
|
||||
{
|
||||
class BetrayGame : DiscordCommand
|
||||
{
|
||||
public BetrayGame(DiscordModule module) : base(module) { }
|
||||
|
||||
private enum Answers
|
||||
{
|
||||
Cooperate,
|
||||
Betray
|
||||
}
|
||||
internal override void Init(CommandGroupBuilder cgb)
|
||||
{
|
||||
cgb.CreateCommand(Module.Prefix + "betray")
|
||||
.Description("BETRAY GAME. Betray nadeko next turn." +
|
||||
"If Nadeko cooperates - you get extra points, nadeko loses a LOT." +
|
||||
$"If Nadeko betrays - you both lose some points. | `{Prefix}betray`")
|
||||
.Do(async e =>
|
||||
{
|
||||
await ReceiveAnswer(e, Answers.Betray).ConfigureAwait(false);
|
||||
});
|
||||
|
||||
cgb.CreateCommand(Module.Prefix + "cooperate")
|
||||
.Description("BETRAY GAME. Cooperate with nadeko next turn." +
|
||||
"If Nadeko cooperates - you both get bonus points." +
|
||||
$"If Nadeko betrays - you lose A LOT, nadeko gets extra. | `{Prefix}cooperater`")
|
||||
.Do(async e =>
|
||||
{
|
||||
|
||||
await ReceiveAnswer(e, Answers.Cooperate).ConfigureAwait(false);
|
||||
});
|
||||
}
|
||||
|
||||
private int userPoints = 0;
|
||||
|
||||
private int UserPoints {
|
||||
get { return userPoints; }
|
||||
set {
|
||||
if (value < 0)
|
||||
userPoints = 0;
|
||||
userPoints = value;
|
||||
}
|
||||
}
|
||||
private int nadekoPoints = 0;
|
||||
private int NadekoPoints {
|
||||
get { return nadekoPoints; }
|
||||
set {
|
||||
if (value < 0)
|
||||
nadekoPoints = 0;
|
||||
nadekoPoints = value;
|
||||
}
|
||||
}
|
||||
|
||||
private int round = 0;
|
||||
private Answers NextAnswer = Answers.Cooperate;
|
||||
private async Task ReceiveAnswer(CommandEventArgs e, Answers userAnswer)
|
||||
{
|
||||
var response = userAnswer == Answers.Betray
|
||||
? ":no_entry: `You betrayed nadeko` - you monster."
|
||||
: ":ok: `You cooperated with nadeko.` ";
|
||||
var currentAnswer = NextAnswer;
|
||||
var nadekoResponse = currentAnswer == Answers.Betray
|
||||
? ":no_entry: `aww Nadeko betrayed you` - she is so cute"
|
||||
: ":ok: `Nadeko cooperated.`";
|
||||
NextAnswer = userAnswer;
|
||||
if (userAnswer == Answers.Betray && currentAnswer == Answers.Betray)
|
||||
{
|
||||
NadekoPoints--;
|
||||
UserPoints--;
|
||||
}
|
||||
else if (userAnswer == Answers.Cooperate && currentAnswer == Answers.Cooperate)
|
||||
{
|
||||
NadekoPoints += 2;
|
||||
UserPoints += 2;
|
||||
}
|
||||
else if (userAnswer == Answers.Betray && currentAnswer == Answers.Cooperate)
|
||||
{
|
||||
NadekoPoints -= 3;
|
||||
UserPoints += 3;
|
||||
}
|
||||
else if (userAnswer == Answers.Cooperate && currentAnswer == Answers.Betray)
|
||||
{
|
||||
NadekoPoints += 3;
|
||||
UserPoints -= 3;
|
||||
}
|
||||
|
||||
await imsg.Channel.SendMessageAsync($"**ROUND {++round}**\n" +
|
||||
$"{response}\n" +
|
||||
$"{nadekoResponse}\n" +
|
||||
$"--------------------------------\n" +
|
||||
$"Nadeko has {NadekoPoints} points." +
|
||||
$"You have {UserPoints} points." +
|
||||
$"--------------------------------\n")
|
||||
.ConfigureAwait(false);
|
||||
if (round < 10) return;
|
||||
if (nadekoPoints == userPoints)
|
||||
await imsg.Channel.SendMessageAsync("Its a draw").ConfigureAwait(false);
|
||||
else if (nadekoPoints > userPoints)
|
||||
await imsg.Channel.SendMessageAsync("Nadeko won.").ConfigureAwait(false);
|
||||
else
|
||||
await imsg.Channel.SendMessageAsync("You won.").ConfigureAwait(false);
|
||||
nadekoPoints = 0;
|
||||
userPoints = 0;
|
||||
round = 0;
|
||||
}
|
||||
}
|
||||
|
||||
public class BetraySetting
|
||||
{
|
||||
private string Story = $"{0} have robbed a bank and got captured by a police." +
|
||||
$"Investigators gave you a choice:\n" +
|
||||
$"You can either >COOPERATE with your friends and " +
|
||||
$"not tell them who's idea it was, OR you can >BETRAY your" +
|
||||
$"friends. Depending on their answers your penalty will vary.";
|
||||
|
||||
public int DoubleCoop = 1;
|
||||
public int DoubleBetray = -1;
|
||||
public int BetrayCoop_Betrayer = 3;
|
||||
public int BetrayCoop_Cooperater = -3;
|
||||
|
||||
public string GetStory(IEnumerable<string> names) => String.Format(Story, string.Join(", ", names));
|
||||
}
|
||||
}
|
@ -1,125 +0,0 @@
|
||||
using Discord;
|
||||
using Discord.Commands;
|
||||
using NadekoBot.Classes;
|
||||
using System.Text;
|
||||
using System.Timers;
|
||||
using static NadekoBot.Modules.Games.Commands.Bomberman;
|
||||
|
||||
namespace NadekoBot.Modules.Games.Commands
|
||||
{
|
||||
class Bomberman : DiscordCommand
|
||||
{
|
||||
public Field[,] board = new Field[15, 15];
|
||||
|
||||
public BombermanPlayer[] players = new BombermanPlayer[4];
|
||||
|
||||
public Channel gameChannel = null;
|
||||
|
||||
public Message godMsg = null;
|
||||
|
||||
public int curI = 5;
|
||||
public int curJ = 5;
|
||||
|
||||
|
||||
public Bomberman(DiscordModule module) : base(module)
|
||||
{
|
||||
for (int i = 0; i < 15; i++)
|
||||
{
|
||||
for (int j = 0; j < 15; j++)
|
||||
{
|
||||
board[i, j] = new Field();
|
||||
}
|
||||
}
|
||||
NadekoBot.Client.MessageReceived += (s, e) =>
|
||||
{
|
||||
if (e.Channel != gameChannel ||
|
||||
e.User.Id == NadekoBot.Client.CurrentUser.Id)
|
||||
return;
|
||||
|
||||
if (e.Message.Text == "w")
|
||||
{
|
||||
board[curI - 1, curJ] = board[curI--, curJ];
|
||||
board[curI + 1, curJ].player = null;
|
||||
}
|
||||
else if (e.Message.Text == "s")
|
||||
{
|
||||
board[curI + 1, curJ] = board[curI++, curJ];
|
||||
board[curI - 1, curJ].player = null;
|
||||
}
|
||||
else if (e.Message.Text == "a")
|
||||
{
|
||||
board[curI, curJ - 1] = board[curI, curJ--];
|
||||
board[curI, curJ + 1].player = null;
|
||||
}
|
||||
else if (e.Message.Text == "d")
|
||||
{
|
||||
board[curI, curJ + 1] = board[curI, curJ++];
|
||||
board[curI, curJ - 1].player = null;
|
||||
}
|
||||
|
||||
e.Message.Delete();
|
||||
};
|
||||
|
||||
var t = new Timer();
|
||||
t.Elapsed += async (s, e) =>
|
||||
{
|
||||
if (gameChannel == null)
|
||||
return;
|
||||
|
||||
var boardStr = new StringBuilder();
|
||||
|
||||
for (int i = 0; i < 15; i++)
|
||||
{
|
||||
for (int j = 0; j < 15; j++)
|
||||
{
|
||||
boardStr.Append(board[i, j].ToString());
|
||||
}
|
||||
boardStr.AppendLine();
|
||||
}
|
||||
if (godMsg.Id != 0)
|
||||
await godMsg.Edit(boardStr.ToString()).ConfigureAwait(false);
|
||||
|
||||
};
|
||||
t.Interval = 1000;
|
||||
t.Start();
|
||||
|
||||
}
|
||||
|
||||
internal override void Init(CommandGroupBuilder cgb)
|
||||
{
|
||||
//cgb.CreateCommand(Module.Prefix + "bomb")
|
||||
// .Description("Bomberman start")
|
||||
// .Do(async e =>
|
||||
// {
|
||||
// if (gameChannel != null)
|
||||
// return;
|
||||
// godMsg = await imsg.Channel.SendMessageAsync("GAME START IN 1 SECOND....").ConfigureAwait(false);
|
||||
// gameChannel = e.Channel;
|
||||
// players[0] = new BombermanPlayer
|
||||
// {
|
||||
// User = e.User,
|
||||
// };
|
||||
|
||||
// board[5, 5].player = players[0];
|
||||
// });
|
||||
}
|
||||
|
||||
public class BombermanPlayer
|
||||
{
|
||||
public User User = null;
|
||||
public string Icon = "👳";
|
||||
|
||||
internal void MoveLeft()
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
internal struct Field
|
||||
{
|
||||
public BombermanPlayer player;
|
||||
|
||||
public override string ToString() => player?.Icon ?? "⬜";
|
||||
}
|
||||
}
|
@ -1,26 +1,38 @@
|
||||
using Discord.Commands;
|
||||
using Discord;
|
||||
using Discord.Commands;
|
||||
using NadekoBot.Attributes;
|
||||
using NadekoBot.Classes;
|
||||
using NadekoBot.Extensions;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
//taken from
|
||||
//http://www.codeproject.com/Tips/207582/L-t-Tr-nsl-t-r-Leet-Translator (thanks)
|
||||
// taken from
|
||||
// http://www.codeproject.com/Tips/207582/L-t-Tr-nsl-t-r-Leet-Translator (thanks)
|
||||
// because i don't want to waste my time on this cancerous command
|
||||
namespace NadekoBot.Modules.Games.Commands
|
||||
{
|
||||
internal class Leet : DiscordCommand
|
||||
public partial class GamesModule
|
||||
{
|
||||
public Leet(DiscordModule module) : base(module)
|
||||
[LocalizedCommand, LocalizedDescription, LocalizedSummary]
|
||||
[RequireContext(ContextType.Guild)]
|
||||
public async Task Leet(IMessage imsg, int level, [Remainder] string text)
|
||||
{
|
||||
var channel = imsg.Channel as IGuildChannel;
|
||||
|
||||
text = text.Trim();
|
||||
if (string.IsNullOrWhiteSpace(text))
|
||||
return;
|
||||
await imsg.Channel.SendMessageAsync(ToLeet(text, level)).ConfigureAwait(false);
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Translate text to Leet - Extension methods for string class
|
||||
/// </summary>
|
||||
/// <param name="text">Orginal text</param>
|
||||
/// <param name="degree">Degree of translation (1 - 3)</param>
|
||||
/// <returns>Leet translated text</returns>
|
||||
public static string ToLeet(string text, int degree = 1) =>
|
||||
private static string ToLeet(string text, int degree = 1) =>
|
||||
Translate(text, degree);
|
||||
|
||||
/// <summary>
|
||||
@ -29,7 +41,7 @@ namespace NadekoBot.Modules.Games.Commands
|
||||
/// <param name="text">Orginal text</param>
|
||||
/// <param name="degree">Degree of translation (1 - 3)</param>
|
||||
/// <returns>Leet translated text</returns>
|
||||
public static string Translate(string text, int degree = 1)
|
||||
private static string Translate(string text, int degree = 1)
|
||||
{
|
||||
if (degree > 6)
|
||||
degree = 6;
|
||||
@ -294,24 +306,5 @@ namespace NadekoBot.Modules.Games.Commands
|
||||
}
|
||||
return sb.ToString().TrimTo(1995); // Return result.
|
||||
}
|
||||
|
||||
internal override void Init(CommandGroupBuilder cgb)
|
||||
{
|
||||
cgb.CreateCommand(Module.Prefix + "leet")
|
||||
.Description($"Converts a text to leetspeak with 6 (1-6) severity levels | `{Module.Prefix}leet 3 Hello`")
|
||||
.Parameter("level", ParameterType.Required)
|
||||
.Parameter("text", ParameterType.Unparsed)
|
||||
.Do(async e =>
|
||||
{
|
||||
var text = e.GetArg("text")?.Trim();
|
||||
var levelStr = e.GetArg("level")?.Trim();
|
||||
int level;
|
||||
if (!int.TryParse(levelStr, out level))
|
||||
return;
|
||||
if (string.IsNullOrWhiteSpace(text))
|
||||
return;
|
||||
await imsg.Channel.SendMessageAsync(ToLeet(text, level)).ConfigureAwait(false);
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,166 +1,168 @@
|
||||
using Discord;
|
||||
using Discord.Commands;
|
||||
using NadekoBot.Classes;
|
||||
using NadekoBot.Extensions;
|
||||
using NadekoBot.Modules.Permissions.Classes;
|
||||
using System;
|
||||
using System.Collections.Concurrent;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Security.Cryptography;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
//using Discord;
|
||||
//using Discord.Commands;
|
||||
//using NadekoBot.Classes;
|
||||
//using NadekoBot.Extensions;
|
||||
//using NadekoBot.Modules.Permissions.Classes;
|
||||
//using System;
|
||||
//using System.Collections.Concurrent;
|
||||
//using System.Collections.Generic;
|
||||
//using System.IO;
|
||||
//using System.Linq;
|
||||
//using System.Security.Cryptography;
|
||||
//using System.Threading;
|
||||
//using System.Threading.Tasks;
|
||||
|
||||
namespace NadekoBot.Modules.Games.Commands
|
||||
{
|
||||
/// <summary>
|
||||
/// Flower picking/planting idea is given to me by its
|
||||
/// inceptor Violent Crumble from Game Developers League discord server
|
||||
/// (he has !cookie and !nom) Thanks a lot Violent!
|
||||
/// Check out GDL (its a growing gamedev community):
|
||||
/// https://discord.gg/0TYNJfCU4De7YIk8
|
||||
/// </summary>
|
||||
class PlantPick : DiscordCommand
|
||||
{
|
||||
////todo DI into partials
|
||||
////todo DB
|
||||
//namespace NadekoBot.Modules.Games.Commands
|
||||
//{
|
||||
// /// <summary>
|
||||
// /// Flower picking/planting idea is given to me by its
|
||||
// /// inceptor Violent Crumble from Game Developers League discord server
|
||||
// /// (he has !cookie and !nom) Thanks a lot Violent!
|
||||
// /// Check out GDL (its a growing gamedev community):
|
||||
// /// https://discord.gg/0TYNJfCU4De7YIk8
|
||||
// /// </summary>
|
||||
// class PlantPick : DiscordCommand
|
||||
// {
|
||||
|
||||
private Random rng;
|
||||
public PlantPick(DiscordModule module) : base(module)
|
||||
{
|
||||
NadekoBot.Client.MessageReceived += PotentialFlowerGeneration;
|
||||
rng = new Random();
|
||||
}
|
||||
// private Random rng;
|
||||
// public PlantPick(DiscordModule module) : base(module)
|
||||
// {
|
||||
// NadekoBot.Client.MessageReceived += PotentialFlowerGeneration;
|
||||
// rng = new Random();
|
||||
// }
|
||||
|
||||
private static readonly ConcurrentDictionary<ulong, DateTime> plantpickCooldowns = new ConcurrentDictionary<ulong, DateTime>();
|
||||
// private static readonly ConcurrentDictionary<ulong, DateTime> plantpickCooldowns = new ConcurrentDictionary<ulong, DateTime>();
|
||||
|
||||
private async void PotentialFlowerGeneration(object sender, Discord.MessageEventArgs e)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (e.Server == null || e.Channel.IsPrivate || e.Message.IsAuthor)
|
||||
return;
|
||||
var config = Classes.SpecificConfigurations.Default.Of(e.Server.Id);
|
||||
var now = DateTime.Now;
|
||||
int cd;
|
||||
DateTime lastSpawned;
|
||||
if (config.GenerateCurrencyChannels.TryGetValue(e.Channel.Id, out cd))
|
||||
if (!plantpickCooldowns.TryGetValue(e.Channel.Id, out lastSpawned) || (lastSpawned + new TimeSpan(0, cd, 0)) < now)
|
||||
{
|
||||
var rnd = Math.Abs(rng.Next(0,101));
|
||||
if (rnd == 0)
|
||||
{
|
||||
var msgs = new[] { await e.Channel.SendFile(GetRandomCurrencyImagePath()), await imsg.Channel.SendMessageAsync($"❗ A random {NadekoBot.Config.CurrencyName} appeared! Pick it up by typing `>pick`") };
|
||||
plantedFlowerChannels.AddOrUpdate(e.Channel.Id, msgs, (u, m) => { m.ForEach(async msgToDelete => { try { await msgToDelete.Delete(); } catch { } }); return msgs; });
|
||||
plantpickCooldowns.AddOrUpdate(e.Channel.Id, now, (i, d) => now);
|
||||
}
|
||||
}
|
||||
}
|
||||
catch { }
|
||||
}
|
||||
//channelid/messageid pair
|
||||
ConcurrentDictionary<ulong, IEnumerable<Message>> plantedFlowerChannels = new ConcurrentDictionary<ulong, IEnumerable<Message>>();
|
||||
// private async void PotentialFlowerGeneration(object sender, Discord.MessageEventArgs e)
|
||||
// {
|
||||
// try
|
||||
// {
|
||||
// if (e.Server == null || e.Channel.IsPrivate || e.Message.IsAuthor)
|
||||
// return;
|
||||
// var config = Classes.SpecificConfigurations.Default.Of(e.Server.Id);
|
||||
// var now = DateTime.Now;
|
||||
// int cd;
|
||||
// DateTime lastSpawned;
|
||||
// if (config.GenerateCurrencyChannels.TryGetValue(e.Channel.Id, out cd))
|
||||
// if (!plantpickCooldowns.TryGetValue(e.Channel.Id, out lastSpawned) || (lastSpawned + new TimeSpan(0, cd, 0)) < now)
|
||||
// {
|
||||
// var rnd = Math.Abs(rng.Next(0,101));
|
||||
// if (rnd == 0)
|
||||
// {
|
||||
// var msgs = new[] { await e.Channel.SendFile(GetRandomCurrencyImagePath()), await imsg.Channel.SendMessageAsync($"❗ A random {NadekoBot.Config.CurrencyName} appeared! Pick it up by typing `>pick`") };
|
||||
// plantedFlowerChannels.AddOrUpdate(e.Channel.Id, msgs, (u, m) => { m.ForEach(async msgToDelete => { try { await msgToDelete.Delete(); } catch { } }); return msgs; });
|
||||
// plantpickCooldowns.AddOrUpdate(e.Channel.Id, now, (i, d) => now);
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// catch { }
|
||||
// }
|
||||
// //channelid/messageid pair
|
||||
// ConcurrentDictionary<ulong, IEnumerable<Message>> plantedFlowerChannels = new ConcurrentDictionary<ulong, IEnumerable<Message>>();
|
||||
|
||||
private SemaphoreSlim locker = new SemaphoreSlim(1,1);
|
||||
// private SemaphoreSlim locker = new SemaphoreSlim(1,1);
|
||||
|
||||
internal override void Init(CommandGroupBuilder cgb)
|
||||
{
|
||||
cgb.CreateCommand(Module.Prefix + "pick")
|
||||
.Description($"Picks a flower planted in this channel. | `{Prefix}pick`")
|
||||
.Do(async e =>
|
||||
{
|
||||
IEnumerable<Message> msgs;
|
||||
// internal override void Init(CommandGroupBuilder cgb)
|
||||
// {
|
||||
// cgb.CreateCommand(Module.Prefix + "pick")
|
||||
// .Description($"Picks a flower planted in this channel. | `{Prefix}pick`")
|
||||
// .Do(async e =>
|
||||
// {
|
||||
// IEnumerable<Message> msgs;
|
||||
|
||||
await e.Message.Delete().ConfigureAwait(false);
|
||||
if (!plantedFlowerChannels.TryRemove(e.Channel.Id, out msgs))
|
||||
return;
|
||||
// await e.Message.Delete().ConfigureAwait(false);
|
||||
// if (!plantedFlowerChannels.TryRemove(e.Channel.Id, out msgs))
|
||||
// return;
|
||||
|
||||
foreach(var msgToDelete in msgs)
|
||||
await msgToDelete.Delete().ConfigureAwait(false);
|
||||
// foreach(var msgToDelete in msgs)
|
||||
// await msgToDelete.Delete().ConfigureAwait(false);
|
||||
|
||||
await FlowersHandler.AddFlowersAsync(e.User, "Picked a flower.", 1, true).ConfigureAwait(false);
|
||||
var msg = await imsg.Channel.SendMessageAsync($"**{e.User.Name}** picked a {NadekoBot.Config.CurrencyName}!").ConfigureAwait(false);
|
||||
ThreadPool.QueueUserWorkItem(async (state) =>
|
||||
{
|
||||
try
|
||||
{
|
||||
await Task.Delay(10000).ConfigureAwait(false);
|
||||
await msg.Delete().ConfigureAwait(false);
|
||||
}
|
||||
catch { }
|
||||
});
|
||||
});
|
||||
// await FlowersHandler.AddFlowersAsync(e.User, "Picked a flower.", 1, true).ConfigureAwait(false);
|
||||
// var msg = await imsg.Channel.SendMessageAsync($"**{e.User.Name}** picked a {NadekoBot.Config.CurrencyName}!").ConfigureAwait(false);
|
||||
// ThreadPool.QueueUserWorkItem(async (state) =>
|
||||
// {
|
||||
// try
|
||||
// {
|
||||
// await Task.Delay(10000).ConfigureAwait(false);
|
||||
// await msg.Delete().ConfigureAwait(false);
|
||||
// }
|
||||
// catch { }
|
||||
// });
|
||||
// });
|
||||
|
||||
cgb.CreateCommand(Module.Prefix + "plant")
|
||||
.Description($"Spend a flower to plant it in this channel. (If bot is restarted or crashes, flower will be lost) | `{Prefix}plant`")
|
||||
.Do(async e =>
|
||||
{
|
||||
await locker.WaitAsync().ConfigureAwait(false);
|
||||
try
|
||||
{
|
||||
if (plantedFlowerChannels.ContainsKey(e.Channel.Id))
|
||||
{
|
||||
await imsg.Channel.SendMessageAsync($"There is already a {NadekoBot.Config.CurrencyName} in this channel.").ConfigureAwait(false);
|
||||
return;
|
||||
}
|
||||
var removed = await FlowersHandler.RemoveFlowers(e.User, "Planted a flower.", 1, true).ConfigureAwait(false);
|
||||
if (!removed)
|
||||
{
|
||||
await imsg.Channel.SendMessageAsync($"You don't have any {NadekoBot.Config.CurrencyName}s.").ConfigureAwait(false);
|
||||
return;
|
||||
}
|
||||
// cgb.CreateCommand(Module.Prefix + "plant")
|
||||
// .Description($"Spend a flower to plant it in this channel. (If bot is restarted or crashes, flower will be lost) | `{Prefix}plant`")
|
||||
// .Do(async e =>
|
||||
// {
|
||||
// await locker.WaitAsync().ConfigureAwait(false);
|
||||
// try
|
||||
// {
|
||||
// if (plantedFlowerChannels.ContainsKey(e.Channel.Id))
|
||||
// {
|
||||
// await imsg.Channel.SendMessageAsync($"There is already a {NadekoBot.Config.CurrencyName} in this channel.").ConfigureAwait(false);
|
||||
// return;
|
||||
// }
|
||||
// var removed = await FlowersHandler.RemoveFlowers(e.User, "Planted a flower.", 1, true).ConfigureAwait(false);
|
||||
// if (!removed)
|
||||
// {
|
||||
// await imsg.Channel.SendMessageAsync($"You don't have any {NadekoBot.Config.CurrencyName}s.").ConfigureAwait(false);
|
||||
// return;
|
||||
// }
|
||||
|
||||
var file = GetRandomCurrencyImagePath();
|
||||
Message msg;
|
||||
if (file == null)
|
||||
msg = await imsg.Channel.SendMessageAsync(NadekoBot.Config.CurrencySign).ConfigureAwait(false);
|
||||
else
|
||||
msg = await e.Channel.SendFile(file).ConfigureAwait(false);
|
||||
var vowelFirst = new[] { 'a', 'e', 'i', 'o', 'u' }.Contains(NadekoBot.Config.CurrencyName[0]);
|
||||
var msg2 = await imsg.Channel.SendMessageAsync($"Oh how Nice! **{e.User.Name}** planted {(vowelFirst ? "an" : "a")} {NadekoBot.Config.CurrencyName}. Pick it using {Module.Prefix}pick").ConfigureAwait(false);
|
||||
plantedFlowerChannels.TryAdd(e.Channel.Id, new[] { msg, msg2 });
|
||||
}
|
||||
finally { locker.Release(); }
|
||||
});
|
||||
// var file = GetRandomCurrencyImagePath();
|
||||
// Message msg;
|
||||
// if (file == null)
|
||||
// msg = await imsg.Channel.SendMessageAsync(NadekoBot.Config.CurrencySign).ConfigureAwait(false);
|
||||
// else
|
||||
// msg = await e.Channel.SendFile(file).ConfigureAwait(false);
|
||||
// var vowelFirst = new[] { 'a', 'e', 'i', 'o', 'u' }.Contains(NadekoBot.Config.CurrencyName[0]);
|
||||
// var msg2 = await imsg.Channel.SendMessageAsync($"Oh how Nice! **{e.User.Name}** planted {(vowelFirst ? "an" : "a")} {NadekoBot.Config.CurrencyName}. Pick it using {Module.Prefix}pick").ConfigureAwait(false);
|
||||
// plantedFlowerChannels.TryAdd(e.Channel.Id, new[] { msg, msg2 });
|
||||
// }
|
||||
// finally { locker.Release(); }
|
||||
// });
|
||||
|
||||
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}. Optional parameter cooldown time in minutes, 5 minutes by default. Requires Manage Messages permission. | `{Prefix}gc` or `{Prefix}gc 60`")
|
||||
.AddCheck(SimpleCheckers.ManageMessages())
|
||||
.Parameter("cd", ParameterType.Unparsed)
|
||||
.Do(async e =>
|
||||
{
|
||||
var cdStr = e.GetArg("cd");
|
||||
int cd = 2;
|
||||
if (!int.TryParse(cdStr, out cd) || cd < 0)
|
||||
{
|
||||
cd = 2;
|
||||
}
|
||||
var config = SpecificConfigurations.Default.Of(e.Server.Id);
|
||||
int throwaway;
|
||||
if (config.GenerateCurrencyChannels.TryRemove(e.Channel.Id, out throwaway))
|
||||
{
|
||||
await imsg.Channel.SendMessageAsync("`Currency generation disabled on this channel.`").ConfigureAwait(false);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (config.GenerateCurrencyChannels.TryAdd(e.Channel.Id, cd))
|
||||
await imsg.Channel.SendMessageAsync($"`Currency generation enabled on this channel. Cooldown is {cd} minutes.`").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}. Optional parameter cooldown time in minutes, 5 minutes by default. Requires Manage Messages permission. | `{Prefix}gc` or `{Prefix}gc 60`")
|
||||
// .AddCheck(SimpleCheckers.ManageMessages())
|
||||
// .Parameter("cd", ParameterType.Unparsed)
|
||||
// .Do(async e =>
|
||||
// {
|
||||
// var cdStr = e.GetArg("cd");
|
||||
// int cd = 2;
|
||||
// if (!int.TryParse(cdStr, out cd) || cd < 0)
|
||||
// {
|
||||
// cd = 2;
|
||||
// }
|
||||
// var config = SpecificConfigurations.Default.Of(e.Server.Id);
|
||||
// int throwaway;
|
||||
// if (config.GenerateCurrencyChannels.TryRemove(e.Channel.Id, out throwaway))
|
||||
// {
|
||||
// await imsg.Channel.SendMessageAsync("`Currency generation disabled on this channel.`").ConfigureAwait(false);
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// if (config.GenerateCurrencyChannels.TryAdd(e.Channel.Id, cd))
|
||||
// await imsg.Channel.SendMessageAsync($"`Currency generation enabled on this channel. Cooldown is {cd} minutes.`").ConfigureAwait(false);
|
||||
// }
|
||||
// });
|
||||
// }
|
||||
|
||||
private string GetRandomCurrencyImagePath() =>
|
||||
Directory.GetFiles("data/currency_images").OrderBy(s => rng.Next()).FirstOrDefault();
|
||||
// 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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// int GetRandomNumber()
|
||||
// {
|
||||
// using (var rg = RandomNumberGenerator.Create())
|
||||
// {
|
||||
// byte[] rno = new byte[4];
|
||||
// rg.GetBytes(rno);
|
||||
// int randomvalue = BitConverter.ToInt32(rno, 0);
|
||||
// return randomvalue;
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
//}
|
||||
|
@ -11,7 +11,7 @@
|
||||
//using System.Threading.Tasks;
|
||||
|
||||
////todo DB
|
||||
////todo rewrite?
|
||||
////todo Rewrite?
|
||||
//namespace NadekoBot.Modules.Games.Commands
|
||||
//{
|
||||
|
||||
|
@ -408,7 +408,7 @@ $@"🌍 **Weather for** 【{obj["target"]}】
|
||||
}
|
||||
}
|
||||
|
||||
////todo Drawing
|
||||
////todo drawing
|
||||
//[LocalizedCommand, LocalizedDescription, LocalizedSummary]
|
||||
//[RequireContext(ContextType.Guild)]
|
||||
//public async Task Clr(IMessage imsg, [Remainder] string color)
|
||||
|
@ -100,26 +100,28 @@ namespace NadekoBot.Extensions
|
||||
public static IEnumerable<T> Shuffle<T>(this IEnumerable<T> items)
|
||||
{
|
||||
// Thanks to @Joe4Evr for finding a bug in the old version of the shuffle
|
||||
var provider = RandomNumberGenerator.Create();
|
||||
var list = items.ToList();
|
||||
var n = list.Count;
|
||||
while (n > 1)
|
||||
using (var provider = RandomNumberGenerator.Create())
|
||||
{
|
||||
var box = new byte[(n / Byte.MaxValue) + 1];
|
||||
int boxSum;
|
||||
do
|
||||
var list = items.ToList();
|
||||
var n = list.Count;
|
||||
while (n > 1)
|
||||
{
|
||||
provider.GetBytes(box);
|
||||
boxSum = box.Sum(b => b);
|
||||
var box = new byte[(n / Byte.MaxValue) + 1];
|
||||
int boxSum;
|
||||
do
|
||||
{
|
||||
provider.GetBytes(box);
|
||||
boxSum = box.Sum(b => b);
|
||||
}
|
||||
while (!(boxSum < n * ((Byte.MaxValue * box.Length) / n)));
|
||||
var k = (boxSum % n);
|
||||
n--;
|
||||
var value = list[k];
|
||||
list[k] = list[n];
|
||||
list[n] = value;
|
||||
}
|
||||
while (!(boxSum < n * ((Byte.MaxValue * box.Length) / n)));
|
||||
var k = (boxSum % n);
|
||||
n--;
|
||||
var value = list[k];
|
||||
list[k] = list[n];
|
||||
list[n] = value;
|
||||
return list;
|
||||
}
|
||||
return list;
|
||||
}
|
||||
|
||||
public static string TrimTo(this string str, int maxLength, bool hideDots = false)
|
||||
|
Loading…
Reference in New Issue
Block a user