Async Stuff, !rank doesn't mention anymore, setup finalizer, minor tweaks

This commit is contained in:
Runebaas 2017-09-29 20:30:00 +02:00
parent b1f4e8ad93
commit a549950ad9
No known key found for this signature in database
GPG key ID: 2677AF508D0300D6
4 changed files with 59 additions and 40 deletions

View file

@ -22,12 +22,10 @@ namespace Geekbot.net.Modules
public async Task getInfo() public async Task getInfo()
{ {
var eb = new EmbedBuilder(); var eb = new EmbedBuilder();
// eb.WithAuthor(new EmbedAuthorBuilder() eb.WithAuthor(new EmbedAuthorBuilder()
// .WithIconUrl(Context.Guild.IconUrl) .WithIconUrl(Context.Guild.IconUrl)
// .WithName(Context.Guild.Name)); .WithName(Context.Guild.Name));
eb.WithColor(new Color(110, 204, 147)); eb.WithColor(new Color(110, 204, 147));
eb.Title = $":bar_chart: {Context.Guild.Name}";
eb.ThumbnailUrl = Context.Guild.IconUrl;
var created = Context.Guild.CreatedAt; var created = Context.Guild.CreatedAt;
var age = Math.Floor((DateTime.Now - created).TotalDays); var age = Math.Floor((DateTime.Now - created).TotalDays);

View file

@ -53,7 +53,8 @@ namespace Geekbot.net.Modules
var quote = createQuoteObject(lastMessage); var quote = createQuoteObject(lastMessage);
var quoteStore = JsonConvert.SerializeObject(quote); var quoteStore = JsonConvert.SerializeObject(quote);
redis.SetAdd($"{Context.Guild.Id}:Quotes", quoteStore); redis.SetAdd($"{Context.Guild.Id}:Quotes", quoteStore);
await ReplyAsync("Quote Added"); var embed = quoteBuilder(quote);
await ReplyAsync("**Quote Added**", false, embed.Build());
} }
catch (Exception e) catch (Exception e)
{ {
@ -71,7 +72,9 @@ namespace Geekbot.net.Modules
var quote = createQuoteObject(message); var quote = createQuoteObject(message);
var quoteStore = JsonConvert.SerializeObject(quote); var quoteStore = JsonConvert.SerializeObject(quote);
redis.SetAdd($"{Context.Guild.Id}:Quotes", quoteStore); redis.SetAdd($"{Context.Guild.Id}:Quotes", quoteStore);
await ReplyAsync("Quote Added"); var embed = quoteBuilder(quote);
await ReplyAsync("**Quote Added**", false, embed.Build());
} }
catch (Exception e) catch (Exception e)
{ {

View file

@ -39,11 +39,9 @@ namespace Geekbot.net.Modules
var percent = Math.Round((double) (100 * messages) / guildMessages, 2); var percent = Math.Round((double) (100 * messages) / guildMessages, 2);
var eb = new EmbedBuilder(); var eb = new EmbedBuilder();
// eb.WithAuthor(new EmbedAuthorBuilder() eb.WithAuthor(new EmbedAuthorBuilder()
// .WithIconUrl(userInfo.GetAvatarUrl()) .WithIconUrl(userInfo.GetAvatarUrl())
// .WithName(userInfo.Username)); .WithName(userInfo.Username));
eb.Title = $":bar_chart: {userInfo.Username}#{userInfo.Discriminator}";
eb.ThumbnailUrl = userInfo.GetAvatarUrl();
eb.WithColor(new Color(221, 255, 119)); eb.WithColor(new Color(221, 255, 119));
eb.AddField("Discordian Since", eb.AddField("Discordian Since",
@ -109,7 +107,7 @@ namespace Geekbot.net.Modules
} }
var highScore = new StringBuilder(); var highScore = new StringBuilder();
if (failedToRetrieveUser) highScore.AppendLine(":warning: I couldn't get all userdata, i mentioned the missing ones, sorry!\n"); if (failedToRetrieveUser) highScore.AppendLine(":warning: I couldn't get all userdata, sorry! (bugfix coming soon:tm:)\n");
highScore.AppendLine($":bar_chart: **Highscore for {Context.Guild.Name}**"); highScore.AppendLine($":bar_chart: **Highscore for {Context.Guild.Name}**");
var highscorePlace = 1; var highscorePlace = 1;
foreach (var user in highscoreUsers) foreach (var user in highscoreUsers)
@ -123,7 +121,7 @@ namespace Geekbot.net.Modules
else else
{ {
highScore.AppendLine( highScore.AppendLine(
$"{NumerToEmoji(highscorePlace)} **<@{user.Key.Id}>** - {percent}% of total - {user.Value} messages"); $"{NumerToEmoji(highscorePlace)} **{user.Key.Id}** - {percent}% of total - {user.Value} messages");
} }
highscorePlace++; highscorePlace++;
} }

View file

@ -1,6 +1,8 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.IO;
using System.Linq; using System.Linq;
using System.Net;
using System.Reflection; using System.Reflection;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
@ -24,7 +26,8 @@ namespace Geekbot.net
private IServiceProvider servicesProvider; private IServiceProvider servicesProvider;
private RedisValue token; private RedisValue token;
private ILogger logger; private ILogger logger;
private ulong botOwnerId; private string[] args;
private bool firstStart = false;
private static void Main(string[] args) private static void Main(string[] args)
{ {
@ -44,6 +47,7 @@ namespace Geekbot.net
private async Task MainAsync(string[] args, ILogger logger) private async Task MainAsync(string[] args, ILogger logger)
{ {
this.logger = logger; this.logger = logger;
this.args = args;
logger.Information("[Geekbot] Initing Stuff"); logger.Information("[Geekbot] Initing Stuff");
client = new DiscordSocketClient(new DiscordSocketConfig client = new DiscordSocketClient(new DiscordSocketConfig
@ -91,17 +95,9 @@ namespace Geekbot.net
redis.StringSet("discordToken", newToken); redis.StringSet("discordToken", newToken);
redis.StringSet("Game", "Ping Pong"); redis.StringSet("Game", "Ping Pong");
token = newToken; token = newToken;
firstStart = true;
} }
var botOwner = redis.StringGet("botOwner");
if (botOwner.IsNullOrEmpty)
{
Console.Write("Bot Owner User ID: ");
botOwner = Console.ReadLine();
redis.StringSet("botOwner", botOwner);
}
botOwnerId = (ulong) botOwner;
services = new ServiceCollection(); services = new ServiceCollection();
var RandomClient = new Random(); var RandomClient = new Random();
var fortunes = new FortunesProvider(RandomClient, logger); var fortunes = new FortunesProvider(RandomClient, logger);
@ -144,7 +140,15 @@ namespace Geekbot.net
await commands.AddModulesAsync(Assembly.GetEntryAssembly()); await commands.AddModulesAsync(Assembly.GetEntryAssembly());
services.AddSingleton(commands); services.AddSingleton(commands);
services.AddSingleton<DiscordSocketClient>(client); services.AddSingleton<DiscordSocketClient>(client);
this.servicesProvider = services.BuildServiceProvider(); servicesProvider = services.BuildServiceProvider();
if (firstStart || (args.Length != 0 && args.Contains("--reset")))
{
logger.Information("[Geekbot] Finishing setup");
await FinishSetup();
logger.Information("[Geekbot] Setup finished");
}
logger.Information("[Geekbot] Done and ready for use\n"); logger.Information("[Geekbot] Done and ready for use\n");
} }
} }
@ -162,44 +166,46 @@ namespace Geekbot.net
return true; return true;
} }
private async Task HandleCommand(SocketMessage messageParam) private Task HandleCommand(SocketMessage messageParam)
{ {
var message = messageParam as SocketUserMessage; var message = messageParam as SocketUserMessage;
if (message == null) return; if (message == null) return Task.CompletedTask;
if (message.Author.IsBot) return; if (message.Author.IsBot) return Task.CompletedTask;
var argPos = 0; var argPos = 0;
var lowCaseMsg = message.ToString().ToLower(); var lowCaseMsg = message.ToString().ToLower();
if (lowCaseMsg.StartsWith("ping")) if (lowCaseMsg.StartsWith("ping"))
{ {
await message.Channel.SendMessageAsync("pong"); message.Channel.SendMessageAsync("pong");
return; return Task.CompletedTask;
} }
if (lowCaseMsg.StartsWith("hui")) if (lowCaseMsg.StartsWith("hui"))
{ {
await message.Channel.SendMessageAsync("hui!!!"); message.Channel.SendMessageAsync("hui!!!");
return; return Task.CompletedTask;
} }
if (!(message.HasCharPrefix('!', ref argPos) || if (!(message.HasCharPrefix('!', ref argPos) ||
message.HasMentionPrefix(client.CurrentUser, ref argPos))) return; message.HasMentionPrefix(client.CurrentUser, ref argPos))) return Task.CompletedTask;
var context = new CommandContext(client, message); var context = new CommandContext(client, message);
var commandExec = commands.ExecuteAsync(context, argPos, servicesProvider); var commandExec = commands.ExecuteAsync(context, argPos, servicesProvider);
return Task.CompletedTask;
} }
private async Task HandleMessageReceived(SocketMessage messsageParam) private Task HandleMessageReceived(SocketMessage messsageParam)
{ {
var message = messsageParam; var message = messsageParam;
if (message == null) return; if (message == null) return Task.CompletedTask;
var channel = (SocketGuildChannel) message.Channel; var channel = (SocketGuildChannel) message.Channel;
await redis.HashIncrementAsync($"{channel.Guild.Id}:Messages", message.Author.Id.ToString()); redis.HashIncrementAsync($"{channel.Guild.Id}:Messages", message.Author.Id.ToString());
await redis.HashIncrementAsync($"{channel.Guild.Id}:Messages", 0.ToString()); redis.HashIncrementAsync($"{channel.Guild.Id}:Messages", 0.ToString());
if (message.Author.IsBot) return; if (message.Author.IsBot) return Task.CompletedTask;
logger.Information($"[Message] {channel.Guild.Name} - {message.Channel} - {message.Author.Username} - {message.Content}"); logger.Information($"[Message] {channel.Guild.Name} - {message.Channel} - {message.Author.Username} - {message.Content}");
return Task.CompletedTask;
} }
private async Task HandleUserJoined(SocketGuildUser user) private Task HandleUserJoined(SocketGuildUser user)
{ {
if (!user.IsBot) if (!user.IsBot)
{ {
@ -207,9 +213,23 @@ namespace Geekbot.net
if (!message.IsNullOrEmpty) if (!message.IsNullOrEmpty)
{ {
message = message.ToString().Replace("$user", user.Mention); message = message.ToString().Replace("$user", user.Mention);
await user.Guild.DefaultChannel.SendMessageAsync(message); user.Guild.DefaultChannel.SendMessageAsync(message);
} }
} }
return Task.CompletedTask;
}
private async Task<Task> FinishSetup()
{
var appInfo = await client.GetApplicationInfoAsync();
redis.StringSet("botOwner", appInfo.Owner.Id);
var req = HttpWebRequest.Create(appInfo.IconUrl);
using (Stream stream = req.GetResponse().GetResponseStream() )
{
await client.CurrentUser.ModifyAsync(Avatar => new Image(stream));
}
return Task.CompletedTask;
} }
private Task DiscordLogger(LogMessage message) private Task DiscordLogger(LogMessage message)