Add more run parameters, remove first launch stuff, store token in globals
This commit is contained in:
parent
bb8aee1eda
commit
a1b5bd1955
4 changed files with 56 additions and 56 deletions
|
@ -29,7 +29,7 @@ namespace Geekbot.net.Database
|
||||||
_client = client;
|
_client = client;
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task Migrate()
|
public Task Migrate()
|
||||||
{
|
{
|
||||||
_logger.Information(LogSource.Geekbot, "Starting migration process");
|
_logger.Information(LogSource.Geekbot, "Starting migration process");
|
||||||
foreach (var guild in _client.Guilds)
|
foreach (var guild in _client.Guilds)
|
||||||
|
@ -283,6 +283,8 @@ namespace Geekbot.net.Database
|
||||||
_logger.Information(LogSource.Geekbot, $"Finished Migration for {guild.Name}");
|
_logger.Information(LogSource.Geekbot, $"Finished Migration for {guild.Name}");
|
||||||
}
|
}
|
||||||
_logger.Information(LogSource.Geekbot, "Finished migration process");
|
_logger.Information(LogSource.Geekbot, "Finished migration process");
|
||||||
|
|
||||||
|
return Task.CompletedTask;;
|
||||||
}
|
}
|
||||||
|
|
||||||
private QuoteModel CreateQuoteObject(ulong guild, QuoteObjectDto quote)
|
private QuoteModel CreateQuoteObject(ulong guild, QuoteObjectDto quote)
|
||||||
|
|
|
@ -9,22 +9,22 @@ namespace Geekbot.net.Lib.ReactionListener
|
||||||
{
|
{
|
||||||
public class ReactionListener : IReactionListener
|
public class ReactionListener : IReactionListener
|
||||||
{
|
{
|
||||||
private readonly IDatabase _database;
|
private readonly IDatabase _redis;
|
||||||
private Dictionary<string, Dictionary<IEmote, ulong>> _listener;
|
private Dictionary<string, Dictionary<IEmote, ulong>> _listener;
|
||||||
|
|
||||||
public ReactionListener(IDatabase database)
|
public ReactionListener(IDatabase redis)
|
||||||
{
|
{
|
||||||
_database = database;
|
_redis = redis;
|
||||||
LoadListeners();
|
LoadListeners();
|
||||||
}
|
}
|
||||||
|
|
||||||
private Task LoadListeners()
|
private Task LoadListeners()
|
||||||
{
|
{
|
||||||
var ids = _database.SetMembers("MessageIds");
|
var ids = _redis.SetMembers("MessageIds");
|
||||||
_listener = new Dictionary<string, Dictionary<IEmote, ulong>>();
|
_listener = new Dictionary<string, Dictionary<IEmote, ulong>>();
|
||||||
foreach (var id in ids)
|
foreach (var id in ids)
|
||||||
{
|
{
|
||||||
var reactions = _database.HashGetAll($"Messages:{id}");
|
var reactions = _redis.HashGetAll($"Messages:{id}");
|
||||||
var messageId = id;
|
var messageId = id;
|
||||||
var emojiDict = new Dictionary<IEmote, ulong>();
|
var emojiDict = new Dictionary<IEmote, ulong>();
|
||||||
foreach (var r in reactions)
|
foreach (var r in reactions)
|
||||||
|
@ -54,12 +54,12 @@ namespace Geekbot.net.Lib.ReactionListener
|
||||||
|
|
||||||
public Task AddRoleToListener(string messageId, IEmote emoji, IRole role)
|
public Task AddRoleToListener(string messageId, IEmote emoji, IRole role)
|
||||||
{
|
{
|
||||||
if (_database.SetMembers("MessageIds").All(e => e.ToString() != messageId))
|
if (_redis.SetMembers("MessageIds").All(e => e.ToString() != messageId))
|
||||||
{
|
{
|
||||||
_database.SetAdd("MessageIds", messageId);
|
_redis.SetAdd("MessageIds", messageId);
|
||||||
}
|
}
|
||||||
_database.HashSet($"Messages:{messageId}", new[] {new HashEntry(emoji.ToString(), role.Id.ToString())});
|
_redis.HashSet($"Messages:{messageId}", new[] {new HashEntry(emoji.ToString(), role.Id.ToString())});
|
||||||
_database.SetAdd("MessageIds", messageId);
|
_redis.SetAdd("MessageIds", messageId);
|
||||||
if (_listener.ContainsKey(messageId))
|
if (_listener.ContainsKey(messageId))
|
||||||
{
|
{
|
||||||
_listener[messageId].Add(emoji, role.Id);
|
_listener[messageId].Add(emoji, role.Id);
|
||||||
|
|
|
@ -1,20 +1,17 @@
|
||||||
using System;
|
using CommandLine;
|
||||||
using CommandLine;
|
|
||||||
|
|
||||||
namespace Geekbot.net.Lib
|
namespace Geekbot.net.Lib
|
||||||
{
|
{
|
||||||
public class RunParameters
|
public class RunParameters
|
||||||
{
|
{
|
||||||
/**
|
/************************************
|
||||||
* General Parameters
|
* General *
|
||||||
*/
|
************************************/
|
||||||
[Option('V', "verbose", Default = false, HelpText = "Prints all messages to standard output.")]
|
|
||||||
|
[Option('V', "verbose", Default = false, HelpText = "Logs everything.")]
|
||||||
public bool Verbose { get; set; }
|
public bool Verbose { get; set; }
|
||||||
|
|
||||||
[Option('r', "reset", Default = false, HelpText = "Resets the bot")]
|
[Option('j', "log-json", Default = false, HelpText = "Logger outputs json")]
|
||||||
public bool Reset { get; set; }
|
|
||||||
|
|
||||||
[Option('j', "log-json", Default = false, HelpText = "Logs messages as json")]
|
|
||||||
public bool LogJson { get; set; }
|
public bool LogJson { get; set; }
|
||||||
|
|
||||||
[Option('a', "disable-api", Default = false, HelpText = "Disables the web api")]
|
[Option('a', "disable-api", Default = false, HelpText = "Disables the web api")]
|
||||||
|
@ -26,9 +23,10 @@ namespace Geekbot.net.Lib
|
||||||
[Option("token", Default = null, HelpText = "Set a new bot token")]
|
[Option("token", Default = null, HelpText = "Set a new bot token")]
|
||||||
public string Token { get; set; }
|
public string Token { get; set; }
|
||||||
|
|
||||||
/**
|
/************************************
|
||||||
* Database Stuff
|
* Database *
|
||||||
*/
|
************************************/
|
||||||
|
|
||||||
[Option("in-memory", Default = false, HelpText = "Uses the in-memory database instead of postgresql")]
|
[Option("in-memory", Default = false, HelpText = "Uses the in-memory database instead of postgresql")]
|
||||||
public bool InMemory { get; set; }
|
public bool InMemory { get; set; }
|
||||||
|
|
||||||
|
@ -47,5 +45,28 @@ namespace Geekbot.net.Lib
|
||||||
|
|
||||||
[Option("db-password", Default = "", HelpText = "Set a posgresql password")]
|
[Option("db-password", Default = "", HelpText = "Set a posgresql password")]
|
||||||
public string DbPassword { get; set; }
|
public string DbPassword { get; set; }
|
||||||
|
|
||||||
|
/************************************
|
||||||
|
* Redis *
|
||||||
|
************************************/
|
||||||
|
|
||||||
|
[Option("redis-host", Default = "127.0.0.1", HelpText = "Set a redis host")]
|
||||||
|
public string RedisHost { get; set; }
|
||||||
|
|
||||||
|
[Option("redis-port", Default = "6379", HelpText = "Set a redis port")]
|
||||||
|
public string RedisPort { get; set; }
|
||||||
|
|
||||||
|
[Option("redis-database", Default = "6", HelpText = "Select a redis database (1-15)")]
|
||||||
|
public string RedisDatabase { get; set; }
|
||||||
|
|
||||||
|
/************************************
|
||||||
|
* WebApi *
|
||||||
|
************************************/
|
||||||
|
|
||||||
|
[Option("api-host", Default = "127.0.0.1", HelpText = "Host on which the WebApi listens")]
|
||||||
|
public string ApiHost { get; set; }
|
||||||
|
|
||||||
|
[Option("api-port", Default = "12995", HelpText = "Port on which the WebApi listens")]
|
||||||
|
public string ApiPort { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -38,7 +38,6 @@ namespace Geekbot.net
|
||||||
private RedisValue _token;
|
private RedisValue _token;
|
||||||
private GeekbotLogger _logger;
|
private GeekbotLogger _logger;
|
||||||
private IUserRepository _userRepository;
|
private IUserRepository _userRepository;
|
||||||
private bool _firstStart;
|
|
||||||
private RunParameters _runParameters;
|
private RunParameters _runParameters;
|
||||||
|
|
||||||
private static void Main(string[] args)
|
private static void Main(string[] args)
|
||||||
|
@ -84,10 +83,13 @@ namespace Geekbot.net
|
||||||
_client.Log += discordLogger.Log;
|
_client.Log += discordLogger.Log;
|
||||||
_commands = new CommandService();
|
_commands = new CommandService();
|
||||||
|
|
||||||
|
_database = new DatabaseInitializer(runParameters, logger).Initzialize();
|
||||||
|
_globalSettings = new GlobalSettings(_database);
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var redisMultiplexer = ConnectionMultiplexer.Connect("127.0.0.1:6379");
|
var redisMultiplexer = ConnectionMultiplexer.Connect($"{runParameters.RedisHost}:{runParameters.RedisPort}");
|
||||||
_redis = redisMultiplexer.GetDatabase(6);
|
_redis = redisMultiplexer.GetDatabase(int.Parse(runParameters.RedisDatabase));
|
||||||
logger.Information(LogSource.Redis, $"Connected to db {_redis.Database}");
|
logger.Information(LogSource.Redis, $"Connected to db {_redis.Database}");
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
|
@ -96,20 +98,16 @@ namespace Geekbot.net
|
||||||
Environment.Exit(GeekbotExitCode.RedisConnectionFailed.GetHashCode());
|
Environment.Exit(GeekbotExitCode.RedisConnectionFailed.GetHashCode());
|
||||||
}
|
}
|
||||||
|
|
||||||
_token = runParameters.Token ?? _redis.StringGet("discordToken");
|
_token = runParameters.Token ?? _globalSettings.GetKey("DiscordToken");
|
||||||
if (_token.IsNullOrEmpty)
|
if (_token.IsNullOrEmpty)
|
||||||
{
|
{
|
||||||
Console.Write("Your bot Token: ");
|
Console.Write("Your bot Token: ");
|
||||||
var newToken = Console.ReadLine();
|
var newToken = Console.ReadLine();
|
||||||
_redis.StringSet("discordToken", newToken);
|
_globalSettings.SetKey("DiscordToken", newToken);
|
||||||
_redis.StringSet("Game", "Ping Pong");
|
_globalSettings.SetKey("Game", "Ping Pong");
|
||||||
_token = newToken;
|
_token = newToken;
|
||||||
_firstStart = true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
_database = new DatabaseInitializer(runParameters, logger).Initzialize();
|
|
||||||
_globalSettings = new GlobalSettings(_database);
|
|
||||||
|
|
||||||
_services = new ServiceCollection();
|
_services = new ServiceCollection();
|
||||||
|
|
||||||
_userRepository = new UserRepository(_database, logger);
|
_userRepository = new UserRepository(_database, logger);
|
||||||
|
@ -177,13 +175,7 @@ namespace Geekbot.net
|
||||||
_client.UserLeft += handlers.UserLeft;
|
_client.UserLeft += handlers.UserLeft;
|
||||||
_client.ReactionAdded += handlers.ReactionAdded;
|
_client.ReactionAdded += handlers.ReactionAdded;
|
||||||
_client.ReactionRemoved += handlers.ReactionRemoved;
|
_client.ReactionRemoved += handlers.ReactionRemoved;
|
||||||
|
|
||||||
if (_firstStart || _runParameters.Reset)
|
|
||||||
{
|
|
||||||
_logger.Information(LogSource.Geekbot, "Finishing setup");
|
|
||||||
await FinishSetup();
|
|
||||||
_logger.Information(LogSource.Geekbot, "Setup finished");
|
|
||||||
}
|
|
||||||
if (!_runParameters.DisableApi)
|
if (!_runParameters.DisableApi)
|
||||||
{
|
{
|
||||||
StartWebApi();
|
StartWebApi();
|
||||||
|
@ -209,24 +201,9 @@ namespace Geekbot.net
|
||||||
private void StartWebApi()
|
private void StartWebApi()
|
||||||
{
|
{
|
||||||
_logger.Information(LogSource.Api, "Starting Webserver");
|
_logger.Information(LogSource.Api, "Starting Webserver");
|
||||||
var webApiUrl = new Uri("http://localhost:12995");
|
var webApiUrl = new Uri($"http://{_runParameters.ApiHost}:{_runParameters.ApiPort}");
|
||||||
new NancyHost(webApiUrl).Start();
|
new NancyHost(webApiUrl).Start();
|
||||||
_logger.Information(LogSource.Api, $"Webserver now running on {webApiUrl}");
|
_logger.Information(LogSource.Api, $"Webserver now running on {webApiUrl}");
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task<Task> FinishSetup()
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
// ToDo: Set bot avatar
|
|
||||||
var appInfo = await _client.GetApplicationInfoAsync();
|
|
||||||
_redis.StringSet("botOwner", appInfo.Owner.Id);
|
|
||||||
}
|
|
||||||
catch (Exception e)
|
|
||||||
{
|
|
||||||
_logger.Warning(LogSource.Geekbot, "Setup Failed, couldn't retrieve discord application data", e);
|
|
||||||
}
|
|
||||||
return Task.CompletedTask;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
Reference in a new issue