diff --git a/.gitignore b/.gitignore index 040309e..fb37716 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,484 @@ -obj -bin -.vs -.idea \ No newline at end of file +# Created by https://www.toptal.com/developers/gitignore/api/csharp,rider +# Edit at https://www.toptal.com/developers/gitignore?templates=csharp,rider + +### Csharp ### +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. +## +## Get latest from https://github.com/github/gitignore/blob/main/VisualStudio.gitignore + +# User-specific files +*.rsuser +*.suo +*.user +*.userosscache +*.sln.docstates + +# User-specific files (MonoDevelop/Xamarin Studio) +*.userprefs + +# Mono auto generated files +mono_crash.* + +# Build results +[Dd]ebug/ +[Dd]ebugPublic/ +[Rr]elease/ +[Rr]eleases/ +x64/ +x86/ +[Ww][Ii][Nn]32/ +[Aa][Rr][Mm]/ +[Aa][Rr][Mm]64/ +bld/ +[Bb]in/ +[Oo]bj/ +[Ll]og/ +[Ll]ogs/ + +# Visual Studio 2015/2017 cache/options directory +.vs/ +# Uncomment if you have tasks that create the project's static files in wwwroot +#wwwroot/ + +# Visual Studio 2017 auto generated files +Generated\ Files/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +# NUnit +*.VisualState.xml +TestResult.xml +nunit-*.xml + +# Build Results of an ATL Project +[Dd]ebugPS/ +[Rr]eleasePS/ +dlldata.c + +# Benchmark Results +BenchmarkDotNet.Artifacts/ + +# .NET Core +project.lock.json +project.fragment.lock.json +artifacts/ + +# ASP.NET Scaffolding +ScaffoldingReadMe.txt + +# StyleCop +StyleCopReport.xml + +# Files built by Visual Studio +*_i.c +*_p.c +*_h.h +*.ilk +*.meta +*.obj +*.iobj +*.pch +*.pdb +*.ipdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*_wpftmp.csproj +*.log +*.tlog +*.vspscc +*.vssscc +.builds +*.pidb +*.svclog +*.scc + +# Chutzpah Test files +_Chutzpah* + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opendb +*.opensdf +*.sdf +*.cachefile +*.VC.db +*.VC.VC.opendb + +# Visual Studio profiler +*.psess +*.vsp +*.vspx +*.sap + +# Visual Studio Trace Files +*.e2e + +# TFS 2012 Local Workspace +$tf/ + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper +*.DotSettings.user + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# AxoCover is a Code Coverage Tool +.axoCover/* +!.axoCover/settings.json + +# Coverlet is a free, cross platform Code Coverage Tool +coverage*.json +coverage*.xml +coverage*.info + +# Visual Studio code coverage results +*.coverage +*.coveragexml + +# NCrunch +_NCrunch_* +.*crunch*.local.xml +nCrunchTemp_* + +# MightyMoose +*.mm.* +AutoTest.Net/ + +# Web workbench (sass) +.sass-cache/ + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.[Pp]ublish.xml +*.azurePubxml +# Note: Comment the next line if you want to checkin your web deploy settings, +# but database connection strings (with potential passwords) will be unencrypted +*.pubxml +*.publishproj + +# Microsoft Azure Web App publish settings. Comment the next line if you want to +# checkin your Azure Web App publish settings, but sensitive information contained +# in these scripts will be unencrypted +PublishScripts/ + +# NuGet Packages +*.nupkg +# NuGet Symbol Packages +*.snupkg +# The packages folder can be ignored because of Package Restore +**/[Pp]ackages/* +# except build/, which is used as an MSBuild target. +!**/[Pp]ackages/build/ +# Uncomment if necessary however generally it will be regenerated when needed +#!**/[Pp]ackages/repositories.config +# NuGet v3's project.json files produces more ignorable files +*.nuget.props +*.nuget.targets + +# Microsoft Azure Build Output +csx/ +*.build.csdef + +# Microsoft Azure Emulator +ecf/ +rcf/ + +# Windows Store app package directories and files +AppPackages/ +BundleArtifacts/ +Package.StoreAssociation.xml +_pkginfo.txt +*.appx +*.appxbundle +*.appxupload + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!?*.[Cc]ache/ + +# Others +ClientBin/ +~$* +*~ +*.dbmdl +*.dbproj.schemaview +*.jfm +*.pfx +*.publishsettings +orleans.codegen.cs + +# Including strong name files can present a security risk +# (https://github.com/github/gitignore/pull/2483#issue-259490424) +#*.snk + +# Since there are multiple workflows, uncomment next line to ignore bower_components +# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) +#bower_components/ + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file +# to a newer Visual Studio version. Backup files are not needed, +# because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm +ServiceFabricBackup/ +*.rptproj.bak + +# SQL Server files +*.mdf +*.ldf +*.ndf + +# Business Intelligence projects +*.rdl.data +*.bim.layout +*.bim_*.settings +*.rptproj.rsuser +*- [Bb]ackup.rdl +*- [Bb]ackup ([0-9]).rdl +*- [Bb]ackup ([0-9][0-9]).rdl + +# Microsoft Fakes +FakesAssemblies/ + +# GhostDoc plugin setting file +*.GhostDoc.xml + +# Node.js Tools for Visual Studio +.ntvs_analysis.dat +node_modules/ + +# Visual Studio 6 build log +*.plg + +# Visual Studio 6 workspace options file +*.opt + +# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) +*.vbw + +# Visual Studio 6 auto-generated project file (contains which files were open etc.) +*.vbp + +# Visual Studio 6 workspace and project file (working project files containing files to include in project) +*.dsw +*.dsp + +# Visual Studio 6 technical files + +# Visual Studio LightSwitch build output +**/*.HTMLClient/GeneratedArtifacts +**/*.DesktopClient/GeneratedArtifacts +**/*.DesktopClient/ModelManifest.xml +**/*.Server/GeneratedArtifacts +**/*.Server/ModelManifest.xml +_Pvt_Extensions + +# Paket dependency manager +.paket/paket.exe +paket-files/ + +# FAKE - F# Make +.fake/ + +# CodeRush personal settings +.cr/personal + +# Python Tools for Visual Studio (PTVS) +__pycache__/ +*.pyc + +# Cake - Uncomment if you are using it +# tools/** +# !tools/packages.config + +# Tabs Studio +*.tss + +# Telerik's JustMock configuration file +*.jmconfig + +# BizTalk build output +*.btp.cs +*.btm.cs +*.odx.cs +*.xsd.cs + +# OpenCover UI analysis results +OpenCover/ + +# Azure Stream Analytics local run output +ASALocalRun/ + +# MSBuild Binary and Structured Log +*.binlog + +# NVidia Nsight GPU debugger configuration file +*.nvuser + +# MFractors (Xamarin productivity tool) working folder +.mfractor/ + +# Local History for Visual Studio +.localhistory/ + +# Visual Studio History (VSHistory) files +.vshistory/ + +# BeatPulse healthcheck temp database +healthchecksdb + +# Backup folder for Package Reference Convert tool in Visual Studio 2017 +MigrationBackup/ + +# Ionide (cross platform F# VS Code tools) working folder +.ionide/ + +# Fody - auto-generated XML schema +FodyWeavers.xsd + +# VS Code files for those working on multiple tools +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json +*.code-workspace + +# Local History for Visual Studio Code +.history/ + +# Windows Installer files from build outputs +*.cab +*.msi +*.msix +*.msm +*.msp + +# JetBrains Rider +*.sln.iml + +### Rider ### +# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider +# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 + +# User-specific stuff +.idea/**/workspace.xml +.idea/**/tasks.xml +.idea/**/usage.statistics.xml +.idea/**/dictionaries +.idea/**/shelf + +# AWS User-specific +.idea/**/aws.xml + +# Generated files +.idea/**/contentModel.xml + +# Sensitive or high-churn files +.idea/**/dataSources/ +.idea/**/dataSources.ids +.idea/**/dataSources.local.xml +.idea/**/sqlDataSources.xml +.idea/**/dynamic.xml +.idea/**/uiDesigner.xml +.idea/**/dbnavigator.xml + +# Gradle +.idea/**/gradle.xml +.idea/**/libraries + +# Gradle and Maven with auto-import +# When using Gradle or Maven with auto-import, you should exclude module files, +# since they will be recreated, and may cause churn. Uncomment if using +# auto-import. +# .idea/artifacts +# .idea/compiler.xml +# .idea/jarRepositories.xml +# .idea/modules.xml +# .idea/*.iml +# .idea/modules +# *.iml +# *.ipr + +# CMake +cmake-build-*/ + +# Mongo Explorer plugin +.idea/**/mongoSettings.xml + +# File-based project format +*.iws + +# IntelliJ +out/ + +# mpeltonen/sbt-idea plugin +.idea_modules/ + +# JIRA plugin +atlassian-ide-plugin.xml + +# Cursive Clojure plugin +.idea/replstate.xml + +# SonarLint plugin +.idea/sonarlint/ + +# Crashlytics plugin (for Android Studio and IntelliJ) +com_crashlytics_export_strings.xml +crashlytics.properties +crashlytics-build.properties +fabric.properties + +# Editor-based Rest Client +.idea/httpRequests + +# Android studio 3.1+ serialized cache file +.idea/caches/build_file_checksums.ser + +# Shit i add. +.vscode +.idea +# End of https://www.toptal.com/developers/gitignore/api/csharp,rider \ No newline at end of file diff --git a/Assets/Chrobry(1).png b/Assets/Chrobry(1).png new file mode 100644 index 0000000..2f68ff4 Binary files /dev/null and b/Assets/Chrobry(1).png differ diff --git a/Chrobry.csproj b/Chrobry.csproj new file mode 100644 index 0000000..dded999 --- /dev/null +++ b/Chrobry.csproj @@ -0,0 +1,66 @@ + + + + Exe + net7.0 + enable + enable + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Chrobry.sln b/Chrobry.sln new file mode 100644 index 0000000..35efdb8 --- /dev/null +++ b/Chrobry.sln @@ -0,0 +1,25 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.7.34031.279 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Chrobry", "Chrobry.csproj", "{5F72A41D-651C-45E0-A377-5F04BC7F0E4D}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {5F72A41D-651C-45E0-A377-5F04BC7F0E4D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {5F72A41D-651C-45E0-A377-5F04BC7F0E4D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5F72A41D-651C-45E0-A377-5F04BC7F0E4D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {5F72A41D-651C-45E0-A377-5F04BC7F0E4D}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {570C625E-26DC-4793-998A-10733E2600CD} + EndGlobalSection +EndGlobal diff --git a/LICENSE b/LICENSE index 6ddc646..c650f5b 100644 --- a/LICENSE +++ b/LICENSE @@ -208,7 +208,7 @@ If you develop a new program, and you want it to be of the greatest possible use To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the “copyright” line and a pointer to where the full notice is found. - Chrobry-Discord + Chrobry Copyright (C) 2023 Purplebored This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. @@ -221,7 +221,7 @@ Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: - Chrobry-Discord Copyright (C) 2023 Purplebored + Chrobry Copyright (C) 2023 Purplebored This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. diff --git a/Program.cs b/Program.cs index a092f04..45d0a67 100644 --- a/Program.cs +++ b/Program.cs @@ -109,10 +109,6 @@ public class Commands : ModuleBase var helpMessage = "#### List of available commands:\n\n" + "#### Practical Commands: \n" + -<<<<<<< HEAD - "`?video` - Sends a list of all aviable videos\n" + -======= ->>>>>>> parent of f796c56 (Big Update) "`?help` - Displays this command.\n" + "`?credits` - Displays bot's credit.\n" + "`?test` - Simple test command you say test bot will response.\n" + @@ -138,34 +134,11 @@ public class Commands : ModuleBase "`?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" + -<<<<<<< HEAD - "`?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:"; -======= "`?avatar` - Sends the user Avatar (Beta) \n "; ->>>>>>> parent of f796c56 (Big Update) await ReplyAsync(helpMessage); } // End of the Help command. -<<<<<<< HEAD - // 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 - -======= ->>>>>>> parent of f796c56 (Big Update) // Mod Help command [Command("mod-help")] public async Task ModHelp() @@ -174,12 +147,7 @@ public class Commands : ModuleBase "## List Of Available mod commands. \n" + "`?kick {Mention}` - Kicks the user \n" + "`?ban {mentions}` - Bans the User \n" + -<<<<<<< HEAD - "`?unban {mention}` - Unbans the user. \n" + - "### I am Currently working on adding more usefull command so be patient! \n"; -======= "`?unban {mention}` - Unbans the user. \n"; ->>>>>>> parent of f796c56 (Big Update) await ReplyAsync(helpMessage); } @@ -234,11 +202,6 @@ public class Commands : ModuleBase try { -<<<<<<< HEAD - // Sends a messege in the server - await ReplyAsync("You should recive DMs now."); -======= ->>>>>>> parent of f796c56 (Big Update) // Send initial message await DM.SendMessageAsync("DMs work if you received this message."); await DM.SendMessageAsync("-----"); @@ -328,17 +291,6 @@ public class Commands : ModuleBase // Fun commands: -<<<<<<< HEAD - // L Command - [Command("l")] - public async Task LCommand() - { - await ReplyAsync("L"); - } - // End of L command - -======= ->>>>>>> parent of f796c56 (Big Update) // Gif command [Command("gif")] public async Task GifCommand([Remainder] string keyword) @@ -596,15 +548,9 @@ public class Commands : ModuleBase string factJson = await response.Content.ReadAsStringAsync(); JObject factObject = JObject.Parse(factJson); -<<<<<<< HEAD - if (factObject["data"] is JArray dataArray && dataArray.Count > 0) - { - string fact = dataArray[0].ToString(); -======= if (factObject["data"] != null) { string fact = factObject["data"].ToString(); ->>>>>>> parent of f796c56 (Big Update) await ReplyAsync(fact); } else @@ -623,55 +569,8 @@ public class Commands : ModuleBase } } } -<<<<<<< HEAD - // 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 - -======= - // End of the Cat fact command - ->>>>>>> parent of f796c56 (Big Update) // Joke command [Command("joke")] public async Task Joke() @@ -1011,10 +910,6 @@ public class Commands : ModuleBase } private RevoltClient Client; -<<<<<<< HEAD - // End of styff nedded to make those command work. -======= ->>>>>>> parent of f796c56 (Big Update) // Stats command [Command("stats")] @@ -1033,10 +928,6 @@ public class Commands : ModuleBase await ReplyAsync($"An error occurred: {ex.Message}"); } } -<<<<<<< HEAD - // End of the stats command -======= ->>>>>>> parent of f796c56 (Big Update) // Ban Command [Command("ban")] @@ -1053,10 +944,6 @@ public class Commands : ModuleBase await ReplyAsync("### ERROR\nInvalid Mention or Bot Permissions."); } } -<<<<<<< HEAD - // End of the Ban command -======= ->>>>>>> parent of f796c56 (Big Update) // Unban Command [Command("unban")] @@ -1073,10 +960,6 @@ public class Commands : ModuleBase await ReplyAsync("### ERROR\nInvalid Mention or Bot Permissions."); } } -<<<<<<< HEAD - // End of the UnBan command -======= ->>>>>>> parent of f796c56 (Big Update) // Kick Command [Command("kick")] @@ -1093,10 +976,6 @@ public class Commands : ModuleBase await ReplyAsync("### ERROR\nInvalid Mention or Bot Permissions."); } } -<<<<<<< HEAD - // End of the Kick command -======= ->>>>>>> parent of f796c56 (Big Update) // End of mod commands @@ -1153,17 +1032,6 @@ public class Commands : ModuleBase } } -<<<<<<< HEAD - // cL Command - [Command("cl")] - public async Task LTemog() - { - await ReplyAsync("Common <@01H5K1PW0B2NGGWFRGHZVBCZ0S> L"); - } - // End of cL command - -======= ->>>>>>> parent of f796c56 (Big Update) // Hentai command. [Command("hentai")] public async Task Hentai() @@ -1201,27 +1069,5 @@ public class Commands : ModuleBase } } // End of NSFW commands -<<<<<<< HEAD - - // 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 - -======= ->>>>>>> parent of f796c56 (Big Update) // End of the Bot } \ No newline at end of file diff --git a/README.md b/README.md index 208e52c..405b714 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,33 @@ -# Chrobry-Discord +# Chrobry -Truly a kind among Discord bots 👑 \ No newline at end of file +A king among revolt bots 👑 + +![Chrobry(1).png](Assets/Chrobry(1).png) + +## Features + +- [x] Ban, Unban, Kick Command. + +- [x] Open source + +- [x] NSFW Commands + +- [x] Fun Commands + +## Features which gonna be added in the future. + +- [ ] Music Commands. + +- [ ] Better Mod commands + +- [ ] Warn system + +- [ ] Economy System. + +# License + +This project is licensed under the terms of the GPL 3.0 license. + +## Contributing + +Contributions to this project are welcome! Simply fork the repository and create a pull request with your proposed changes. preferably also create a issue on codeberg first. diff --git a/bot.rb b/bot.rb deleted file mode 100644 index 9fd1150..0000000 --- a/bot.rb +++ /dev/null @@ -1,174 +0,0 @@ -require 'discordrb' -require 'open-uri' -require 'json' -require 'dotenv/load' - -TOKEN = ENV['BOT_TOKEN'] -bot = Discordrb::Bot.new(token: TOKEN) - -# Help command -bot.message(content: '!help') do |event| - embed = Discordrb::Webhooks::Embed.new( - title: 'Available Categories', - description: 'To get help for a specific category, use `!help-category_name`. (everything needs to be in lower case.)', - color: 800080 - ) - embed.add_field(name: 'help-fun', value: 'Fun commands') - embed.add_field(name: 'help-mod', value: 'Mod commands') - # Add more categories as needed - - event.channel.send_embed('', embed) -end - -# Fun help command -bot.message(content:('!help-fun')) do |event| - # Provide help for fun commands in this category - event.respond("Here are the fun commands: !joke, !sploot, !roast, !dogfact, !rps, !shitpost") -end - -# Mod help command -bot.message(content:('!help-mod')) do |event| - # Provide help for mod commands in this category - event.respond("Here are the mod commands: !kick @user, !purge ") -end -# End of help command - - -# Simple joke command. -bot.message(content: '!joke') do |event| - begin - response = JSON.parse(open('https://v2.jokeapi.dev/joke/Any?type=twopart').read) - setup = response['setup'] - punchline = response['delivery'] - event.respond(setup) - event.respond(punchline) - rescue StandardError => e - event.respond("Sorry, I couldn't fetch a joke at the moment. Please try again later.") - puts "Error fetching joke: #{e.message}" - end -end -# End of Joke Command. - -# Sploot -bot.message(content: '!sploot') do |event| - # You can replace this URL with any other source of sploot images. - sploot_image_url = 'https://cdn.discordapp.com/attachments/1030188681472000120/1152930346229301338/YUVfoERh3CiqXUdc9a9qwZ9paHWPf4GETsIslDBExFqsRVGds9pk9MicwErTq1N8sowFpUyO5Q9oVgs640-nd-v1.png' - - event.respond(sploot_image_url) -end -# End of Sploot Command - -# Roast command. -bot.message(content: '!roast') do |event| - roasts = [ - "You must be a parking ticket, because you've got 'Fine' written all over you.", - "If you were any more inbred, you'd be a sandwich.", - "I'd say you're dumb as a rock, but at least a rock can serve a purpose.", - "Is your ass jealous of the amount of shit that comes out of your mouth?", - "You're not pretty enough to be this stupid." - ] - event.respond(roasts.sample) -end - -# Kick Command -bot.message(content: /^!kick\s<@(\d+)>$/) do |event| - user_id = event.content.match(/^!kick\s<@(\d+)>$/)[1].to_i - - # Check if the user has the necessary permissions to kick members - if event.author.permission?(:kick_members) - begin - user_to_kick = event.server.member(user_id) - user_to_kick.kick - event.respond("Successfully kicked <@#{user_id}>.") - rescue StandardError => e - event.respond("Error: #{e.message}") - end - else - event.respond("You do not have permission to kick members.") - end -end -# End of the kick command - -# Ping Command -bot.message(content: '!ping') do |event| - start_time = Time.now - msg = event.respond('Pong!') - end_time = Time.now - - ping = ((end_time - start_time) * 1000).to_i - msg.edit("Pong! Latency is #{ping} ms.") -end -# End of ping command. - -# Purge Command. -bot.message(content: /^!purge (\d{1,2})$/) do |event| - num_to_delete = event.message.content.match(/^!purge (\d{1,2})$/)[1].to_i - - if num_to_delete >= 1 && num_to_delete <= 100 - event.channel.prune(num_to_delete + 1) # Adding 1 to also delete the command message - else - event.respond("Please specify a number between 1 and 100.") - end -end -# End of Purge Command. - -# Dogfact Command. -def fetch_dog_fact - url = URI.parse('https://dog-api.kinduff.com/api/facts') - response = Net::HTTP.get(url) - JSON.parse(response)['facts'].first -end - -bot.message(content: /^!dogfact$/) do |event| - dog_fact = fetch_dog_fact - event.respond("#{dog_fact}") -end -# End of Dogfact - -# RPS Command. -valid_choices = ['rock', 'paper', 'scissors'] - -bot.message(content: /^!rps (rock|paper|scissors)$/) do |event| - user_choice = event.message.content.match(/^!rps (rock|paper|scissors)$/)[1] - - if valid_choices.include?(user_choice) - bot_choice = valid_choices.sample - - result = case [user_choice, bot_choice] - when ['rock', 'scissors'], ['paper', 'rock'], ['scissors', 'paper'] - "You win!" - when ['scissors', 'rock'], ['rock', 'paper'], ['paper', 'scissors'] - "I win!" - else - "It's a tie!" - end - - event.respond("You chose #{user_choice}, I chose #{bot_choice}. #{result}") - else - event.respond("Please choose either rock, paper, or scissors!") - end -end -# End of RPS command - -# Begining of the Shitpost command. -bot.message(content: '!shitpost') do |event| - begin - uri = URI.parse('https://api.thedailyshitpost.net/random') - response = Net::HTTP.get_response(uri) - - if response.is_a?(Net::HTTPSuccess) - meme_json = JSON.parse(response.body) - title = meme_json['title'] - image_url = meme_json['url'] - event.respond("#{title}: #{image_url}") - else - event.respond("Sorry, I couldn't fetch a meme at the moment. 99% chance that ratelimit or Shitpost API dead.") - end - rescue StandardError => e - event.respond("An error occurred: #{e.message}") - end -end -# End of the Shitpost command. - -bot.run -