Adding Raffle Buy functionality. Began Config commands for Variable Config Alterations

This commit is contained in:
Sean "Solao Bajiuik" Stoves 2020-06-15 20:51:50 -04:00
parent 7046b97bee
commit eaf5ed9889
5 changed files with 168 additions and 25 deletions

View File

@ -19,9 +19,6 @@
<None Update="appsettings.json"> <None Update="appsettings.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None> </None>
<None Update="ChaosBotSQL.db">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
</ItemGroup> </ItemGroup>
</Project> </Project>

View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<ActiveDebugProfile>IIS Express</ActiveDebugProfile>
</PropertyGroup>
</Project>

View File

@ -0,0 +1,80 @@
using System;
using Discord;
using Discord.Commands;
using System.Threading.Tasks;
using System.Collections.Generic;
using NLog;
using System.Text;
using ChaosBot.Database.Repository;
namespace ChaosBot.Discord.Modules
{
public class ConfigCommands : ModuleBase
{
private static readonly Logger _logger = Program._logger;
private static readonly string _prefix = ConfigurationRepository.GetValue<string>("Discord:Prefix");
[Command("config")]
[RequireBotPermission(GuildPermission.ManageGuild)]
[RequireUserPermission(GuildPermission.ManageGuild)]
public async Task setConfig(string configFlag = null, string value = null)
{
var sb = new StringBuilder();
var embed = new EmbedBuilder();
try
{
if (configFlag == null || value == null)
{
await ReplyAsync($"Syntax Wrong. Please see {_prefix}config help");
return;
}
ConfigurationRepository.SetValue<String>(configFlag, Context.Guild.Id, value);
embed.WithColor(new Color(255, 255, 0));
embed.Title = $"Configuration Management";
sb.AppendLine($"{Context.User.Mention} has changed the Configuration.");
sb.AppendLine();
sb.AppendLine($"{configFlag} == {value}");
/*
* Add the string to the Embed
*/
embed.Description = sb.ToString();
/*
* Reply with the Embed created above
*/
await ReplyAsync(null, false, embed.Build());
}
catch (Exception ex)
{
_logger.Error($"ConfigCommands.setCfg: Exception [{ex}] thrown, <[{ex.Message}]>.");
}
}
[Command("config help")]
[RequireBotPermission(GuildPermission.ManageGuild)]
[RequireUserPermission(GuildPermission.ManageGuild)]
public async Task helpConfig(string configFlag = null, string value = null)
{
var sb = new StringBuilder();
var embed = new EmbedBuilder();
embed.WithColor(new Color(255, 255, 0));
embed.Title = $"Configuration Management Help";
sb.AppendLine();
sb.AppendLine($"{_prefix}config <configFlag> <value>");
/*
* Add the string to the Embed
*/
embed.Description = sb.ToString();
/*
* Reply with the Embed created above
*/
await ReplyAsync(null, false, embed.Build());
}
}
}

View File

@ -5,7 +5,6 @@ using System.Threading.Tasks;
using ChaosBot.Database.Entity; using ChaosBot.Database.Entity;
using Discord; using Discord;
using Discord.Commands; using Discord.Commands;
using Microsoft.Extensions.Configuration;
using NLog; using NLog;
using ChaosBot.Database.Repository; using ChaosBot.Database.Repository;
@ -17,12 +16,30 @@ namespace ChaosBot.Discord.Modules
private static Logger _logger = Program._logger; private static Logger _logger = Program._logger;
[Command("raffle")] [Command("raffle")]
[Alias("raffle info")] public async Task RaffleStatus()
{
long userAmount = RaffleRepository.Count(Convert.ToInt64(Context.User.Id), Convert.ToInt64(Context.Guild.Id));
long totalAmount = RaffleRepository.Count(Convert.ToInt64(Context.Guild.Id));
var eb = new EmbedBuilder();
var sb = new StringBuilder();
sb.AppendLine($"{Context.User.Mention}, you have {userAmount} rafflepoints.");
sb.AppendLine($"There is a total of {totalAmount} rafflepoints.");
eb.Title = "Raffle System";
eb.Description = sb.ToString();
await ReplyAsync(null, false, eb.Build());
}
[Command("raffle help")]
[Alias("raffle ?")]
public async Task RaffleInfo() public async Task RaffleInfo()
{ {
var eb = new EmbedBuilder(); var eb = new EmbedBuilder();
var sb = new StringBuilder(); var sb = new StringBuilder();
string prefix = ConfigurationRepository.GetValue<string>("Discord.Prefix"); string prefix = ConfigurationRepository.GetValue<string>("Discord.Prefix", Context.Guild.Id);
sb.AppendLine($"{Context.User.Mention} has requested raffle information."); sb.AppendLine($"{Context.User.Mention} has requested raffle information.");
sb.AppendLine(); sb.AppendLine();
@ -40,25 +57,6 @@ namespace ChaosBot.Discord.Modules
await ReplyAsync(null, false, eb.Build()); await ReplyAsync(null, false, eb.Build());
} }
[Command("raffle status")]
public async Task RaffleStatus()
{
long userAmount = RaffleRepository.Count(Convert.ToInt64(Context.Guild.Id), Convert.ToInt64(Context.User.Id));
long totalAmount = RaffleRepository.Count(Convert.ToInt64(Context.Guild.Id));
var eb = new EmbedBuilder();
var sb = new StringBuilder();
string prefix = ConfigurationRepository.GetValue<string>("Discord.Prefix");
sb.AppendLine($"{Context.User.Mention}, you have {userAmount} rafflepoints.");
sb.AppendLine($"There is a total of {totalAmount} rafflepoints.");
eb.Title = "Raffle System";
eb.Description = sb.ToString();
await ReplyAsync(null, false, eb.Build());
}
[Command("raffle add")] [Command("raffle add")]
public async Task RaffleAdd(string userMention, int amount) public async Task RaffleAdd(string userMention, int amount)
@ -118,5 +116,40 @@ namespace ChaosBot.Discord.Modules
await ReplyAsync(null, false, eb.Build()); await ReplyAsync(null, false, eb.Build());
} }
[Command("raffle buy")]
public async Task RaffleCommandBuy(int amount = 1)
{
int cost = ConfigurationRepository.GetValue<int>($"Raffle:Cost", Context.Guild.Id) * amount;
long curPoints = PointsRepository.Total(Convert.ToInt64(Context.User.Id), Convert.ToInt64(Context.Guild.Id));
int curRaffle = RaffleRepository.Count(Convert.ToInt64(Context.User.Id), Convert.ToInt64(Context.Guild.Id));
int maxRaffle = ConfigurationRepository.GetValue<int>($"Raffle:Max", Context.Guild.Id);
int newRaffle = curRaffle + amount;
Console.WriteLine($"curPoints: {curPoints}, curRaffle: {curRaffle}, maxRaffle: {maxRaffle}, newRaffle: {newRaffle}");
if (amount <= maxRaffle && newRaffle <= maxRaffle)
{
if (curPoints > cost)
{
long newPoints = PointsRepository.Remove(Convert.ToInt64(Context.User.Id), cost, Convert.ToInt64(Context.Guild.Id));
List<Raffle> raffleList = new List<Raffle>();
for (int i = 0; i < amount; i++)
raffleList.Add(new Raffle(Convert.ToInt64(Context.User.Id), Convert.ToInt64(Context.Guild.Id)));
RaffleRepository.MassInsert(raffleList);
await ReplyAsync($"You have spent {cost} points and bought {amount} tickets. You have {newPoints} left.", false);
}
else
await ReplyAsync($"That will cost {cost} points, you only have {curPoints}.", false);
}
else
{
await ReplyAsync(
$"You cannot buy more then {ConfigurationRepository.GetValue<int>($"Raffle:Max", Context.Guild.Id).ToString()} tickets.", false);
_logger.Warn($"{Context.User.Username} has bought {amount} tickets!");
}
}
} }
} }

View File

@ -0,0 +1,27 @@
{
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:52667/",
"sslPort": 44315
}
},
"profiles": {
"IIS Express": {
"commandName": "IISExpress",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"ChaosBot": {
"commandName": "Project",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
},
"applicationUrl": "https://localhost:5001;http://localhost:5000"
}
}
}