NadekoBot/src/NadekoBot/Services/Impl/BotCredentials.cs

124 lines
4.7 KiB
C#
Raw Normal View History

2016-08-18 23:28:26 +00:00
using Newtonsoft.Json;
using System;
using System.IO;
2016-08-20 11:05:57 +00:00
using Discord;
using System.Linq;
using NLog;
using Microsoft.Extensions.Configuration;
2017-02-13 09:28:49 +00:00
using System.Collections.Immutable;
2016-08-15 23:38:28 +00:00
namespace NadekoBot.Services.Impl
{
public class BotCredentials : IBotCredentials
{
private Logger _log;
public ulong ClientId { get; }
2016-08-16 14:53:38 +00:00
2016-08-18 23:28:26 +00:00
public string GoogleApiKey { get; }
2016-08-15 23:38:28 +00:00
2016-08-20 23:01:50 +00:00
public string MashapeKey { get; }
2016-08-18 23:28:26 +00:00
public string Token { get; }
public ImmutableArray<ulong> OwnerIds { get; }
2016-08-18 23:28:26 +00:00
2016-08-20 17:13:29 +00:00
public string LoLApiKey { get; }
public string OsuApiKey { get; }
private string _soundcloudClientId;
public string SoundCloudClientId {
get {
return string.IsNullOrWhiteSpace(_soundcloudClientId)
? "d0bd7768e3a1a2d15430f0dccb871117"
: _soundcloudClientId;
}
2017-05-27 08:19:27 +00:00
private set {
_soundcloudClientId = value;
}
}
2016-08-20 17:13:29 +00:00
2016-11-15 09:54:56 +00:00
public DBConfig Db { get; }
public int TotalShards { get; }
public string CarbonKey { get; }
public string credsFileName { get; } = Path.Combine(Directory.GetCurrentDirectory(), "credentials.json");
2017-03-05 15:09:54 +00:00
public string PatreonAccessToken { get; }
2016-08-18 23:28:26 +00:00
public BotCredentials()
{
_log = LogManager.GetCurrentClassLogger();
try { File.WriteAllText("./credentials_example.json", JsonConvert.SerializeObject(new CredentialsModel(), Formatting.Indented)); } catch { }
if(!File.Exists(credsFileName))
2016-11-15 08:55:42 +00:00
_log.Warn($"credentials.json is missing. Attempting to load creds from environment variables prefixed with 'NadekoBot_'. Example is in {Path.GetFullPath("./credentials_example.json")}");
try
{
var configBuilder = new ConfigurationBuilder();
2016-11-15 10:06:11 +00:00
configBuilder.AddJsonFile(credsFileName, true)
.AddEnvironmentVariables("NadekoBot_");
var data = configBuilder.Build();
Token = data[nameof(Token)];
if (string.IsNullOrWhiteSpace(Token))
throw new ArgumentNullException(nameof(Token), "Token is missing from credentials.json or Environment varibles.");
OwnerIds = data.GetSection("OwnerIds").GetChildren().Select(c => ulong.Parse(c.Value)).ToImmutableArray();
LoLApiKey = data[nameof(LoLApiKey)];
GoogleApiKey = data[nameof(GoogleApiKey)];
MashapeKey = data[nameof(MashapeKey)];
OsuApiKey = data[nameof(OsuApiKey)];
2017-03-05 15:09:54 +00:00
PatreonAccessToken = data[nameof(PatreonAccessToken)];
int ts = 1;
int.TryParse(data[nameof(TotalShards)], out ts);
TotalShards = ts < 1 ? 1 : ts;
ulong clId = 0;
ulong.TryParse(data[nameof(ClientId)], out clId);
2016-11-15 11:02:23 +00:00
ClientId = clId;
SoundCloudClientId = data[nameof(SoundCloudClientId)];
CarbonKey = data[nameof(CarbonKey)];
var dbSection = data.GetSection("db");
2016-11-15 09:54:56 +00:00
Db = new DBConfig(string.IsNullOrWhiteSpace(dbSection["Type"])
? "sqlite"
: dbSection["Type"],
string.IsNullOrWhiteSpace(dbSection["ConnectionString"])
? "Filename=./data/NadekoBot.db"
: dbSection["ConnectionString"]);
}
catch (Exception ex)
{
2016-11-15 10:06:11 +00:00
_log.Fatal(ex.Message);
_log.Fatal(ex);
throw;
}
2016-08-18 23:28:26 +00:00
}
private class CredentialsModel
{
public ulong ClientId { get; set; } = 123123123;
2016-10-14 06:21:45 +00:00
public string Token { get; set; } = "";
public ulong[] OwnerIds { get; set; } = new ulong[1];
public string LoLApiKey { get; set; } = "";
public string GoogleApiKey { get; set; } = "";
public string MashapeKey { get; set; } = "";
public string OsuApiKey { get; set; } = "";
public string SoundCloudClientId { get; set; } = "";
public string CarbonKey { get; set; } = "";
2016-11-15 09:54:56 +00:00
public DBConfig Db { get; set; } = new DBConfig("sqlite", "Filename=./data/NadekoBot.db");
public int TotalShards { get; set; } = 1;
2017-03-05 15:09:54 +00:00
public string PatreonAccessToken { get; set; } = "";
}
private class DbModel
{
public string Type { get; set; }
public string ConnectionString { get; set; }
2016-08-15 23:38:28 +00:00
}
2016-08-20 11:05:57 +00:00
public bool IsOwner(IUser u) => OwnerIds.Contains(u.Id);
2016-08-15 23:38:28 +00:00
}
}