2023-08-11 15:55:44 +10:00
|
|
|
import os
|
|
|
|
from dotenv import load_dotenv
|
|
|
|
import discord
|
|
|
|
from discord import app_commands
|
2023-08-11 16:35:36 +10:00
|
|
|
import requests
|
2023-08-11 17:24:11 +10:00
|
|
|
import dns.resolver
|
2023-08-11 15:55:44 +10:00
|
|
|
|
|
|
|
|
|
|
|
load_dotenv()
|
|
|
|
TOKEN = os.getenv('DISCORD_TOKEN')
|
|
|
|
|
|
|
|
intents = discord.Intents.default()
|
|
|
|
client = discord.Client(intents=intents)
|
|
|
|
tree = app_commands.CommandTree(client)
|
2023-08-11 16:35:36 +10:00
|
|
|
activityMessage="over the server"
|
|
|
|
statusType="watching"
|
2023-08-11 16:49:20 +10:00
|
|
|
logChannel=1139449826287824996
|
2023-08-11 15:55:44 +10:00
|
|
|
|
|
|
|
# Commands
|
|
|
|
@tree.command(name="ping", description="Check bot connection")
|
|
|
|
async def ping(ctx):
|
2023-08-11 16:55:18 +10:00
|
|
|
await log("User: " + str(ctx.user.name) + " used the ping command")
|
2023-08-11 15:55:44 +10:00
|
|
|
await ctx.response.send_message("Pong!",ephemeral=True)
|
|
|
|
|
2023-08-11 16:35:36 +10:00
|
|
|
@tree.command(name="shortlink", description="Shorten a link")
|
|
|
|
async def shortlink(ctx, link: str, name: str = None):
|
|
|
|
if (ctx.user.id != 892672018917519370):
|
2023-08-11 16:55:18 +10:00
|
|
|
await log("User: " + str(ctx.user.name) + " tried to use the shortlink command")
|
2023-08-11 16:35:36 +10:00
|
|
|
await ctx.response.send_message("You don't have permission to use this command",ephemeral=True)
|
|
|
|
else:
|
|
|
|
APIKEY=os.getenv('LINK_API_KEY')
|
|
|
|
url="https://l.woodburn.au/api/v2/links"
|
|
|
|
headers = {'X-API-KEY' : APIKEY}
|
|
|
|
|
|
|
|
data = {'target' : link, 'customurl' : name}
|
|
|
|
if (name == None):
|
|
|
|
data = {'target' : link}
|
|
|
|
x = requests.post(url, data = data, headers = headers)
|
|
|
|
print(x.text)
|
|
|
|
if (x.status_code != 200 and x.status_code != 201):
|
|
|
|
await ctx.response.send_message("ERROR: " + x.text,ephemeral=True)
|
|
|
|
link=x.json()['link']
|
|
|
|
await ctx.response.send_message("Link: " + link,ephemeral=False)
|
|
|
|
|
|
|
|
@tree.command(name="botstatus", description="Set the bot status")
|
|
|
|
async def botstatus(ctx, message: str, statusmethod: str = None):
|
|
|
|
if (ctx.user.id != 892672018917519370):
|
2023-08-11 16:55:18 +10:00
|
|
|
await log("User: " + str(ctx.user.name) + " tried to use the botstatus command")
|
2023-08-11 16:35:36 +10:00
|
|
|
await ctx.response.send_message("You don't have permission to use this command",ephemeral=True)
|
|
|
|
else:
|
|
|
|
global activityMessage
|
|
|
|
activityMessage=message
|
|
|
|
global statusType
|
|
|
|
if (statusmethod == None):
|
|
|
|
statusmethod="watching"
|
|
|
|
else:
|
|
|
|
statusType=statusmethod.lower()
|
|
|
|
updateStatus()
|
|
|
|
await ctx.response.send_message("Status updated",ephemeral=True)
|
2023-08-11 15:55:44 +10:00
|
|
|
|
2023-08-11 17:24:11 +10:00
|
|
|
@tree.command(name="dig", description="Dig a dns record")
|
|
|
|
async def dig(ctx, domain: str, record_type: str = "A"):
|
|
|
|
record_type = record_type.upper()
|
|
|
|
# Format dig @100.74.29.146 -p 5350 <domain> <type>
|
|
|
|
|
|
|
|
resolver = dns.resolver.Resolver()
|
|
|
|
resolver.nameservers = ["100.74.29.146"]
|
|
|
|
resolver.port = 5350
|
|
|
|
try:
|
|
|
|
# Query the DNS record
|
2023-08-11 17:30:07 +10:00
|
|
|
response = resolver.resolve(domain, record_type)
|
2023-08-11 17:24:11 +10:00
|
|
|
print(response)
|
|
|
|
records = ""
|
|
|
|
for record in response:
|
|
|
|
print(record)
|
|
|
|
records = records + "\n" + str(record)
|
|
|
|
|
|
|
|
# Send the result to the Discord channel
|
|
|
|
await ctx.response.send_message(f"DNS records for {domain} ({record_type}):{records}")
|
|
|
|
|
|
|
|
except dns.resolver.NXDOMAIN:
|
|
|
|
await ctx.response.send_message(f"Domain {domain} not found.")
|
|
|
|
except dns.exception.DNSException as e:
|
|
|
|
await ctx.response.send_message(f"An error occurred: {e}")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2023-08-11 16:55:18 +10:00
|
|
|
|
|
|
|
async def log(message):
|
|
|
|
channel=client.get_channel(logChannel)
|
|
|
|
await channel.send(message)
|
|
|
|
|
2023-08-11 15:55:44 +10:00
|
|
|
def updateStatus():
|
2023-08-11 16:35:36 +10:00
|
|
|
global activityMessage
|
|
|
|
global statusType
|
|
|
|
if (statusType == "watching"):
|
|
|
|
activity=discord.Activity(type=discord.ActivityType.watching, name=activityMessage)
|
|
|
|
elif (statusType == "playing"):
|
|
|
|
activity=discord.Activity(type=discord.ActivityType.playing, name=activityMessage)
|
|
|
|
elif (statusType == "listening"):
|
|
|
|
activity=discord.Activity(type=discord.ActivityType.listening, name=activityMessage)
|
|
|
|
elif (statusType == "competing"):
|
|
|
|
activity=discord.Activity(type=discord.ActivityType.competing, name=activityMessage)
|
|
|
|
else:
|
|
|
|
activity=discord.Activity(type=discord.ActivityType.watching, name=activityMessage)
|
2023-08-11 15:55:44 +10:00
|
|
|
client.loop.create_task(client.change_presence(activity=activity))
|
|
|
|
|
|
|
|
# When the bot is ready
|
|
|
|
@client.event
|
|
|
|
async def on_ready():
|
|
|
|
await tree.sync()
|
|
|
|
print("Ready!")
|
|
|
|
updateStatus()
|
|
|
|
|
|
|
|
client.run(TOKEN)
|