You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
191 lines
6.7 KiB
191 lines
6.7 KiB
using System;
|
|
using System.Threading.Tasks;
|
|
using Discord;
|
|
using Discord.Commands;
|
|
using Discord.WebSocket;
|
|
using System.IO;
|
|
using Microsoft.Extensions.DependencyInjection;
|
|
using System.Timers;
|
|
using System.Net;
|
|
using System.Net.Http;
|
|
using Kehyeedra3.Services;
|
|
using System.Threading;
|
|
using Discord.Addons.Interactive;
|
|
using dotenv.net;
|
|
using Kehyeedra3.Buttons;
|
|
|
|
namespace Kehyeedra3
|
|
{
|
|
public class Bot
|
|
{
|
|
/// Star Vars
|
|
public static bool IsReady { get; private set; }
|
|
public static DiscordSocketClient _bot;
|
|
//public static System.Timers.Timer Clockboy;
|
|
public static AudioService AudioService;
|
|
public static CommandService _cmds;
|
|
public static IServiceProvider _dmap;
|
|
public static CommandServiceConfig _cmdsconfig;
|
|
public static Random _rnd = new Random();
|
|
public static string PathToUserData;
|
|
public static WebClient WeebClient;
|
|
public static ReminderService RmService;
|
|
//string[] rcsounds = new string[]
|
|
//{
|
|
// Environment.CurrentDirectory + @"Audio\goblin_death.wav",
|
|
// Environment.CurrentDirectory + @"Audio\cough1.wav",
|
|
// Environment.CurrentDirectory + @"Audio\cough2.wav",
|
|
// Environment.CurrentDirectory + @"Audio\wilhelmcough.wav",
|
|
// Environment.CurrentDirectory + @"Audio\h3h3cough1.wav",
|
|
// Environment.CurrentDirectory + @"Audio\h3h3cough2.wav",
|
|
// Environment.CurrentDirectory + @"Audio\h3h3cough3.wav",
|
|
// Environment.CurrentDirectory + @"Audio\h3h3cough4.wav",
|
|
// Environment.CurrentDirectory + @"Audio\h3h3cough5.wav",
|
|
// Environment.CurrentDirectory + @"Audio\sodocough.mp3",
|
|
// Environment.CurrentDirectory + @"Audio\dbzscream.wav",
|
|
// Environment.CurrentDirectory + @"Audio\healthycough1.wav",
|
|
// Environment.CurrentDirectory + @"Audio\poohcough1.wav",
|
|
// Environment.CurrentDirectory + @"Audio\jontronooh.wav",
|
|
// Environment.CurrentDirectory + @"Audio\deep.wav"
|
|
//};
|
|
|
|
public async Task CreateBot()
|
|
{
|
|
DotEnv.Config(filePath: Path.Combine(AppContext.BaseDirectory, ".env"));
|
|
var Config = Configuration.Load();
|
|
|
|
//Clockboy = new System.Timers.Timer();
|
|
|
|
WeebClient = new WebClient();
|
|
|
|
_bot = new DiscordSocketClient(new DiscordSocketConfig()
|
|
{
|
|
LogLevel = LogSeverity.Verbose,
|
|
DefaultRetryMode = RetryMode.AlwaysRetry,
|
|
HandlerTimeout = 10000,
|
|
ConnectionTimeout = 10000,
|
|
GatewayIntents = GatewayIntents.AllUnprivileged | GatewayIntents.GuildMembers | GatewayIntents.GuildMessages
|
|
}) ;
|
|
|
|
AudioService = new AudioService();
|
|
|
|
_cmds = new CommandService();
|
|
|
|
_cmdsconfig = new CommandServiceConfig
|
|
{
|
|
CaseSensitiveCommands = false
|
|
};
|
|
|
|
_dmap = new ServiceCollection()
|
|
.AddSingleton(_bot)
|
|
.AddSingleton(_cmds)
|
|
.AddSingleton(AudioService)
|
|
.AddSingleton(new InteractiveService(_bot))
|
|
.BuildServiceProvider();
|
|
|
|
await CommandHandler.InstallCommands();
|
|
|
|
EventHandlers.InstallEventHandlers();
|
|
|
|
//Clockboy.Elapsed += Clockboy_Elapsed;
|
|
//Clockboy.Interval = SRandom.Next(3600000, 14400000);
|
|
//1200000 = 20 minutes
|
|
|
|
RmService = new ReminderService();
|
|
|
|
new Thread(
|
|
async () =>
|
|
{
|
|
Thread.CurrentThread.IsBackground = true;
|
|
await RmService.Tick().ConfigureAwait(false);
|
|
}
|
|
).Start();
|
|
}
|
|
|
|
//private async void Clockboy_Elapsed(object sender, ElapsedEventArgs e)
|
|
//{
|
|
// foreach(var Guild in _bot.Guilds)
|
|
// {
|
|
// foreach(var VoiceChannel in Guild.VoiceChannels)
|
|
// {
|
|
// if (VoiceChannel.Users.Count > 1)
|
|
// {
|
|
// try
|
|
// {
|
|
// await AudioService.JoinAudio(Guild, VoiceChannel);
|
|
// var file = rcsounds[_rnd.Next(rcsounds.Length - 1)];
|
|
|
|
// Console.WriteLine("File exists? " + File.Exists(file));
|
|
|
|
// Console.WriteLine("Playing file: " + file);
|
|
|
|
// await AudioService.SendAudioAsync(Guild, null, file);
|
|
// }
|
|
// catch (Exception ex)
|
|
// {
|
|
// Console.WriteLine(ex);
|
|
// }
|
|
// finally
|
|
// {
|
|
// await AudioService.LeaveAudio(Guild);
|
|
// }
|
|
// }
|
|
// }
|
|
// }
|
|
// Clockboy.Start();
|
|
//}
|
|
|
|
public async Task StartBot()
|
|
{
|
|
try
|
|
{
|
|
_bot.Ready += _bot_Ready;
|
|
ButtonService.RegisterCumButtons(_bot); // button testing
|
|
ButtonService.RegisterFarmButtons(_bot);
|
|
await _bot.LoginAsync(TokenType.Bot, Configuration.Load().Token);
|
|
await _bot.StartAsync();
|
|
//Clockboy.Start();
|
|
//new Thread(async x =>
|
|
//{
|
|
// await Bot.RmService.Tick();
|
|
//}).Start();
|
|
await Task.Delay(-1);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Console.WriteLine(DateTime.Now + " Error, reason: " + ex.ToString());
|
|
}
|
|
finally
|
|
{
|
|
await _bot.StopAsync();
|
|
await _bot.LogoutAsync();
|
|
Console.ReadLine();
|
|
Environment.Exit(0);
|
|
}
|
|
}
|
|
|
|
private async Task _bot_Ready()
|
|
{
|
|
IsReady = true;
|
|
}
|
|
|
|
public static void EnsureConfigExists()
|
|
{
|
|
string storage = Environment.CurrentDirectory;
|
|
if (!Directory.Exists(Path.Combine(storage, "storage")))
|
|
Directory.CreateDirectory(Path.Combine(storage, "storage"));
|
|
|
|
string configfile = Path.Combine(storage, "storage/configuration.json");
|
|
|
|
if (!File.Exists(configfile))
|
|
{
|
|
var config = new Configuration();
|
|
config.Save();
|
|
Console.WriteLine($"The configuration file has been created at {configfile}.\n\nEdit the file with your details and restart");
|
|
Console.ReadLine();
|
|
Environment.Exit(0);
|
|
}
|
|
}
|
|
|
|
}
|
|
} |