Untitled
unknown
plain_text
2 years ago
5.2 kB
7
Indexable
import discord
from discord.ext import commands
import os
import embed
import webserver
webserver.keep_alive()
prefix = "?" # your bot prefix between quotes
client = commands.Bot(command_prefix=prefix, intents=discord.Intents.all())
# Remove the default help command
client.remove_command("help")
@client.event
async def on_ready():
await client.change_presence(status=discord.Status.idle, activity=discord.Activity(type=discord.ActivityType.listening, name="?help"))
print(f"We have logged in as {client.user.name}")
@client.event
async def on_message(message):
if not message.author.bot:
if message.content.lower().startswith("?"):
await client.process_commands(message)
else:
response = await chatgpt_api_call(message.content)
if response:
await message.channel.send(f"```python\n{response}\n```")
async def chatgpt_api_call(message):
# You can add your ChatGPT API integration here
# Implement your logic to generate code using ChatGPT
@client.command()
async def hello(ctx):
"""
Greets the user with a hello message.
"""
hello_embed = embed.hello_embed()
await ctx.send(embed=hello_embed)
@client.command()
async def kick(ctx, member: discord.Member, *, reason=None):
"""
Kicks a member from the server.
Usage: ?kick [member] [reason]
"""
kick_embed = embed.kick_embed()
await member.kick(reason=reason)
await ctx.send(embed=kick_embed)
@client.command()
@commands.has_permissions(manage_messages=True)
async def purge(ctx, amount=5):
"""
Deletes a specified number of messages.
Usage: ?purge [amount]
"""
purge_embed = embed.purge_embed(amount)
# Delete the command message
await ctx.message.delete()
# Delete the specified number of messages (up to 100)
deleted = await ctx.channel.purge(limit=amount)
# Send a message indicating how many messages were deleted
message = await ctx.send(embed=purge_embed)
await message.delete(delay=5)
@client.command()
async def snipe(ctx):
"""
Retrieves the last deleted message in the channel.
"""
# Check if the channel has a deleted message to snipe
if ctx.channel.id not in sniped_messages:
await ctx.send("There's nothing to snipe!")
return
# Retrieve the last deleted message for the channel
message = sniped_messages[ctx.channel.id]
# Send the sniped message to the channel
snipe_embed = embed.snipe_embed(message)
await ctx.send(embed=snipe_embed)
@client.command()
async def ban(ctx, member: discord.Member, *, reason=None):
"""
Bans a member from the server.
Usage: ?ban [member] [reason]
"""
ban_embed = embed.ban_embed(member)
await member.ban(reason=reason)
await ctx.send(embed=ban_embed)
@client.command()
@commands.has_permissions(kick_members=True)
async def warn(ctx, member: discord.Member, reason: str = None):
"""
Warns a member in the server.
Usage: ?warn [member] [reason]
"""
warn_embed = embed.warn_embed(member, reason)
await ctx.send(embed=warn_embed)
try:
await member.send(embed=warn_embed)
except:
pass
@client.command(aliases=["calc", "c"])
async def calculate(ctx, *args):
"""
Evaluates a mathematical expression.
Usage: ?calculate [expression]
"""
try:
ans = eval(' '.join(args))
calculate_embed = embed.calculate_embed(ans)
await ctx.send(embed=calculate_embed)
except:
calculate_error_embed = embed.calculate_error_embed(ctx.author)
await ctx.send(embed=calculate_error_embed)
@client.command()
async def help(ctx, command_name=None):
if command_name:
# Get the specified command object
command = client.get_command(command_name)
if command:
# Send the command's description as an embed
command_embed = embed.command_help_embed(command.name, command.help)
await ctx.send(embed=command_embed)
else:
await ctx.send("Command not found.")
else:
# Send the general help message with a list of commands and descriptions
commands = {
"ban": "Bans a member from the server.",
"calculate": "Evaluates a mathematical expression.",
"hello": "Greets the user with a hello message.",
"kick": "Kicks a member from the server.",
"purge": "Deletes a specified number of messages.",
"snipe": "Retrieves the last deleted message in the channel.",
"warn": "Warns a member in the server."
# Add more commands and descriptions here...
}
help_embed = embed.help_embed(commands)
await ctx.send(embed=help_embed)
# Create a dictionary to store the last deleted message in each channel
sniped_messages = {}
@client.event
async def on_message_delete(message):
# Store the last deleted message for each channel in the sniped_messages dictionary
sniped_messages[message.channel.id] = message
TOKEN = os.getenv("DISCORD_TOKEN") or os.environ["DISCORD_TOKEN"]
client.run(TOKEN)
Editor is loading...