NadekoBot/NadekoBot/NadekoBot.cs

175 lines
7.5 KiB
C#
Raw Normal View History

2015-12-05 10:27:00 +00:00
using Discord;
using System;
using System.IO;
using Newtonsoft.Json;
using Parse;
using Discord.Commands;
2015-12-05 10:27:00 +00:00
using NadekoBot.Modules;
using Discord.Modules;
2015-12-31 19:40:09 +00:00
using Discord.Audio;
using NadekoBot.Extensions;
using System.Timers;
2015-12-05 10:27:00 +00:00
2016-01-26 20:42:22 +00:00
namespace NadekoBot {
class NadekoBot {
2015-12-05 10:27:00 +00:00
public static DiscordClient client;
public static string botMention;
public static string GoogleAPIKey = null;
public static ulong OwnerID;
2016-01-22 05:35:44 +00:00
public static User OwnerUser = null;
2015-12-30 04:44:36 +00:00
public static string password;
public static string TrelloAppKey;
2016-01-22 05:35:44 +00:00
public static bool ForwardMessages = false;
public static Credentials creds;
2016-02-04 18:02:08 +00:00
public static bool ParseActive = false;
2015-12-05 10:27:00 +00:00
2016-01-26 20:42:22 +00:00
static void Main() {
2015-12-05 10:27:00 +00:00
//load credentials from credentials.json
bool loadTrello = false;
2016-01-26 20:42:22 +00:00
try {
creds = JsonConvert.DeserializeObject<Credentials>(File.ReadAllText("credentials.json"));
botMention = creds.BotMention;
if (string.IsNullOrWhiteSpace(creds.GoogleAPIKey)) {
Console.WriteLine("No google api key found. You will not be able to use music and links won't be shortened.");
2016-01-11 20:37:48 +00:00
} else {
2016-01-21 22:22:55 +00:00
Console.WriteLine("Google API key provided.");
GoogleAPIKey = creds.GoogleAPIKey;
}
if (string.IsNullOrWhiteSpace(creds.TrelloAppKey)) {
Console.WriteLine("No trello appkey found. You will not be able to use trello commands.");
} else {
2016-01-21 22:22:55 +00:00
Console.WriteLine("Trello app key provided.");
TrelloAppKey = creds.TrelloAppKey;
loadTrello = true;
}
if (creds.ForwardMessages != true)
2016-01-22 05:35:44 +00:00
Console.WriteLine("Not forwarding messages.");
else {
ForwardMessages = true;
Console.WriteLine("Forwarding messages.");
}
if (string.IsNullOrWhiteSpace(creds.ParseID) || string.IsNullOrWhiteSpace(creds.ParseKey)) {
2016-01-30 11:08:30 +00:00
Console.WriteLine("Parse key and/or ID not found. Those are mandatory.");
2016-02-04 18:02:08 +00:00
ParseActive = false;
} else ParseActive = true;
if(string.IsNullOrWhiteSpace(creds.OsuApiKey))
Console.WriteLine("No osu API key found. Osu functionality is disabled.");
else
Console.WriteLine("Osu enabled.");
if(string.IsNullOrWhiteSpace(creds.SoundCloudClientID))
Console.WriteLine("No soundcloud Client ID found. Soundcloud streaming is disabled.");
else
Console.WriteLine("SoundCloud streaming enabled.");
2016-01-30 11:08:30 +00:00
//init parse
2016-02-05 14:19:10 +00:00
if (ParseActive)
try {
ParseClient.Initialize(creds.ParseID, creds.ParseKey);
} catch (Exception) { Console.WriteLine("Parse exception. Probably wrong parse credentials."); }
2016-01-22 05:35:44 +00:00
OwnerID = creds.OwnerID;
password = creds.Password;
2016-01-26 20:42:22 +00:00
} catch (Exception ex) {
2016-01-30 11:08:30 +00:00
Console.WriteLine($"Failed to load stuff from credentials.json, RTFM\n{ex.Message}");
2015-12-05 10:27:00 +00:00
Console.ReadKey();
return;
}
//create new discord client
client = new DiscordClient();
2015-12-05 10:27:00 +00:00
//create a command service
2016-01-26 20:42:22 +00:00
var commandService = new CommandService(new CommandServiceConfig {
2015-12-05 10:27:00 +00:00
CommandChar = null,
HelpMode = HelpMode.Disable
});
2016-01-30 11:08:30 +00:00
2016-01-22 05:35:44 +00:00
//reply to personal messages and forward if enabled.
client.MessageReceived += Client_MessageReceived;
2015-12-05 10:27:00 +00:00
//add command service
2015-12-30 04:44:36 +00:00
var commands = client.Services.Add<CommandService>(commandService);
2016-01-26 20:42:22 +00:00
2015-12-05 10:27:00 +00:00
//create module service
2015-12-30 04:44:36 +00:00
var modules = client.Services.Add<ModuleService>(new ModuleService());
2015-12-05 10:27:00 +00:00
2015-12-31 19:40:09 +00:00
//add audio service
var audio = client.Services.Add<AudioService>(new AudioService(new AudioServiceConfig() {
Channels = 2,
2016-01-22 05:35:44 +00:00
EnableEncryption = false,
EnableMultiserver = true,
Bitrate = 128,
2015-12-31 19:40:09 +00:00
}));
2015-12-05 10:27:00 +00:00
//install modules
2016-01-19 05:06:20 +00:00
modules.Add(new Administration(), "Administration", ModuleFilter.None);
modules.Add(new Conversations(), "Conversations", ModuleFilter.None);
modules.Add(new Gambling(), "Gambling", ModuleFilter.None);
modules.Add(new Games(), "Games", ModuleFilter.None);
modules.Add(new Music(), "Music", ModuleFilter.None);
modules.Add(new Searches(), "Searches", ModuleFilter.None);
2016-01-26 20:42:22 +00:00
if (loadTrello)
2016-01-19 05:06:20 +00:00
modules.Add(new Trello(), "Trello", ModuleFilter.None);
2015-12-05 10:27:00 +00:00
//run the bot
2016-01-26 20:42:22 +00:00
client.ExecuteAndWait(async () => {
await client.Connect(creds.Username, creds.Password);
Console.WriteLine("-----------------");
Console.WriteLine(NadekoStats.Instance.GetStats());
Console.WriteLine("-----------------");
2016-01-22 05:35:44 +00:00
foreach (var serv in client.Servers) {
if ((OwnerUser = serv.GetUser(OwnerID)) != null)
return;
}
2016-02-02 12:18:13 +00:00
client.ClientAPI.SendingRequest += (s, e) =>
{
var request = e.Request as Discord.API.Client.Rest.SendMessageRequest;
if (request != null) {
if (string.IsNullOrWhiteSpace(request.Content))
e.Cancel = true;
}
};
2015-12-05 10:27:00 +00:00
});
Console.WriteLine("Exiting...");
Console.ReadKey();
}
static bool repliedRecently = false;
private static async void Client_MessageReceived(object sender, MessageEventArgs e) {
if (e.Server != null || e.User.Id == client.CurrentUser.Id) return;
2016-01-23 17:05:10 +00:00
//just ban this trash AutoModerator
if (e.User.Id == 105309315895693312)
return; // FU
try {
2016-01-23 16:21:50 +00:00
await (await client.GetInvite(e.Message.Text)).Accept();
await e.Send("I got in!");
return;
} catch (Exception) {
if (e.User.Id == 109338686889476096) { //carbonitex invite
await e.Send("Failed to join the server.");
return;
}
}
if (ForwardMessages && OwnerUser != null)
await OwnerUser.SendMessage(e.User + ": ```\n" + e.Message.Text + "\n```");
if (repliedRecently = !repliedRecently) {
await e.Send("**COMMANDS DO NOT WORK IN PERSONAL MESSAGES**\nYou can type `-h` or `-help` or `@MyName help` in any of the channels I am in and I will send you a message with my commands.\n Or you can find out what i do here: https://github.com/Kwoth/NadekoBot\nYou can also just send me an invite link to a server and I will join it.\nIf you don't want me on your server, you can simply ban me ;(\nBot Creator's server: https://discord.gg/0ehQwTK2RBhxEi0X");
Timer t = new Timer();
t.Interval = 2000;
t.Start();
t.Elapsed += (s, ev) => {
repliedRecently = !repliedRecently;
t.Stop();
t.Dispose();
};
}
}
2015-12-05 10:27:00 +00:00
}
}