diff --git a/Program.cs b/Program.cs deleted file mode 100644 index c9cd808..0000000 --- a/Program.cs +++ /dev/null @@ -1,1314 +0,0 @@ -using Microsoft.Extensions.Configuration; -using Newtonsoft.Json; -using Newtonsoft.Json.Linq; -using Optionals; -using RevoltSharp; -using RevoltSharp.Commands; -using System.Diagnostics; -using System.Globalization; -using System.Reflection; -using System.Text; - -class Program -{ - public static RevoltClient Client; - - public static async Task Main(string[] args) - { - await StartAsync(); - } - - public static async Task StartAsync() - { - IConfiguration Configuration = new ConfigurationBuilder() - .SetBasePath(AppDomain.CurrentDomain.BaseDirectory) - .AddJsonFile("config.json") - .Build(); - - string token = Configuration["RevoltConfig:Token"]; - string apiUrl = Configuration["RevoltConfig:ApiUrl"]; - - Client = new RevoltClient(token, ClientMode.WebSocket, new ClientConfig - { - ApiUrl = apiUrl - }); - - await Client.StartAsync(); - - // Modify user status - await Client.CurrentUser.ModifySelfAsync( - statusText: new Option("?help."), - statusType: new Option(UserStatusType.Focus) - ); - - CommandHandler commandHandler = new CommandHandler(Client); - commandHandler.LoadCommands(); - - await Task.Delay(-1); - } -} -// CommandHandler -public class CommandHandler -{ - private readonly RevoltClient _client; - private readonly CommandService _service = new CommandService(); - - // Here you can change the prefix. Default is "?" - public const string Prefix = "?"; - - public CommandHandler(RevoltClient client) - { - _client = client; - _client.OnMessageRecieved += Client_OnMessageReceived; - _service.OnCommandExecuted += Service_OnCommandExecuted; - } - - public async Task LoadCommands() - { - // Load commands from the entry assembly - await _service.AddModulesAsync(Assembly.GetEntryAssembly(), null); - } - - private void Client_OnMessageReceived(Message msg) - { - if (msg is not UserMessage userMessage || userMessage.Author.IsBot) - return; - - int argPos = 0; - if (!(userMessage.HasCharPrefix('?', ref argPos) || - userMessage.HasMentionPrefix(_client.CurrentUser, ref argPos))) - return; - - CommandContext context = new CommandContext(_client, userMessage); - _service.ExecuteAsync(context, argPos, null); - } - - private void Service_OnCommandExecuted(Optional commandInfo, CommandContext context, IResult result) - { - if (result.IsSuccess) - { - Console.WriteLine("Success command: " + commandInfo.Value.Name); - } - else - { - if (commandInfo.HasValue) - { - context.Channel.SendMessageAsync("Error: " + result.ErrorReason); - } - } - } - - // Only god and the developer of RevoltSharp know what's going on here. -} -public class Commands : ModuleBase -{ - // Help commands: - - // Help command. - [Command("help")] - public async Task Help() - { - var helpMessage = - "#### List of available commands:\n\n" + - "#### Practical Commands: \n" + - "`?video` - Sends a list of all aviable videos\n" + - "`?help` - Displays this command.\n" + - "`?credits` - Displays bot's credit.\n" + - "`?test` - Simple test command you say test bot will response.\n" + - "`?invite` - Send a link to invite this bot to your server! \n" + - "`?calculate` {num} {+, - , / , * } {num} - A very simple calculator. \n" + - "`?mod-help` - Displays a list of available mod commands. \n " + - "`?ping` - tests the bot ping. \n" + - "`?nsfw-help` - Sends a list of all available nsfw commands. \n " + - "#### Fun Commands: \n" + - "`?dice` - Rolls a random number between 1 and 6.\n" + - "`?say` - says what the user told it to say!. \n" + - "`?dm` - Just DMs the user Hi :3. \n" + - "`?rps {paper,rock,scissors}` - Simple Rock paper scissors game.\n" + - "`?dogfact` - Gives a random dogfact using the Dogfact API!. \n" + - "`?catfact` - Gives a random Catfact using cat fact API (Currently somewhat bugged with the []). \n" + - "`?joke` - Very simple command just gives a joke using the Joke API. \n " + - "`?coinflip` - a Command so easy a child could do it. \n " + - "`?fact` - Gives a random useless fact. \n " + - "`?urban + {word}` - uses the urban dictionary to search for the word. \n" + - "`?shitpost` - Sends a random shitpost. (The shitpost API is broken.) \n " + - "`?cat` - Cat :3 \n " + - "`?neko` - Neko command \n " + - "`?advice` - Gives the user a life Advice \n " + - "`?quote` - Gives a random quote using yet another API. \n " + - "`?gif {term}` - Allows the user to search for gifs using giphy (Beta) \n" + - "`?pun` - Gives user a simple pun. \n" + - "`?avatar` - Sends the user Avatar (Beta) \n " + - "#### This bot is far from ready so please don't be too harash on it :01H4RPMABMK4GPXH4QBKAKVJF9:"; - await ReplyAsync(helpMessage); - } - // End of the Help command. - - // Begning of Video command - [Command("video")] - public async Task Video() - { - var video = "Here is a list of all aviable videos! \n" + - "`?ihnk` - Sends a I have no knwoledge about any of this video. \n" + - //"`?s` - Sends . \n" + - //"`?s` - Sends . \n" + - //"`?s` - Sends . \n" + - "`?scary` - Sends the oh oh scary oh oh shiver me timbers video \n"; - await ReplyAsync(video); - } - // End of Video command - - // Mod Help command - [Command("mod-help")] - public async Task ModHelp() - { - string helpMessage = - "## List Of Available mod commands. \n" + - "`?kick {Mention}` - Kicks the user \n" + - "`?ban {mentions}` - Bans the User \n" + - "`?unban {mention}` - Unbans the user. \n" + - "### I am Currently working on adding more usefull command so be patient! \n"; - - await ReplyAsync(helpMessage); - } - // End of the mod-Help command - - // NSFW Help command: - [Command("nsfw-help")] - public async Task nsfwhelp() - { - await ReplyAsync("### Here are all the available NSFW commands: \n `?r34 {search}` - Searches rule34.xxx \n `?hentai` - Grabs a random hentai image \n `?boobs` - Grabs a random boobs image \n `?hboobs` - Grbs a random hboobs image simple."); - } - // End of the NSFW-HELP command - - // End of the help commands - - // Dm Commands (commands that dm the user in some way.): - - // Invite Command - Sends a invite in the DM - [Command("invite")] - public async Task Invite() - { - DMChannel DM = await Context.User.GetDMChannelAsync(); - - if (DM == null) - { - await ReplyAsync("Could not open DM :("); - return; - } - - await DM.SendMessageAsync( - "## Invite me! \n" + - "If you're on app.haydar.dev, use this link: \n" + - "https://app.haydar.dev/bot/01HA55V3K8B26T87TBKMZMWRKJ \n" + - "But if you're on nightly.haydar.dev, use this link: \n" + - "https://nightly.haydar.dev/bot/01HA55V3K8B26T87TBKMZMWRKJ \n" + - "If you find any bugs, report them to the bot's creator. Thank you and bye!" - ); - } - // End of the Invite command - - // The Debug command. - [Command("debug")] - public async Task Debug() - { - DMChannel DM = await Context.User.GetDMChannelAsync(); - - if (DM == null) - { - await ReplyAsync("Your code is so messed up that even DMs are broken :skull: wow"); - return; - } - - try - { - // Sends a messege in the server - await ReplyAsync("You should recive DMs now."); - // Send initial message - await DM.SendMessageAsync("DMs work if you received this message."); - await DM.SendMessageAsync("-----"); - await DM.SendMessageAsync("You should receive the ping of the bot and a shitpost"); - - // Ping part - var stopwatch = new Stopwatch(); - stopwatch.Start(); - await DM.SendMessageAsync("-----"); - stopwatch.Stop(); - var latency = stopwatch.ElapsedMilliseconds; - await DM.SendMessageAsync($"The ping is: {latency}ms"); - await DM.SendMessageAsync("-----"); - - // Shitpost part - await SendRandomMeme(DM); - await DM.SendMessageAsync("If you saw a Shitpost and the ping of the bot everything should work correctly."); - } - catch (Exception ex) - { - await DM.SendMessageAsync($"An error occurred: {ex.Message}"); - } - } - - // The Shitpost Part. - private async Task SendRandomMeme(DMChannel DM) - { - const string apiUrl = "https://api.thedailyshitpost.net/random"; - - using (HttpClient client = new HttpClient()) - { - try - { - HttpResponseMessage response = await client.GetAsync(apiUrl); - - if (response.IsSuccessStatusCode) - { - string memeJson = await response.Content.ReadAsStringAsync(); - dynamic memeObject = Newtonsoft.Json.JsonConvert.DeserializeObject(memeJson); - - string title = memeObject.title; - string imageUrl = memeObject.url; - - await DM.SendMessageAsync($"{imageUrl}"); - } - else - { - await DM.SendMessageAsync("Sorry, The Shitpost API is having issues again."); - } - } - catch (Exception ex) - { - await DM.SendMessageAsync($"An error occurred while fetching a meme: {ex.Message}"); - } - } - } - - // End of the Debug command. - - // End of DM commands. - - // Debug commands. - - // Very Simple test Command - [Command("test")] - public async Task Test() - { - await ReplyAsync("Ig it works :tm:"); - } - - // Ping command. - [Command("ping")] - public async Task PingCommand() - { - var stopwatch = new Stopwatch(); - stopwatch.Start(); - - await ReplyAsync("Ping..."); - - stopwatch.Stop(); - var latency = stopwatch.ElapsedMilliseconds; - - await ReplyAsync($"Pong! (Latency: {latency}ms)"); - } - - // End of the Debug commands. - - // Fun commands: - - // L Command - [Command("l")] - public async Task LCommand() - { - await ReplyAsync("L"); - } - // End of L command - - // Gif command - [Command("gif")] - public async Task GifCommand([Remainder] string keyword) - { - using (HttpClient client = new HttpClient()) - { - IConfiguration Configuration = new ConfigurationBuilder() - .SetBasePath(AppDomain.CurrentDomain.BaseDirectory) - .AddJsonFile("giphy.json") - .Build(); - - string apiKey = Configuration["GiphyApiKey"]; - string apiUrl = $"https://api.giphy.com/v1/gifs/search?api_key={apiKey}&q={keyword}&limit=1"; - - HttpResponseMessage response = await client.GetAsync(apiUrl); - - if (response.IsSuccessStatusCode) - { - string gifJson = await response.Content.ReadAsStringAsync(); - JObject gifObject = JObject.Parse(gifJson); - - string gifUrl = gifObject["data"][0]["images"]["original"]["url"]?.ToString(); - - if (!string.IsNullOrEmpty(gifUrl)) - { - await Context.Channel.SendMessageAsync(gifUrl); - } - else - { - await Context.Channel.SendMessageAsync("Sorry, I couldn't find a GIF for that keyword."); - } - } - else - { - await Context.Channel.SendMessageAsync("Sorry, I couldn't fetch a GIF at the moment. Please try again later."); - } - } - } - // End of the GIF commands - - // A Rock paper Scissors command. - [Command("rps")] - public async Task Rps([Remainder] string userChoice = null) - { - string[] options = { "rock", "paper", "scissors" }; - Random random = new Random(); - string botChoice = options[random.Next(options.Length)]; - - if (userChoice == null) - { - await ReplyAsync("You need to provide a choice! Please choose from: rock, paper, scissors"); - return; - } - - userChoice = userChoice.ToLower(); - - if (options.Contains(userChoice)) - { - if (userChoice == botChoice) - { - await ReplyAsync($"It's a tie! I chose {botChoice} too."); - } - else if ((userChoice == "rock" && botChoice == "scissors") || - (userChoice == "paper" && botChoice == "rock") || - (userChoice == "scissors" && botChoice == "paper")) - { - await ReplyAsync($"You win! I chose {botChoice}."); - } - else - { - await ReplyAsync($"You lose! I chose {botChoice}."); - } - } - else - { - await ReplyAsync($"Invalid choice. Please choose from: {string.Join(", ", options)}"); - } - } - // End of the Rock paper scicors command - - // Dice command rolls a random number between 1 - 6 (Perfect for bets :troll") - [Command("dice")] - public async Task Dice() - { - var random = new Random(); - var result = random.Next(1, 7); - await ReplyAsync($"You rolled a {result}!"); - } - // End of the Dice command - - // Pick Command - [Command("roll")] - public async Task Roll([Remainder] string randnum = null) - { - if (randnum == null) - { - await ReplyAsync("Please specify a number to roll"); - } - else if (int.TryParse(randnum, out int maxNumber) && maxNumber > 0) - { - try - { - var random = new Random(); - var result = random.Next(1, maxNumber + 1); - await ReplyAsync($"You rolled a {result}!"); - } - catch (Exception ex) - { - await ReplyAsync("An error occurred while rolling the dice."); - } - } - else - { - await ReplyAsync("Please pick a valid number."); - } - } - // End of the pick command - - // Very simple say command. - private List blacklist = new List -{ - "nigga", "nigger", "n i g g a", "fuck", "shit", "piss", - "cunt", "dick", "fag", "faggot", "kys", "ky$", -}; - - [Command("say")] - public async Task Say([Remainder] string text) - { - var user = Context.User.Username; - - foreach (var word in blacklist) - { - if (text.ToLower().Contains(word)) - { - text = text.Replace(word, new string('*', word.Length)); - } - } - - await ReplyAsync($"{user} said: {text}"); - } - // End of the Say command - - // The coinflip command. - [Command("coinflip")] - public async Task Coinflip() - { - Random random = new Random(); - int result = random.Next(2); - - string side = (result == 0) ? "Heads" : "Tails"; - - await ReplyAsync($"It's {side}!"); - } - // End of the coinflip command. - - // End of the Fun commands. - - // Api commands - - // Advice command. - [Command("advice")] - public async Task Advice() - { - using (HttpClient client = new HttpClient()) - { - try - { - string apiUrl = "https://api.adviceslip.com/advice"; - HttpResponseMessage response = await client.GetAsync(apiUrl); - - if (response.IsSuccessStatusCode) - { - string adviceJson = await response.Content.ReadAsStringAsync(); - JObject adviceObject = JObject.Parse(adviceJson); - - string advice = adviceObject["slip"]?["advice"]?.ToString(); - - if (!string.IsNullOrEmpty(advice)) - { - await ReplyAsync($"Advice: {advice}"); - } - else - { - await ReplyAsync("Sorry, I couldn't fetch advice at the moment. Please try again later."); - } - } - else - { - await ReplyAsync("Sorry, I couldn't fetch advice at the moment. Please try again later."); - } - } - catch (Exception ex) - { - await ReplyAsync($"An error occurred: {ex.Message}"); - } - } - } - // End of the Advice command - - // Dog fact command very simple very fun - [Command("dogfact")] - public async Task DogFact() - { - using (HttpClient client = new HttpClient()) - { - try - { - string apiUrl = "http://dog-api.kinduff.com/api/facts"; - HttpResponseMessage response = await client.GetAsync(apiUrl); - - if (response.IsSuccessStatusCode) - { - string factsJson = await response.Content.ReadAsStringAsync(); - JObject factsObject = JObject.Parse(factsJson); - - if (factsObject["facts"] is JArray factsArray && factsArray.Count > 0) - { - Random random = new Random(); - int randomIndex = random.Next(factsArray.Count); - string randomFact = factsArray[randomIndex].ToString(); - - await ReplyAsync(randomFact); - } - else - { - await ReplyAsync("Sorry, I couldn't fetch a dog fact at the moment. Please try again later."); - } - } - else - { - await ReplyAsync("Sorry, I couldn't fetch a dog fact at the moment. Please try again later."); - } - } - catch (Exception ex) - { - await ReplyAsync($"An error occurred: {ex.Message}"); - } - } - } - // End of the Dogfact command - - // Cat fact command very simple very fun - [Command("catfact")] - public async Task CatFact() - { - using (HttpClient client = new HttpClient()) - { - try - { - string apiUrl = "http://meowfacts.herokuapp.com/"; - HttpResponseMessage response = await client.GetAsync(apiUrl); - - if (response.IsSuccessStatusCode) - { - string factJson = await response.Content.ReadAsStringAsync(); - JObject factObject = JObject.Parse(factJson); - - if (factObject["data"] is JArray dataArray && dataArray.Count > 0) - { - string fact = dataArray[0].ToString(); - await ReplyAsync(fact); - } - else - { - await ReplyAsync("Sorry, I couldn't fetch a cat fact at the moment. Please try again later."); - } - } - else - { - await ReplyAsync("Sorry, I couldn't fetch a cat fact at the moment. Please try again later."); - } - } - catch (Exception ex) - { - await ReplyAsync($"An error occurred: {ex.Message}"); - } - } - } - - // End of the Cat fact command - - // Pun command - [Command("pun")] - public async Task Pun() - { - using (HttpClient client = new HttpClient()) - { - try - { - string apiUrl = "https://v2.jokeapi.dev/joke/Pun"; - HttpResponseMessage response = await client.GetAsync(apiUrl); - - if (response.IsSuccessStatusCode) - { - string jokeJson = await response.Content.ReadAsStringAsync(); - JObject jokeObject = JObject.Parse(jokeJson); - - string setup = jokeObject["setup"]?.ToString(); - string punchline = jokeObject["delivery"]?.ToString(); - - if (!string.IsNullOrEmpty(setup) && !string.IsNullOrEmpty(punchline)) - { - await ReplyAsync($"**{setup}**\n*{punchline}*"); - } - else - { - await ReplyAsync("Sorry, I couldn't fetch a pun at the moment. Please try again later."); - } - } - else - { - await ReplyAsync("Sorry, I couldn't fetch a pun at the moment. Please try again later."); - } - } - catch (Exception ex) - { - await ReplyAsync($"An error occurred: {ex.Message}"); - } - } - } - // End of the Pun command - - // Joke command - [Command("joke")] - public async Task Joke() - { - using (HttpClient client = new HttpClient()) - { - try - { - string apiUrl = "https://v2.jokeapi.dev/joke/Any?type=twopart"; - HttpResponseMessage response = await client.GetAsync(apiUrl); - - if (response.IsSuccessStatusCode) - { - string jokeJson = await response.Content.ReadAsStringAsync(); - JObject jokeObject = JObject.Parse(jokeJson); - - string setup = jokeObject["setup"]?.ToString(); - string punchline = jokeObject["delivery"]?.ToString(); - - if (!string.IsNullOrEmpty(setup) && !string.IsNullOrEmpty(punchline)) - { - await ReplyAsync($"{setup}\n{punchline}"); - } - else - { - await ReplyAsync("Sorry, I couldn't fetch a joke at the moment. Please try again later."); - } - } - else - { - await ReplyAsync("Sorry, I couldn't fetch a joke at the moment. Please try again later."); - } - } - catch (Exception ex) - { - await ReplyAsync($"An error occurred: {ex.Message}"); - } - } - } - // End of the Joke command - - // Simple quote command - [Command("quote")] - public async Task Quote() - { - using (HttpClient client = new HttpClient()) - { - try - { - string apiUrl = "https://api.quotable.io/random"; - HttpResponseMessage response = await client.GetAsync(apiUrl); - - if (response.IsSuccessStatusCode) - { - string quoteJson = await response.Content.ReadAsStringAsync(); - dynamic quoteObject = Newtonsoft.Json.JsonConvert.DeserializeObject(quoteJson); - - string content = quoteObject.content; - string author = quoteObject.author; - - await ReplyAsync($"\"{content}\" - {author}"); - } - else - { - await ReplyAsync("Sorry, I couldn't fetch a quote at the moment. Please try again later."); - } - } - catch (Exception ex) - { - await ReplyAsync($"An error occurred: {ex.Message}"); - } - } - } - // End of the qoute command - - // Fact command - [Command("fact")] - public async Task Fact() - { - using (HttpClient client = new HttpClient()) - { - try - { - string apiUrl = "https://uselessfacts.jsph.pl/random.json?language=en"; - HttpResponseMessage response = await client.GetAsync(apiUrl); - - if (response.IsSuccessStatusCode) - { - string factJson = await response.Content.ReadAsStringAsync(); - dynamic factObject = Newtonsoft.Json.JsonConvert.DeserializeObject(factJson); - - string fact = factObject.text; - await ReplyAsync(fact); - } - else - { - await ReplyAsync("Sorry, I couldn't fetch a fact at the moment. Please try again later."); - } - } - catch (Exception ex) - { - await ReplyAsync($"An error occurred: {ex.Message}"); - } - } - } - // End of the fact command - - // Urban command - [Command("urban")] - public async Task Urban([Remainder] string term) - { - using (HttpClient client = new HttpClient()) - { - string apiUrl = $"https://api.urbandictionary.com/v0/define?term={term}"; - HttpResponseMessage response = await client.GetAsync(apiUrl); - - if (response.IsSuccessStatusCode) - { - string urbanJson = await response.Content.ReadAsStringAsync(); - dynamic urbanObject = Newtonsoft.Json.JsonConvert.DeserializeObject(urbanJson); - - if (urbanObject.list.Count > 0) - { - int maxDefinitions = 3; - - for (int i = 0; i < Math.Min(maxDefinitions, urbanObject.list.Count); i++) - { - string definition = urbanObject.list[i].definition; - string formattedMessage = $"```\nTerm: {term}\nDefinition {i + 1}:\n{definition}\n```"; - await ReplyAsync(formattedMessage); - } - } - else - { - await ReplyAsync("Sorry, I couldn't find a definition for that term."); - } - } - else - { - await ReplyAsync("Sorry, I couldn't fetch a definition at the moment. Please try again later."); - } - } - } - // End of the Urban command - - // Shitpost command - [Command("shitpost")] - public async Task Shitpost() - { - using (HttpClient client = new HttpClient()) - { - try - { - string apiUrl = "https://api.thedailyshitpost.net/random"; - HttpResponseMessage response = await client.GetAsync(apiUrl); - - if (response.IsSuccessStatusCode) - { - string memeJson = await response.Content.ReadAsStringAsync(); - dynamic memeObject = Newtonsoft.Json.JsonConvert.DeserializeObject(memeJson); - - string title = memeObject.title; - string imageUrl = memeObject.url; - - await ReplyAsync(imageUrl); - } - else - { - await ReplyAsync("Sorry, I couldn't fetch a meme at the moment. Please try again later."); - } - } - catch (Exception ex) - { - await ReplyAsync($"An error occurred: {ex.Message}"); - } - } - } - // End of the shitpost command - - // Cat command. - [Command("cat")] - public async Task Cat() - { - using (HttpClient client = new HttpClient()) - { - try - { - string apiUrl = "https://api.thecatapi.com/v1/images/search"; - HttpResponseMessage response = await client.GetAsync(apiUrl); - - if (response.IsSuccessStatusCode) - { - string catJson = await response.Content.ReadAsStringAsync(); - dynamic catObject = Newtonsoft.Json.JsonConvert.DeserializeObject(catJson); - - string imageUrl = catObject[0]?.url; - - if (!string.IsNullOrEmpty(imageUrl)) - { - await ReplyAsync(imageUrl); - } - else - { - await ReplyAsync("Sorry, I couldn't fetch a cat image at the moment. Please try again later."); - } - } - else - { - await ReplyAsync("Sorry, I couldn't fetch a cat image at the moment. Please try again later."); - } - } - catch (Exception ex) - { - await ReplyAsync($"An error occurred: {ex.Message}"); - } - } - } - // End of the cat command - - // Neko command - [Command("neko")] - public async Task Neko() - { - try - { - using (HttpClient client = new HttpClient()) - { - string apiUrl = "https://nekos.life/api/v2/img/neko"; - HttpResponseMessage response = await client.GetAsync(apiUrl); - - if (response.IsSuccessStatusCode) - { - string nekoJson = await response.Content.ReadAsStringAsync(); - JObject nekoObject = JObject.Parse(nekoJson); - - string imageUrl = nekoObject["url"]?.ToString(); - - if (!string.IsNullOrEmpty(imageUrl)) - { - await ReplyAsync(imageUrl); - } - else - { - await ReplyAsync("Sorry, I couldn't fetch a neko at the moment. Please try again later."); - } - } - else - { - await ReplyAsync("Sorry, I couldn't fetch a neko at the moment. Please try again later."); - } - } - } - catch (Exception ex) - { - Console.WriteLine($"Error in Neko command: {ex.Message}"); - await ReplyAsync("An error occurred while fetching the neko. Please try again later."); - } - } - // End of neko command - - // The End of the API commands. - - // Misc Commands: - - // Give the credits of the bot - [Command("credits")] - public async Task Credits() - { - await ReplyAsync("This bot is made using revoltsharp by Purplebored known as Kniaż Jarema on nightly"); - } - // End of the Credits command - - // Avatar command - [Command("avatar")] - public async Task AvatarCommand() - { - var user = Context.Message.Author.GetAvatarUrl(); - var avatarUrl = $"{user}"; - - await Context.Channel.SendMessageAsync($"Your avatar: {avatarUrl}"); - } - // End of the Avatar command - - // Calculate command - [Command("calculate")] - public async Task Calculate(string num1String, string operation, string num2String) - { - if (!double.TryParse(num1String, NumberStyles.Any, CultureInfo.InvariantCulture, out double num1) || - !double.TryParse(num2String, NumberStyles.Any, CultureInfo.InvariantCulture, out double num2)) - { - await ReplyAsync("Error: Invalid input. Please provide valid numbers."); - return; - } - - double result = 0; - - switch (operation) - { - case "+": - result = num1 + num2; - break; - case "-": - result = num1 - num2; - break; - case "*": - result = num1 * num2; - break; - case "/": - if (num2 != 0) // Check for division by zero - { - result = num1 / num2; - } - else - { - await ReplyAsync("Error: Division by zero is not allowed."); - return; - } - - break; - default: - await ReplyAsync("Invalid operation. Please use +, -, *, or /."); - return; - } - - await ReplyAsync($"Result: {result}"); - } - // End of the Calculat command. - - // End of the misc commands - - // Mod Commands - - // Stuff needed to make these commands work. - private string RemoveMention(string mention) - { - return mention.Replace("<@", "").Replace(">", ""); - } - - private RevoltClient Client; - // End of styff nedded to make those command work. - - // Stats command - [Command("stats")] - public async Task GetStats() - { - try - { - IReadOnlyCollection result1 = await Context.Server.GetMembersAsync(); - int num2 = result1.Count; - IReadOnlyCollection result2 = await Context.Server.GetMembersAsync(true); - int num3 = result2.Count; - await ReplyAsync($"### Stats:\n\n### Member count: {num2}\n### Online member count: {num3}\n"); - } - catch (Exception ex) - { - await ReplyAsync($"An error occurred: {ex.Message}"); - } - } - // End of the stats command - - // Ban Command - [Command("ban")] - public async Task BanUser([Remainder] string args) - { - try - { - string userId = RemoveMention(args); - await Context.Server.BanMemberAsync(userId, "Banned via command."); - await ReplyAsync("### Ban\nwhomp whomp."); - } - catch - { - await ReplyAsync("### ERROR\nInvalid Mention or Bot Permissions."); - } - } - // End of the Ban command - - // Unban Command - [Command("unban")] - public async Task UnbanUser([Remainder] string args) - { - try - { - string userId = RemoveMention(args); - await Context.Server.UnBanMemberAsync(userId); - await ReplyAsync("### Unbanned\nVery sadly a mod had a change of heart."); - } - catch - { - await ReplyAsync("### ERROR\nInvalid Mention or Bot Permissions."); - } - } - // End of the UnBan command - - // Kick Command - [Command("kick")] - public async Task KickUser([Remainder] string args) - { - try - { - string userId = RemoveMention(args); - await Context.Server.KickMemberAsync(userId); - await ReplyAsync("### Kicked\nAnd he's gone."); - } - catch - { - await ReplyAsync("### ERROR\nInvalid Mention or Bot Permissions."); - } - } - // End of the Kick command - - // End of mod commands - - // NSFW COMMANDS - - // R34 command. - [Command("r34")] - public async Task ExampleCommand([Remainder] string query = null) - { - try - { - if (string.IsNullOrWhiteSpace(query)) - { - await Context.Channel.SendMessageAsync("Please provide a search query. Usage: ?r34 {searchquery}"); - return; - } - - if (!(Context.Channel is TextChannel textChannel) || !textChannel.IsNsfw) - { - await Context.Channel.SendMessageAsync("This command is only allowed in NSFW channels. So go to a NSFW channel to get your NSFW smh"); - return; - } - - using (HttpClient httpClient = new HttpClient()) - { - string apiUrl = $"https://api.rule34.xxx/index.php?page=dapi&s=post&q=index&limit=1&json=1&tags={query}"; - - HttpResponseMessage response = await httpClient.GetAsync(apiUrl); - - if (response.IsSuccessStatusCode) - { - string jsonResult = await response.Content.ReadAsStringAsync(); - dynamic data = Newtonsoft.Json.JsonConvert.DeserializeObject(jsonResult); - - if (data != null && data.Count > 0 && data[0].file_url != null) - { - string imageUrl = data[0].file_url; - await Context.Channel.SendMessageAsync(imageUrl); - } - else - { - await Context.Channel.SendMessageAsync("No images found."); - } - } - else - { - await Context.Channel.SendMessageAsync("Sorry, I couldn't fetch an image at the moment. Please try again later."); - } - } - } - catch (Exception ex) - { - await Context.Channel.SendMessageAsync($"An error occurred: {ex.Message}"); - } - } - - // cL Command - [Command("cl")] - public async Task LTemog() - { - await ReplyAsync("Common <@01H5K1PW0B2NGGWFRGHZVBCZ0S> L"); - } - // End of cL command - - // Hentai command. - [Command("hentai")] - public async Task Hentai() - { - try - { - if (!(Context.Channel is TextChannel textChannel) || !textChannel.IsNsfw) - { - await Context.Channel.SendMessageAsync("This command is only allowed in NSFW channels. So go to a NSFW channel to get your NSFW smh"); - return; - } - using (HttpClient client = new HttpClient()) - { - string apiUrl = "https://nekobot.xyz/api/image?type=hneko"; - HttpResponseMessage response = await client.GetAsync(apiUrl); - - if (response.IsSuccessStatusCode) - { - string nekoJson = await response.Content.ReadAsStringAsync(); - dynamic nekoObject = Newtonsoft.Json.JsonConvert.DeserializeObject(nekoJson); - - string imageUrl = nekoObject["message"]; - - await ReplyAsync(imageUrl); - } - else - { - await ReplyAsync("Sorry, I couldn't fetch a neko image at the moment. Please try again later."); - } - } - } - catch (Exception ex) - { - await Context.Channel.SendMessageAsync($"An error occurred: {ex.Message}"); - } - } - // End of Hentai command. - - // Boobs command - [Command("boobs")] - public async Task Boobs() - { - try - { - if (!(Context.Channel is TextChannel textChannel) || !textChannel.IsNsfw) - { - await Context.Channel.SendMessageAsync("This command is only allowed in NSFW channels. So go to a NSFW channel to get your NSFW smh"); - return; - } - using (HttpClient client = new HttpClient()) - { - string apiUrl = "https://nekobot.xyz/api/image?type=boobs"; - HttpResponseMessage response = await client.GetAsync(apiUrl); - - if (response.IsSuccessStatusCode) - { - string nekoJson = await response.Content.ReadAsStringAsync(); - dynamic nekoObject = Newtonsoft.Json.JsonConvert.DeserializeObject(nekoJson); - - string imageUrl = nekoObject["message"]; - - await ReplyAsync(imageUrl); - } - else - { - await ReplyAsync("Sorry, I couldn't fetch a neko image at the moment. Please try again later."); - } - } - } - catch (Exception ex) - { - await Context.Channel.SendMessageAsync($"An error occurred: {ex.Message}"); - } - } - // End of the Boobs command. - [Command("hboobs")] - public async Task Hboobs() - { - try - { - if (!(Context.Channel is TextChannel textChannel) || !textChannel.IsNsfw) - { - await Context.Channel.SendMessageAsync("This command is only allowed in NSFW channels. So go to a NSFW channel to get your NSFW smh"); - return; - } - using (HttpClient client = new HttpClient()) - { - string apiUrl = "https://nekobot.xyz/api/image?type=hboobs"; - HttpResponseMessage response = await client.GetAsync(apiUrl); - - if (response.IsSuccessStatusCode) - { - string nekoJson = await response.Content.ReadAsStringAsync(); - dynamic nekoObject = Newtonsoft.Json.JsonConvert.DeserializeObject(nekoJson); - - string imageUrl = nekoObject["message"]; - - await ReplyAsync(imageUrl); - } - else - { - await ReplyAsync("Sorry, I couldn't fetch a neko image at the moment. Please try again later."); - } - } - } - catch (Exception ex) - { - await Context.Channel.SendMessageAsync($"An error occurred: {ex.Message}"); - } - } - // hboobs command - - // End of hboobs command. - - // End of NSFW commands - - // Begning of Videos and gif commands! - - // I have no knowlege - [Command("ihnk")] - public async Task IHave() - { - await ReplyAsync("https://cdn.purplebored.pl/uploads/y2mate.com%20-%20I%20have%20no%20knowledge%20of%20any%20of%20this%20ThIs%20iS%20sO%20bIzZaRe_480p.mp4"); - } - // end of ihnk - - // Begning of scary - [Command("Scary")] - public async Task Scary() - { - await ReplyAsync("https://cdn.purplebored.pl/uploads/y2mate.com%20-%20oh%20oh%20scary%20oh%20oh%20shiver%20me%20timbers_360p.mp4"); - } - // End of scary - - // End of Videos and gifs. - - // AI commands. - - // Begning of GPT Command. - - Dictionary> userConversations = new Dictionary>(); - - [Command("gpt")] - public async Task GPT([Remainder] string input) - { - string apiKey = "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"; // Replace with your ChatGPT API key - string apiUrl = "https://api.openai.com/v1/chat/completions"; - - HttpClient client = new HttpClient(); - client.DefaultRequestHeaders.Add("Authorization", $"Bearer {apiKey}"); - - string userId = Guid.NewGuid().ToString(); - - if (!userConversations.ContainsKey(userId)) - { - userConversations[userId] = new List - { - new - { - role = "system", - content = "You are a doomer you dont really care and your responses are small and staright to the point." - } - }; - } - - userConversations[userId].Add(new - { - role = "user", - content = input - }); - - HttpResponseMessage response = await client.PostAsync(apiUrl, new StringContent(JsonConvert.SerializeObject(new - { - model = "gpt-3.5-turbo", - messages = userConversations[userId], - }), Encoding.UTF8, "application/json")); - - if (response.IsSuccessStatusCode) - { - string responseBody = await response.Content.ReadAsStringAsync(); - dynamic result = JsonConvert.DeserializeObject(responseBody); - - string botReply = result.choices[0].message.content; - - await ReplyAsync(botReply); - } - else - { - await ReplyAsync("Error: Unable to generate response."); - } - } - // End of GPT command. - // End of AI commands. - // End of the Bot -} \ No newline at end of file