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 ;
2016-08-20 20:35:27 +00:00
using NLog ;
2016-11-15 08:42:06 +00:00
using Microsoft.Extensions.Configuration ;
2016-08-15 23:38:28 +00:00
namespace NadekoBot.Services.Impl
{
public class BotCredentials : IBotCredentials
{
2016-08-20 20:35:27 +00:00
private Logger _log ;
2016-10-09 02:26:14 +00:00
public ulong ClientId { get ; }
public ulong BotId { 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-16 12:11:45 +00:00
2016-08-18 23:28:26 +00:00
public string Token { get ; }
2016-08-20 11:05:57 +00:00
public ulong [ ] OwnerIds { get ; }
2016-08-18 23:28:26 +00:00
2016-08-20 17:13:29 +00:00
public string LoLApiKey { get ; }
2016-08-21 22:37:39 +00:00
public string OsuApiKey { get ; }
2017-02-10 14:26:06 +00:00
private string _soundcloudClientId ;
public string SoundCloudClientId {
get {
return string . IsNullOrWhiteSpace ( _soundcloudClientId )
? "d0bd7768e3a1a2d15430f0dccb871117"
: _soundcloudClientId ;
}
set {
_soundcloudClientId = value ;
}
}
2016-08-20 17:13:29 +00:00
2016-11-15 09:54:56 +00:00
public DBConfig Db { get ; }
2016-10-01 03:49:05 +00:00
public int TotalShards { get ; }
2016-10-25 11:06:37 +00:00
public string CarbonKey { get ; }
2016-08-24 01:32:48 +00:00
2016-11-15 08:42:06 +00:00
public string credsFileName { get ; } = Path . Combine ( Directory . GetCurrentDirectory ( ) , "credentials.json" ) ;
2016-08-18 23:28:26 +00:00
public BotCredentials ( )
{
2016-08-20 20:35:27 +00:00
_log = LogManager . GetCurrentClassLogger ( ) ;
2016-10-14 19:54:26 +00:00
try { File . WriteAllText ( "./credentials_example.json" , JsonConvert . SerializeObject ( new CredentialsModel ( ) , Formatting . Indented ) ) ; } catch { }
2016-11-15 08:42:06 +00:00
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 ")}" ) ;
2016-11-15 08:42:06 +00:00
try
2016-08-20 20:35:27 +00:00
{
2016-11-15 08:42:06 +00:00
var configBuilder = new ConfigurationBuilder ( ) ;
2016-11-15 10:06:11 +00:00
configBuilder . AddJsonFile ( credsFileName , true )
2016-11-15 08:55:10 +00:00
. AddEnvironmentVariables ( "NadekoBot_" ) ;
2016-11-15 08:42:06 +00:00
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 ) ) . ToArray ( ) ;
LoLApiKey = data [ nameof ( LoLApiKey ) ] ;
GoogleApiKey = data [ nameof ( GoogleApiKey ) ] ;
MashapeKey = data [ nameof ( MashapeKey ) ] ;
OsuApiKey = data [ nameof ( OsuApiKey ) ] ;
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 ;
2016-11-15 08:42:06 +00:00
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" ] )
2016-11-15 08:42:06 +00:00
? "sqlite"
: dbSection [ "Type" ] ,
string . IsNullOrWhiteSpace ( dbSection [ "ConnectionString" ] )
? "Filename=./data/NadekoBot.db"
: dbSection [ "ConnectionString" ] ) ;
2016-08-20 20:35:27 +00:00
}
2016-11-15 08:42:06 +00:00
catch ( Exception ex )
2016-10-08 02:25:12 +00:00
{
2016-11-15 10:06:11 +00:00
_log . Fatal ( ex . Message ) ;
_log . Fatal ( ex ) ;
2016-11-15 08:42:06 +00:00
throw ;
2016-10-08 02:25:12 +00:00
}
2016-10-14 19:54:26 +00:00
2016-08-18 23:28:26 +00:00
}
2016-08-21 22:37:39 +00:00
private class CredentialsModel
{
2016-10-14 19:54:26 +00:00
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 ] ;
2016-10-14 19:54:26 +00:00
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 ; } = "" ;
2016-10-25 11:06:37 +00:00
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" ) ;
2016-10-01 03:49:05 +00:00
public int TotalShards { get ; set ; } = 1 ;
2016-08-24 01:32:48 +00:00
}
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
}
}