Merge pull request #23 from ElBe-Plaq/main

Removed replit directory
This commit is contained in:
ElBe 2022-12-19 13:16:58 +01:00 committed by GitHub
commit 17f26530a4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 2 additions and 689 deletions

View File

@ -4,16 +4,13 @@ This is a discord.py bot template.
## How to use the template ## How to use the template
1. Download the code from the releases tab. 1. Download the code from the releases tab.
2. Fill out the `config.json` file. 2. Fill out the `config.json` file.
3. Run `pip install -r requirements.txt` in your console (the folder has to be open in you console). 3. Run `pip install -r requirements.txt` in your console (the `Bot` folder has to be open in you console).
4. Execute the `bot.py` file. 4. Execute the `bot.py` file.
You should already have the discord bot on your server. It needs administrator and command permissions. You should already have the discord bot on your server. It needs administrator and command permissions.
## Replit (OUTDATED) ## Replit (OUTDATED)
### :warning: The Replit port is outdated and won't be updated until further notice. ### :warning: The Replit port is outdated and was removed for now.
1. Download the code from the releases tab and upload it to replit.
2. Fill out the `config.json` file and add the `token` and `appliction_id` secret.
3. Execute the `main.py` file.
# Support server # Support server
[disboard.org](https://disboard.org/server/1041044933290770563) / [disboard.org](https://disboard.org/server/1041044933290770563) /

View File

@ -1,106 +0,0 @@
'''
Functions for the discord.py Bot.
© by ElBe.
Version: 0.1.1
'''
#Imports
import json
import os
import colorama
import datetime
import re
class variables():
'''All variables used in this module.'''
standart_config_file = 'config.json'
standart_datetime_format = datetime.date.isoformat
class json_module():
def get_config(name: str, file = variables.standart_config_file):
'''Returns a value from the given/standart JSON file.'''
with open(file, 'r') as f:
return json.load(f)[name]
def write_json(data, show_text = False, file = variables.standart_config_file):
'''Writes the text to the given/standart JSON file.'''
with open(file, 'w') as f:
json.dump(data, f)
f.close()
if show_text:
print(console.log('Data ' + str(data) + ' added to ' + str(file) + '.'))
class console():
def info(text: str):
'''Returns a info text.'''
i = 0
if len(re.findall('\n', text)) > 1:
text = '\n' + text
search = len(re.findall('\n', text))
if search > 1:
for i in range(search):
text = text.replace('\n', '//n[' + colorama.Fore.LIGHTBLUE_EX + str(i + 1) + colorama.Style.RESET_ALL + '] ', 1)
i = i + 1
text = text.replace('//n', '\n')
return colorama.Fore.LIGHTBLUE_EX + str(datetime.datetime.now().strftime('%d.%m.%Y %T')) + colorama.Style.RESET_ALL + ' [' + colorama.Fore.GREEN + 'INFO' + colorama.Style.RESET_ALL + '] ' + text
def error(text: str):
'''Returns a error text.'''
i = 0
if len(re.findall('\n', text)) > 1:
text = '\n' + text
search = len(re.findall('\n', text))
if search > 1:
for i in range(search):
text = text.replace('\n', '//n[' + colorama.Fore.LIGHTBLUE_EX + str(i + 1) + colorama.Style.RESET_ALL + '] ', 1)
i = i + 1
text = text.replace('//n', '\n')
return colorama.Fore.LIGHTBLUE_EX + str(datetime.datetime.now().strftime('%d.%m.%Y %T')) + colorama.Style.RESET_ALL + ' [' + colorama.Fore.RED + 'ERROR' + colorama.Style.RESET_ALL + '] ' + text
def warn(text: str):
'''Returns a warn text.'''
i = 0
if len(re.findall('\n', text)) > 1:
text = '\n' + text
search = len(re.findall('\n', text))
if search > 1:
for i in range(search):
text = text.replace('\n', '//n[' + colorama.Fore.LIGHTBLUE_EX + str(i + 1) + colorama.Style.RESET_ALL + '] ', 1)
i = i + 1
text = text.replace('//n', '\n')
return colorama.Fore.LIGHTBLUE_EX + str(datetime.datetime.now().strftime('%d.%m.%Y %T')) + colorama.Style.RESET_ALL + ' [' + colorama.Fore.YELLOW + 'WARNING' + colorama.Style.RESET_ALL + '] ' + text
def log(text: str):
'''Returns a log text.'''
i = 0
if len(re.findall('\n', text)) > 1:
text = '\n' + text
search = len(re.findall('\n', text))
if search > 1:
for i in range(search):
text = text.replace('\n', '//n[' + colorama.Fore.LIGHTBLUE_EX + str(i + 1) + colorama.Style.RESET_ALL + '] ', 1)
i = i + 1
text = text.replace('//n', '\n')
return colorama.Fore.LIGHTBLUE_EX + str(datetime.datetime.now().strftime('%d.%m.%Y %T')) + colorama.Style.RESET_ALL + ' [LOG] ' + text
def clear():
'''Clear the console.'''
os.system('cls')
def crusor_up():
'''Changes the position of the crusor to the line above.'''
print('\x1b[1A')
def erase_line():
'''Erases the current line.'''
print('\x1b[2K')
def erase_last():
'''Erases the last line.'''
print('\x1b[1A' + '\x1b[2K' + '\x1b[1A')

View File

@ -1,3 +0,0 @@
{
"Created": 0
}

View File

@ -1,116 +0,0 @@
'''
Command creator for the discord.py Bot.
© by ElBe.
Version: 0.1.6
NOTE: Only execute once.
'''
#Imports
import command_creator
import bot_functions
class run():
def __init__(self):
#Stop command
json = {
'name': 'stop',
'type': 1,
'description': 'Stops the bot.'
}
command_creator.create_command(json)
#Help command
json = {
'name': 'help',
'type': 1,
'description': 'Shows you help about the bot.'
}
command_creator.create_command(json)
#Ping command
json = {
'name': 'ping',
'type': 1,
'description': 'Shows you the ping of the bot in ms.'
}
command_creator.create_command(json)
#Info command
json = {
'name': 'info',
'type': 1,
'description': 'Shows you information about the bot.'
}
command_creator.create_command(json)
#Kick command
json = {
'name': 'kick',
'type': 1,
'description': 'Kicks a member from the server.',
"options": [
{
"name": "member",
"description": "The member to kick.",
"type": 6,
"required": True
},
{
"name": "reason",
"description": "Reason for the kick.",
"type": 3,
"required": False
}
]
}
command_creator.create_command(json)
#Ban command
json = {
'name': 'ban',
'type': 1,
'description': 'Bans a member from the server.',
"options": [
{
"name": "member",
"description": "The member to ban.",
"type": 6,
"required": True
},
{
"name": "reason",
"description": "Reason for the ban.",
"type": 3,
"required": False
}
]
}
command_creator.create_command(json)
#Unban command
json = {
'name': 'unban',
'type': 1,
'description': 'Unbans a member from the server.',
"options": [
{
"name": "member",
"description": "The member to unban.",
"type": 6,
"required": True
},
{
"name": "reason",
"description": "Reason for the unban.",
"type": 3,
"required": False
}
]
}
command_creator.create_command(json)
#File
bot_functions.json_module.write_json({"Created": 1}, False, 'command.json')

View File

@ -1,31 +0,0 @@
'''
Slash command creator for the discord.py Bot.
© by ElBe.
Version: 0.1.5
'''
#Imports
import os
import requests
#Variables
url = 'https://discord.com/api/v10/applications/' + str(os.environ['application_id']) + '/commands'
headers = {
'Authorization': 'Bot ' + str(os.environ['token'])
}
#Example Command
json = {
'name': 'ping',
'type': 1,
'description': 'Shows you the ping of the bot.'
}
#Function
def create_command(json):
try:
r = requests.post(url, headers=headers, json=json)
print('Command /' + str(json['name']) + ' was sucessfully created.')
except Exception as e:
print('Error while trying to create the command /' + str(json['name']) + '.\n' + str(e))

View File

@ -1,21 +0,0 @@
{
"Config": {
"Version": "0.1.9.2 final-r",
"Version-Comment": "Bugfix and error handler.",
"Footer": "Bot made by ElBe.",
"Credits": true
},
"Channels": {
"Welcome": "<Insert welcome channel name here>",
"Goodbye": "<Insert goodbye channel name here>"
},
"Commands": {
"stop": true,
"help": true,
"info": true,
"ping": true,
"kick": true,
"ban": true,
"unban": true
}
}

View File

@ -1,407 +0,0 @@
'''
Discord bot template.
© by ElBe.
Version: 0.1.9.2-R
'''
#Imports
import os
import discord
from discord import utils
import asyncio
import datetime
import time
import logging
import platform
import psutil
#Bot modules
import bot_functions
import command
#Start
print('Discord.py Bot')
print('----------------------------')
print('© by ElBe 2022.')
print('')
print('Start Informations')
print('------------------')
print('Discord version: ' + discord.__version__)
print('Bot version: ' +
bot_functions.json_module.get_config('Config')['Version'])
print('')
print('Starting')
print('--------')
#Variables
bold = '**'
italic = '*'
underline = '_'
stroke = '~~'
MISSING = utils.MISSING
#Starttime
starttime = time.time()
#JSON data
try:
token = os.environ['token']
version = bot_functions.json_module.get_config('Config')['Version']
credits = bot_functions.json_module.get_config('Config')['Credits']
footer = bot_functions.json_module.get_config('Config')['Footer']
welcomeChannel = bot_functions.json_module.get_config('Channels')['Welcome']
goodbyeChannel = bot_functions.json_module.get_config('Channels')['Goodbye']
commands = bot_functions.json_module.get_config('Commands')
except Exception as e:
print(bot_functions.console.error('Error while trying to get data from the config file.\n' + str(e)))
#Setup
logging.basicConfig(filename='log.txt', level=logging.INFO)
intents = discord.Intents.all()
#Create commands
try:
if bot_functions.json_module.get_config('Created', 'command.json') == 0:
command.run()
except Exception as e:
print(bot_functions.console.error('Error while trying to create the commands.\n' + str(e)))
#Main
class Bot(discord.Client):
'''Bot.'''
async def on_connect(self):
logging.info(
str(datetime.datetime.now()) + ' Bot connected to the Discord API.')
print(bot_functions.console.info('Bot connected to the Discord API.'))
async def on_ready(self):
logging.info(
str(datetime.datetime.now()) + ' Bot logged in as ' + client.user.name +
'.')
print(
bot_functions.console.info('Bot logged in as ' + client.user.name + '.'))
print('')
print('Log (Consolebased)')
print('------------------')
while True:
await client.change_presence(activity=discord.Activity(
type=discord.ActivityType.watching, name=f'/help for help.'))
await asyncio.sleep(10)
await client.change_presence(activity=discord.Game(
name=f'Version {version}'))
await asyncio.sleep(10)
if credits:
await client.change_presence(activity=discord.Game(
name=' programmed by ElBe.'))
await asyncio.sleep(10)
async def on_resumed(self):
logging.info(
str(datetime.datetime.now().strftime('%d.%m.%Y %T')) +
' -- Bot resumed session.')
print(bot_functions.console.log('Bot resumed a session.'))
async def on_interaction(self, interaction):
async def log(text: str):
'''Log a text and save it in the logfile and the console.'''
logging.info(
str(datetime.datetime.now().strftime('%d.%m.%Y %T')) + ' -- ' +
str(text))
print(bot_functions.console.log(str(text)))
if interaction.type == discord.InteractionType.application_command:
command_name = str(interaction.data['name'])
await log('Command /' + command_name + ' was used by @' +
str(interaction.user) + '.')
if command_name == 'ping' and commands['ping']:
pingEmbed = discord.Embed(title='Ping',
description='Ping of the bot in ms.')
pingEmbed.add_field(name='Latency: ',
value=str(round(client.latency * 1000)) + ' ms',
inline=False)
pingEmbed.set_thumbnail(url=client.user.avatar.url)
pingEmbed.set_footer(text=footer)
await interaction.response.send_message(embed=pingEmbed,
ephemeral=True)
elif command_name == 'ping' and not commands['ping']:
commandDisabledEmbed = discord.Embed(
title='Command disabled',
description=
'This command was disabled in the bot config file. Ask a member with access to the bot to enable this command.'
)
commandDisabledEmbed.set_thumbnail(url=client.user.avatar.url)
commandDisabledEmbed.set_footer(text=footer)
await interaction.response.send_message(embed=commandDisabledEmbed,
ephemeral=True)
if command_name == 'info' and commands['info']:
infoEmbed = discord.Embed(title='Information',
description='Informations about the bot.')
infoEmbed.add_field(name='Running on: ',
value=str(platform.system()) + ' ' +
str(platform.release()),
inline=False)
infoEmbed.add_field(name='CPU usage: ',
value=str(psutil.cpu_percent(2)) + '%',
inline=False)
infoEmbed.add_field(
name='Uptime: ',
value=str(
datetime.timedelta(seconds=int(round(time.time() - starttime)))),
inline=False)
infoEmbed.set_thumbnail(url=client.user.avatar.url)
infoEmbed.set_footer(text=footer)
await interaction.response.send_message(embed=infoEmbed,
ephemeral=True)
elif command_name == 'info' and not commands['info']:
commandDisabledEmbed = discord.Embed(
title='Command disabled',
description=
'This command was disabled in the bot config file. Ask a member with access to the bot to enable this command.'
)
commandDisabledEmbed.set_thumbnail(url=client.user.avatar.url)
commandDisabledEmbed.set_footer(text=footer)
await interaction.response.send_message(embed=commandDisabledEmbed,
ephemeral=True)
if command_name == 'stop' and commands['stop']:
if interaction.user.guild_permissions.administrator:
await log('Client stoped.')
exit()
else:
noPermissionsEmbed = discord.Embed(
title='Missing permissions',
description='You don\'t have permissions to do that.',
color=discord.Color.red())
noPermissionsEmbed.set_thumbnail(url=client.user.avatar.url)
noPermissionsEmbed.set_footer(text=footer)
await interaction.response.send_message(embed=noPermissionsEmbed,
ephemeral=True)
elif command_name == 'stop' and not commands['stop']:
commandDisabledEmbed = discord.Embed(
title='Command disabled',
description=
'This command was disabled in the bot config file. Ask a member with access to the bot to enable this command.'
)
commandDisabledEmbed.set_thumbnail(url=client.user.avatar.url)
commandDisabledEmbed.set_footer(text=footer)
await interaction.response.send_message(embed=commandDisabledEmbed,
ephemeral=True)
if command_name == 'help' and commands['help']:
helpEmbed = discord.Embed(
title='Help',
description='Help for commands and the usage of the bot.')
helpEmbed.add_field(name='Ping',
value='Shows the ping of the bot in ms.',
inline=True)
helpEmbed.add_field(name='Info',
value='Shows information about the bot.',
inline=True)
helpEmbed.add_field(
name='Help',
value='Shows you help for commands and the usage of the bot.',
inline=True)
helpEmbed.add_field(name='Kick',
value='Kicks a member from the server.',
inline=True)
helpEmbed.add_field(name='Ban',
value='Bans a member from the server.',
inline=True)
helpEmbed.add_field(name='Unban',
value='Unbans a member from the server.',
inline=True)
helpEmbed.add_field(
name='more',
value=
'For more help write a direct message to <@!745695237380243457>.',
inline=False)
helpEmbed.set_thumbnail(url=client.user.avatar.url)
helpEmbed.set_footer(text=footer)
await interaction.response.send_message(embed=helpEmbed,
ephemeral=True)
if command_name == 'kick' and commands['kick']:
options = interaction.data['options']
if interaction.user.guild_permissions.administrator:
member = options[0]['value']
member = await interaction.guild.fetch_member(int(member))
reason = options[1]['value']
if reason == None:
reason = 'Kicked by @' + str(
interaction.user) + ' with the /kick command.'
await member.kick(reason=reason)
kickEmbed = discord.Embed(title='Kick',
description='Succesfully kicked <@!' +
options[0]['value'] + '>!')
kickEmbed.set_thumbnail(url=client.user.avatar.url)
kickEmbed.set_footer(text=footer)
await interaction.response.send_message(embed=kickEmbed,
ephemeral=True)
else:
noPermissionsEmbed = discord.Embed(
title='Missing permissions',
description='You don\'t have permissions to do that.',
color=discord.Color.red())
noPermissionsEmbed.set_thumbnail(url=client.user.avatar.url)
noPermissionsEmbed.set_footer(text=footer)
await interaction.response.send_message(embed=noPermissionsEmbed,
ephemeral=True)
elif command_name == 'kick' and not commands['kick']:
commandDisabledEmbed = discord.Embed(
title='Command disabled',
description=
'This command was disabled in the bot config file. Ask a member with access to the bot to enable this command.'
)
commandDisabledEmbed.set_thumbnail(url=client.user.avatar.url)
commandDisabledEmbed.set_footer(text=footer)
await interaction.response.send_message(embed=commandDisabledEmbed,
ephemeral=True)
if command_name == 'ban' and commands['ban']:
options = interaction.data['options']
if interaction.user.guild_permissions.administrator:
member = options[0]['value']
member = await interaction.guild.fetch_member(int(member))
reason = options[1]['value']
if reason == None:
reason = 'Banned by @' + str(
interaction.user) + ' with the /ban command.'
await member.ban(reason=reason)
banEmbed = discord.Embed(title='Ban',
description='Succesfully banned <@!' +
options[0]['value'] + '>!')
banEmbed.set_thumbnail(url=client.user.avatar.url)
banEmbed.set_footer(text=footer)
await interaction.response.send_message(embed=banEmbed,
ephemeral=True)
else:
noPermissionsEmbed = discord.Embed(
title='Missing permissions',
description='You don\'t have permissions to do that.',
color=discord.Color.red())
noPermissionsEmbed.set_thumbnail(url=client.user.avatar.url)
noPermissionsEmbed.set_footer(text=footer)
await interaction.response.send_message(embed=noPermissionsEmbed,
ephemeral=True)
elif command_name == 'ban' and not commands['ban']:
commandDisabledEmbed = discord.Embed(
title='Command disabled',
description=
'This command was disabled in the bot config file. Ask a member with access to the bot to enable this command.'
)
commandDisabledEmbed.set_thumbnail(url=client.user.avatar.url)
commandDisabledEmbed.set_footer(text=footer)
await interaction.response.send_message(embed=commandDisabledEmbed,
ephemeral=True)
if command_name == 'unban' and commands['unban']:
options = interaction.data['options']
if interaction.user.guild_permissions.administrator:
member = options[0]['value']
member = await client.fetch_user(int(member))
reason = options[1]['value']
if reason == None:
reason = 'Unbanned by @' + str(
interaction.user) + ' with the /unban command.'
await interaction.guild.unban(member, reason=reason)
unbanEmbed = discord.Embed(title='Unban',
description='Succesfully unbanned <@!' +
options[0]['value'] + '>!')
unbanEmbed.set_thumbnail(url=client.user.avatar.url)
unbanEmbed.set_footer(text=footer)
await interaction.response.send_message(embed=unbanEmbed,
ephemeral=True)
else:
noPermissionsEmbed = discord.Embed(
title='Missing permissions',
description='You don\'t have permissions to do that.',
color=discord.Color.red())
noPermissionsEmbed.set_thumbnail(url=client.user.avatar.url)
noPermissionsEmbed.set_footer(text=footer)
await interaction.response.send_message(embed=noPermissionsEmbed,
ephemeral=True)
elif command_name == 'unban' and not commands['unban']:
commandDisabledEmbed = discord.Embed(
title='Command disabled',
description=
'This command was disabled in the bot config file. Ask a member with access to the bot to enable this command.'
)
commandDisabledEmbed.set_thumbnail(url=client.user.avatar.url)
commandDisabledEmbed.set_footer(text=footer)
await interaction.response.send_message(embed=commandDisabledEmbed,
ephemeral=True)
async def on_member_join(self, member):
async def log(text: str):
'''Log a text and save it in the logfile and the console.'''
logging.info(
str(datetime.datetime.now().strftime('%d.%m.%Y %T')) + ' -- ' +
str(text))
print(bot_functions.console.log(str(text)))
if not member == client.user:
channel = discord.utils.get(member.guild.text_channels,
name=welcomeChannel)
joinEmbed = discord.Embed(
title='Welcome!',
description='Hello <@!' + str(member.id) +
f'>! \nThank you for joining {member.guild.name}!')
joinEmbed.set_thumbnail(url=member.avatar.url)
joinEmbed.set_footer(text=footer)
await channel.send(embed=joinEmbed)
await member.add_roles(
discord.utils.get(member.guild.roles, name='member'))
await log('@' + str(member) + ' joined to ' + str(member.guild.name) +
'.')
async def on_member_remove(self, member):
async def log(text: str):
'''Log a text and save it in the logfile and the console.'''
logging.info(
str(datetime.datetime.now().strftime('%d.%m.%Y %T')) + ' -- ' +
str(text))
print(bot_functions.console.log(str(text)))
if not member == client.user:
channel = discord.utils.get(member.guild.text_channels,
name=goodbyeChannel)
leaveEmbed = discord.Embed(title='Goodbye!',
description='<@!' + str(member.id) +
f'> left {member.guild.name}.')
leaveEmbed.set_thumbnail(url=member.avatar.url)
leaveEmbed.set_footer(text=footer)
await channel.send(embed=leaveEmbed)
await log('@' + str(member) + ' left ' + str(member.guild.name) + '.')
async def on_disconnect(self):
async def error(text: str):
'''Send a error text and save it in the logfile.'''
logging.info(
str(datetime.datetime.now().strftime('%d.%m.%Y %T')) + ' -- Error: ' +
str(text))
print(bot_functions.console.error(str(text)))
await error('Bot disconected from discord.')
#Run
try:
client = Bot(intents=intents, max_messages=None)
client.run(token, log_handler=None)
except Exception as e:
print(bot_functions.console.error('Error while trying to connect to discord.\n' + str(e)))