This commit is contained in:
Purplebored
2023-09-26 18:08:14 +02:00
parent 6e3c99692d
commit 7c95c59aff
8 changed files with 609 additions and 336 deletions

488
.gitignore vendored
View File

@@ -1,4 +1,484 @@
obj
bin
.vs
.idea
# 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

BIN
Assets/Chrobry(1).png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 MiB

66
Chrobry.csproj Normal file
View File

@@ -0,0 +1,66 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net7.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.Configuration" Version="7.0.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="7.0.0" />
<PackageReference Include="Revolt.Net" Version="0.1.0" />
<PackageReference Include="Revolt.Net.Commands" Version="0.1.1" />
<PackageReference Include="Revolt.Net.Core" Version="0.1.1" />
<PackageReference Include="Revolt.Net.Rest" Version="0.1.0" />
<PackageReference Include="Revolt.Net.WebSocket" Version="0.1.0" />
<PackageReference Include="RevoltSharp" Version="6.6.4" />
<PackageReference Include="RevoltSharp.Commands" Version="1.1.3" />
<PackageReference Include="RevoltSharp.InstanceAdmin" Version="1.0.1" />
</ItemGroup>
<ItemGroup>
<Content Include=".git\config" />
<Content Include=".git\description" />
<Content Include=".git\HEAD" />
<Content Include=".git\hooks\applypatch-msg.sample" />
<Content Include=".git\hooks\commit-msg.sample" />
<Content Include=".git\hooks\fsmonitor-watchman.sample" />
<Content Include=".git\hooks\post-update.sample" />
<Content Include=".git\hooks\pre-applypatch.sample" />
<Content Include=".git\hooks\pre-commit.sample" />
<Content Include=".git\hooks\pre-merge-commit.sample" />
<Content Include=".git\hooks\pre-push.sample" />
<Content Include=".git\hooks\pre-rebase.sample" />
<Content Include=".git\hooks\pre-receive.sample" />
<Content Include=".git\hooks\prepare-commit-msg.sample" />
<Content Include=".git\hooks\push-to-checkout.sample" />
<Content Include=".git\hooks\update.sample" />
<Content Include=".git\index" />
<Content Include=".git\info\exclude" />
<Content Include=".git\logs\HEAD" />
<Content Include=".git\logs\refs\heads\master" />
<Content Include=".git\logs\refs\remotes\origin\HEAD" />
<Content Include=".git\objects\pack\pack-0283571bb8bff910a6b21cf390dae1884ff16739.idx" />
<Content Include=".git\objects\pack\pack-0283571bb8bff910a6b21cf390dae1884ff16739.pack" />
<Content Include=".git\packed-refs" />
<Content Include=".git\refs\heads\master" />
<Content Include=".git\refs\remotes\origin\HEAD" />
<Content Include=".idea\.idea.Chrobry.dir\.idea\.gitignore" />
<Content Include=".idea\.idea.Chrobry.dir\.idea\encodings.xml" />
<Content Include=".idea\.idea.Chrobry.dir\.idea\indexLayout.xml" />
<Content Include=".idea\.idea.Chrobry.dir\.idea\projectSettingsUpdater.xml" />
<Content Include=".idea\.idea.Chrobry.dir\.idea\vcs.xml" />
<Content Include=".idea\.idea.Chrobry.dir\.idea\workspace.xml" />
</ItemGroup>
<ItemGroup>
<Folder Include=".git\objects\info\" />
<Folder Include=".git\refs\tags\" />
</ItemGroup>
</Project>

25
Chrobry.sln Normal file
View File

@@ -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

View File

@@ -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.

View File

@@ -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
}

View File

@@ -1,3 +1,33 @@
# Chrobry-Discord
# Chrobry
Truly a kind among Discord bots 👑
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.

174
bot.rb
View File

@@ -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 <num>")
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