Added coin flipping and betflipping
This commit is contained in:
parent
a4cc1ab563
commit
438fb65c04
@ -1,93 +1,107 @@
|
|||||||
using Discord;
|
using Discord;
|
||||||
using Discord.Commands;
|
using Discord.Commands;
|
||||||
|
using ImageProcessorCore;
|
||||||
|
using NadekoBot.Attributes;
|
||||||
|
using NadekoBot.Extensions;
|
||||||
|
using NadekoBot.Services;
|
||||||
|
using System.IO;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
//todo drawing
|
|
||||||
namespace NadekoBot.Modules.Gambling
|
namespace NadekoBot.Modules.Gambling
|
||||||
{
|
{
|
||||||
|
public partial class Gambling
|
||||||
|
{
|
||||||
[Group]
|
[Group]
|
||||||
public class FlipCoinCommands
|
public class FlipCoinCommands
|
||||||
{
|
{
|
||||||
|
NadekoRandom rng { get; } = new NadekoRandom();
|
||||||
|
private const string headsPath = "data/images/coins/heads.png";
|
||||||
|
private const string tailsPath = "data/images/coins/tails.png";
|
||||||
public FlipCoinCommands() { }
|
public FlipCoinCommands() { }
|
||||||
|
|
||||||
|
[LocalizedCommand, LocalizedDescription, LocalizedSummary, LocalizedAlias]
|
||||||
|
[RequireContext(ContextType.Guild)]
|
||||||
|
public async Task Flip(IUserMessage imsg, int count = 1)
|
||||||
|
{
|
||||||
|
var channel = (ITextChannel)imsg.Channel;
|
||||||
|
if (count == 1)
|
||||||
|
{
|
||||||
|
if (rng.Next(0, 2) == 1)
|
||||||
|
await channel.SendFileAsync(headsPath, $"{imsg.Author.Mention} rolled " + Format.Code("Heads") + ".").ConfigureAwait(false);
|
||||||
|
else
|
||||||
|
await channel.SendFileAsync(tailsPath, $"{imsg.Author.Mention} rolled " + Format.Code("Tails") + ".").ConfigureAwait(false);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (count > 10 || count < 1)
|
||||||
|
{
|
||||||
|
await channel.SendMessageAsync("`Invalid number specified. You can flip 1 to 10 coins.`");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
var imgs = new Image[count];
|
||||||
|
for (var i = 0; i < count; i++)
|
||||||
|
{
|
||||||
|
imgs[i] = rng.Next(0, 10) < 5 ?
|
||||||
|
new Image(File.OpenRead(headsPath)) :
|
||||||
|
new Image(File.OpenRead(tailsPath));
|
||||||
|
}
|
||||||
|
await channel.SendFileAsync(imgs.Merge().ToStream(), $"{count} coins.png").ConfigureAwait(false);
|
||||||
|
}
|
||||||
|
|
||||||
////todo drawing
|
[LocalizedCommand, LocalizedDescription, LocalizedSummary, LocalizedAlias]
|
||||||
//[LocalizedCommand, LocalizedDescription, LocalizedSummary, LocalizedAlias]
|
[RequireContext(ContextType.Guild)]
|
||||||
//[RequireContext(ContextType.Guild)]
|
public async Task Betflip(IUserMessage umsg, int amount, string guess)
|
||||||
//public async Task Flip(IUserMessage imsg, int count = 0)
|
{
|
||||||
//{
|
var channel = (ITextChannel)umsg.Channel;
|
||||||
// var channel = (ITextChannel)imsg.Channel;
|
var guildUser = (IGuildUser)umsg.Author;
|
||||||
// if (count == 0)
|
var guessStr = guess.Trim().ToUpperInvariant();
|
||||||
// {
|
if (guessStr != "H" && guessStr != "T" && guessStr != "HEADS" && guessStr != "TAILS")
|
||||||
// if (rng.Next(0, 2) == 1)
|
return;
|
||||||
// await channel.SendFileAsync("heads.png", ).ConfigureAwait(false);
|
|
||||||
// else
|
|
||||||
// await channel.SendFileAsync("tails.png", ).ConfigureAwait(false);
|
|
||||||
// return;
|
|
||||||
// }
|
|
||||||
// if (result > 10)
|
|
||||||
// result = 10;
|
|
||||||
// var imgs = new Image[result];
|
|
||||||
// for (var i = 0; i < result; i++)
|
|
||||||
// {
|
|
||||||
// imgs[i] = rng.Next(0, 2) == 0 ?
|
|
||||||
// Properties.Resources.tails :
|
|
||||||
// Properties.Resources.heads;
|
|
||||||
// }
|
|
||||||
// await channel.SendFile($"{result} coins.png", imgs.Merge().ToStream(System.Drawing.Imaging.ImageFormat.Png)).ConfigureAwait(false);
|
|
||||||
// return;
|
|
||||||
// await channel.SendMessageAsync("Invalid number").ConfigureAwait(false);
|
|
||||||
//}
|
|
||||||
|
|
||||||
//[LocalizedCommand, LocalizedDescription, LocalizedSummary, LocalizedAlias]
|
if (amount < 1)
|
||||||
//[RequireContext(ContextType.Guild)]
|
return;
|
||||||
//public async Task Betflip(IUserMessage umsg, int amount, string guess)
|
|
||||||
//{
|
|
||||||
// var channel = (ITextChannel)umsg.Channel;
|
|
||||||
// var guildUser = (IGuildUser)umsg.Author;
|
|
||||||
// var guessStr = guess.Trim().ToUpperInvariant();
|
|
||||||
// if (guessStr != "H" && guessStr != "T" && guessStr != "HEADS" && guessStr != "TAILS")
|
|
||||||
// return;
|
|
||||||
|
|
||||||
// if (amount < 1)
|
long userFlowers;
|
||||||
// return;
|
using (var uow = DbHandler.UnitOfWork())
|
||||||
|
{
|
||||||
|
userFlowers = uow.Currency.GetOrCreate(umsg.Author.Id).Amount;
|
||||||
|
}
|
||||||
|
|
||||||
// var userFlowers = Gambling.GetUserFlowers(umsg.Author.Id);
|
if (userFlowers < amount)
|
||||||
|
{
|
||||||
|
await channel.SendMessageAsync($"{umsg.Author.Mention} You don't have enough {Gambling.CurrencyPluralName}. You only have {userFlowers}{Gambling.CurrencySign}.").ConfigureAwait(false);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// if (userFlowers < amount)
|
await CurrencyHandler.RemoveCurrencyAsync(guildUser, "Betflip Gamble", amount, false).ConfigureAwait(false);
|
||||||
// {
|
//heads = true
|
||||||
// await channel.SendMessageAsync($"{umsg.Author.Mention} You don't have enough {Gambling.CurrencyName}s. You only have {userFlowers}{Gambling.CurrencySign}.").ConfigureAwait(false);
|
//tails = false
|
||||||
// return;
|
|
||||||
// }
|
|
||||||
|
|
||||||
// await CurrencyHandler.RemoveCurrencyAsync(guildUser, "Betflip Gamble", amount, false).ConfigureAwait(false);
|
var isHeads = guessStr == "HEADS" || guessStr == "H";
|
||||||
// //heads = true
|
bool result = false;
|
||||||
// //tails = false
|
string imgPathToSend;
|
||||||
|
if (rng.Next(0, 2) == 1)
|
||||||
|
{
|
||||||
|
imgPathToSend = headsPath;
|
||||||
|
result = true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
imgPathToSend = tailsPath;
|
||||||
|
}
|
||||||
|
|
||||||
// var isHeads = guessStr == "HEADS" || guessStr == "H";
|
string str;
|
||||||
// bool result = false;
|
if (isHeads == result)
|
||||||
// var rng = new NadekoRandom();
|
{
|
||||||
// if (rng.Next(0, 2) == 1)
|
str = $"{umsg.Author.Mention}`You guessed it!` You won {amount * 2}{Gambling.CurrencySign}";
|
||||||
// {
|
await CurrencyHandler.AddCurrencyAsync((IGuildUser)umsg.Author, "Betflip Gamble", amount * 2, false).ConfigureAwait(false);
|
||||||
// await channel.SendFileAsync("heads.png", Properties.Resources.heads.ToStream(System.Drawing.Imaging.ImageFormat.Png)).ConfigureAwait(false);
|
}
|
||||||
// result = true;
|
else
|
||||||
// }
|
{
|
||||||
// else
|
str = $"{umsg.Author.Mention}`Better luck next time.`";
|
||||||
// {
|
}
|
||||||
// await channel.SendFileAsync("tails.png", Properties.Resources.tails.ToStream(System.Drawing.Imaging.ImageFormat.Png)).ConfigureAwait(false);
|
|
||||||
// }
|
|
||||||
|
|
||||||
// string str;
|
await channel.SendFileAsync(imgPathToSend, str).ConfigureAwait(false);
|
||||||
// if (isHeads == result)
|
}
|
||||||
// {
|
}
|
||||||
// str = $"{umsg.Author.Mention}`You guessed it!` You won {amount * 2}{Gambling.CurrencySign}";
|
|
||||||
// await CurrencyHandler.AddCurrencyAsync((IGuildUser)umsg.Author, "Betflip Gamble", amount * 2, false).ConfigureAwait(false);
|
|
||||||
|
|
||||||
// }
|
|
||||||
// else
|
|
||||||
// str = $"{umsg.Author.Mention}`More luck next time.`";
|
|
||||||
|
|
||||||
// await channel.SendMessageAsync(str).ConfigureAwait(false);
|
|
||||||
//}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -82,25 +82,25 @@ namespace NadekoBot.Modules.Gambling
|
|||||||
await channel.SendMessageAsync($"{umsg.Author.Mention} successfully sent {amount} {Gambling.CurrencyPluralName}s to {receiver.Mention}!").ConfigureAwait(false);
|
await channel.SendMessageAsync($"{umsg.Author.Mention} successfully sent {amount} {Gambling.CurrencyPluralName}s to {receiver.Mention}!").ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
////todo owner only
|
//todo owner only
|
||||||
//[LocalizedCommand, LocalizedDescription, LocalizedSummary, LocalizedAlias]
|
[LocalizedCommand, LocalizedDescription, LocalizedSummary, LocalizedAlias]
|
||||||
//[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
//public Task Award(IUserMessage umsg, long amount, [Remainder] IGuildUser usr) =>
|
public Task Award(IUserMessage umsg, long amount, [Remainder] IGuildUser usr) =>
|
||||||
// Award(umsg, amount, usr.Id);
|
Award(umsg, amount, usr.Id);
|
||||||
|
|
||||||
//[LocalizedCommand, LocalizedDescription, LocalizedSummary, LocalizedAlias]
|
[LocalizedCommand, LocalizedDescription, LocalizedSummary, LocalizedAlias]
|
||||||
//[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
//public async Task Award(IUserMessage umsg, long amount, [Remainder] ulong usrId)
|
public async Task Award(IUserMessage umsg, long amount, [Remainder] ulong usrId)
|
||||||
//{
|
{
|
||||||
// var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)umsg.Channel;
|
||||||
|
|
||||||
// if (amount <= 0)
|
if (amount <= 0)
|
||||||
// return;
|
return;
|
||||||
|
|
||||||
// await CurrencyHandler.AddFlowersAsync(usrId, $"Awarded by bot owner. ({umsg.Author.Username}/{umsg.Author.Id})", (int)amount).ConfigureAwait(false);
|
await CurrencyHandler.AddCurrencyAsync(usrId, $"Awarded by bot owner. ({umsg.Author.Username}/{umsg.Author.Id})", (int)amount).ConfigureAwait(false);
|
||||||
|
|
||||||
// await channel.SendMessageAsync($"{umsg.Author.Mention} successfully awarded {amount} {Gambling.CurrencyName}s to <@{usrId}>!").ConfigureAwait(false);
|
await channel.SendMessageAsync($"{umsg.Author.Mention} successfully awarded {amount} {Gambling.CurrencyName}s to <@{usrId}>!").ConfigureAwait(false);
|
||||||
//}
|
}
|
||||||
|
|
||||||
////todo owner only
|
////todo owner only
|
||||||
//[LocalizedCommand, LocalizedDescription, LocalizedSummary, LocalizedAlias]
|
//[LocalizedCommand, LocalizedDescription, LocalizedSummary, LocalizedAlias]
|
||||||
|
@ -33,6 +33,14 @@ namespace NadekoBot.Services
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static async Task AddCurrencyAsync(IGuildUser author, string reason, long amount, bool sendMessage)
|
public static async Task AddCurrencyAsync(IGuildUser author, string reason, long amount, bool sendMessage)
|
||||||
|
{
|
||||||
|
await AddCurrencyAsync(author.Id, reason, amount);
|
||||||
|
|
||||||
|
if (sendMessage)
|
||||||
|
await author.SendMessageAsync($"`You received:` {amount} {Gambling.CurrencySign}\n`Reason:` {reason}").ConfigureAwait(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static async Task AddCurrencyAsync(ulong receiverId, string reason, long amount)
|
||||||
{
|
{
|
||||||
if (amount < 0)
|
if (amount < 0)
|
||||||
throw new ArgumentNullException(nameof(amount));
|
throw new ArgumentNullException(nameof(amount));
|
||||||
@ -40,12 +48,9 @@ namespace NadekoBot.Services
|
|||||||
|
|
||||||
using (var uow = DbHandler.UnitOfWork())
|
using (var uow = DbHandler.UnitOfWork())
|
||||||
{
|
{
|
||||||
uow.Currency.TryUpdateState(author.Id, amount);
|
uow.Currency.TryUpdateState(receiverId, amount);
|
||||||
await uow.CompleteAsync();
|
await uow.CompleteAsync();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (sendMessage)
|
|
||||||
await author.SendMessageAsync($"`You received:` {amount} {Gambling.CurrencySign}\n`Reason:` {reason}").ConfigureAwait(false);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -290,5 +290,13 @@ namespace NadekoBot.Extensions
|
|||||||
|
|
||||||
return canvas;
|
return canvas;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static Stream ToStream(this Image img)
|
||||||
|
{
|
||||||
|
var imageStream = new MemoryStream();
|
||||||
|
img.SaveAsPng(imageStream);
|
||||||
|
imageStream.Position = 0;
|
||||||
|
return imageStream;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user