karma commands now have a timeout
This commit is contained in:
parent
6aaf487e94
commit
4db152f304
4 changed files with 61 additions and 8 deletions
|
@ -17,15 +17,23 @@ namespace Geekbot.net.Modules
|
||||||
[Command("good"), Summary("Increase Someones Karma")]
|
[Command("good"), Summary("Increase Someones Karma")]
|
||||||
public async Task Good([Summary("The someone")] IUser user)
|
public async Task Good([Summary("The someone")] IUser user)
|
||||||
{
|
{
|
||||||
|
var lastKarma = GetLastKarma();
|
||||||
|
Console.WriteLine(lastKarma.ToString());
|
||||||
if (user.Id == Context.User.Id)
|
if (user.Id == Context.User.Id)
|
||||||
{
|
{
|
||||||
await ReplyAsync($"Sorry {Context.User.Username}, but you can't give yourself karma");
|
await ReplyAsync($"Sorry {Context.User.Username}, but you can't give yourself karma");
|
||||||
}
|
}
|
||||||
|
else if (lastKarma > GetUnixTimestamp())
|
||||||
|
{
|
||||||
|
await ReplyAsync($"Sorry {Context.User.Username}, but you have to wait {GetTimeLeft(lastKarma)} before you can give karma again...");
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
var key = Context.Guild.Id + "-" + user.Id + "-karma";
|
var key = Context.Guild.Id + "-" + user.Id + "-karma";
|
||||||
var badJokes = (int)redis.Client.StringGet(key);
|
var badJokes = (int)redis.Client.StringGet(key);
|
||||||
redis.Client.StringSet(key, (badJokes + 1).ToString());
|
redis.Client.StringSet(key, (badJokes + 1).ToString());
|
||||||
|
var lastKey = Context.Guild.Id + "-" + Context.User.Id + "-karma-timeout";
|
||||||
|
redis.Client.StringSet(lastKey, GetNewLastKarma());
|
||||||
await ReplyAsync($"{Context.User.Username} gave {user.Mention} karma");
|
await ReplyAsync($"{Context.User.Username} gave {user.Mention} karma");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -33,17 +41,54 @@ namespace Geekbot.net.Modules
|
||||||
[Command("bad"), Summary("Decrease Someones Karma")]
|
[Command("bad"), Summary("Decrease Someones Karma")]
|
||||||
public async Task Bad([Summary("The someone")] IUser user)
|
public async Task Bad([Summary("The someone")] IUser user)
|
||||||
{
|
{
|
||||||
|
var lastKarma = GetLastKarma();
|
||||||
if (user.Id == Context.User.Id)
|
if (user.Id == Context.User.Id)
|
||||||
{
|
{
|
||||||
await ReplyAsync($"Sorry {Context.User.Username}, but you can't lower your own karma");
|
await ReplyAsync($"Sorry {Context.User.Username}, but you can't lower your own karma");
|
||||||
}
|
}
|
||||||
|
else if (lastKarma > GetUnixTimestamp())
|
||||||
|
{
|
||||||
|
await ReplyAsync($"Sorry {Context.User.Username}, but you have to wait {GetTimeLeft(lastKarma)} before you can take karma again...");
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
var key = Context.Guild.Id + "-" + user.Id + "-karma";
|
var key = Context.Guild.Id + "-" + user.Id + "-karma";
|
||||||
var badJokes = (int)redis.Client.StringGet(key);
|
var badJokes = (int)redis.Client.StringGet(key);
|
||||||
redis.Client.StringSet(key, (badJokes - 1).ToString());
|
redis.Client.StringSet(key, (badJokes - 1).ToString());
|
||||||
|
var lastKey = Context.Guild.Id + "-" + Context.User.Id + "-karma-timeout";
|
||||||
|
redis.Client.StringSet(lastKey, GetNewLastKarma());
|
||||||
await ReplyAsync($"{Context.User.Username} lowered {user.Mention}'s karma");
|
await ReplyAsync($"{Context.User.Username} lowered {user.Mention}'s karma");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private int GetLastKarma()
|
||||||
|
{
|
||||||
|
var lastKey = Context.Guild.Id + "-" + Context.User.Id + "-karma-timeout";
|
||||||
|
var redisReturn = redis.Client.StringGet(lastKey);
|
||||||
|
if (!int.TryParse(redisReturn.ToString(), out var i))
|
||||||
|
{
|
||||||
|
i = GetUnixTimestamp();
|
||||||
|
}
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
|
||||||
|
private int GetNewLastKarma()
|
||||||
|
{
|
||||||
|
var timeout = TimeSpan.FromMinutes(3);
|
||||||
|
return (int)(DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1)).Add(timeout)).TotalSeconds;
|
||||||
|
}
|
||||||
|
|
||||||
|
private int GetUnixTimestamp()
|
||||||
|
{
|
||||||
|
return (int)(DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1))).TotalSeconds;
|
||||||
|
}
|
||||||
|
|
||||||
|
private string GetTimeLeft(int time)
|
||||||
|
{
|
||||||
|
DateTime dtDateTime = new DateTime(1970,1,1,0,0,0,0,DateTimeKind.Utc);
|
||||||
|
dtDateTime = dtDateTime.AddSeconds( time ).ToLocalTime();
|
||||||
|
var dt = dtDateTime.Subtract(DateTime.Now);
|
||||||
|
return $"{dt.Minutes} Minutes and {dt.Seconds} Seconds";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -1,15 +1,15 @@
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
using Discord;
|
||||||
using Discord.Commands;
|
using Discord.Commands;
|
||||||
|
|
||||||
namespace Geekbot.net.Modules
|
namespace Geekbot.net.Modules
|
||||||
{
|
{
|
||||||
public class Ping : ModuleBase
|
public class Ping : ModuleBase
|
||||||
{
|
{
|
||||||
[Command("ping"), Summary("Pong.")]
|
[Command("👀"), Summary("Look at the bot.")]
|
||||||
public async Task Say()
|
public async Task Eyes()
|
||||||
{
|
{
|
||||||
await Task.Delay(5000);
|
await ReplyAsync("S... Stop looking at me... baka!");
|
||||||
await ReplyAsync("Pong");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -32,8 +32,8 @@ namespace Geekbot.net.Modules
|
||||||
.WithName(userInfo.Username));
|
.WithName(userInfo.Username));
|
||||||
|
|
||||||
eb.AddField("Discordian Since", $"{userInfo.CreatedAt.Day}/{userInfo.CreatedAt.Month}/{userInfo.CreatedAt.Year} ({age} days)");
|
eb.AddField("Discordian Since", $"{userInfo.CreatedAt.Day}/{userInfo.CreatedAt.Month}/{userInfo.CreatedAt.Year} ({age} days)");
|
||||||
eb.AddField("Level", level);
|
eb.AddInlineField("Level", level)
|
||||||
eb.AddField("Messages Sent", messages);
|
.AddInlineField("Messages Sent", messages);
|
||||||
|
|
||||||
var karma = redis.Client.StringGet(key + "-karma");
|
var karma = redis.Client.StringGet(key + "-karma");
|
||||||
if (!karma.IsNullOrEmpty)
|
if (!karma.IsNullOrEmpty)
|
||||||
|
|
|
@ -60,8 +60,16 @@ namespace Geekbot.net
|
||||||
|
|
||||||
await InstallCommands();
|
await InstallCommands();
|
||||||
Console.WriteLine("Connecting to Discord...");
|
Console.WriteLine("Connecting to Discord...");
|
||||||
|
try
|
||||||
|
{
|
||||||
await client.LoginAsync(TokenType.Bot, token);
|
await client.LoginAsync(TokenType.Bot, token);
|
||||||
await client.StartAsync();
|
await client.StartAsync();
|
||||||
|
}
|
||||||
|
catch (AggregateException)
|
||||||
|
{
|
||||||
|
Console.WriteLine("Could not connect to discord...");
|
||||||
|
Environment.Exit(1);
|
||||||
|
}
|
||||||
Console.WriteLine("Done and ready for use...\n");
|
Console.WriteLine("Done and ready for use...\n");
|
||||||
|
|
||||||
await Task.Delay(-1);
|
await Task.Delay(-1);
|
||||||
|
|
Loading…
Reference in a new issue