bot: Added easier install
All checks were successful
Build Docker / Build Docker (push) Successful in 20s

This commit is contained in:
Nathan Woodburn 2023-08-12 16:52:01 +10:00
parent 21e3ab690c
commit 2b0477aee2
Signed by: nathanwoodburn
GPG Key ID: 203B000478AD0EF1
3 changed files with 38 additions and 10 deletions

4
.env.example Normal file
View File

@ -0,0 +1,4 @@
DISCORD_TOKEN=MYTOKEN
LINK_URL=https://l.woodburn.au
LINK_API_KEY=MYAPIKEY
ADMIN_ID=DISCORDID

View File

@ -1,3 +1,25 @@
# Woodburn Bot # Woodburn Bot
Discord bot for the Woodburn server. Discord bot for the Woodburn server.
This bot adds some Handshake related commands to the server. This bot adds some Handshake related commands to the server.
## Commands
- `/shortlink <url>` - Shorten a URL using Kutt.it (requires a Kutt API key) only allowed for specied user
# Setup
## Docker
The easiest way to run this bot is to use Docker. You can use the following command to run the bot:
```bash
docker run -d -e DISCORD_TOKEN=<YOUR-BOT-TOKEN> -e LINK_API_KEY=<KUTT-API-KEY> -e LINK_URL=<KUTT-URL> -e ADMIN=<your-discord-userid> -e LOG_CHANNEL=<DISCORD-CHANNEL-ID> git.woodburn.au/nathanwoodburn/woodburn-bot:latest
```
## Manual
If you don't want to use Docker, you can run the bot manually.
```bash
git clone https://git.woodburn.au/nathanwoodburn/woodburn-bot.git
cd woodburn-bot
python3 -m pip install -r requirements.txt
cp .env.example .env
# Edit .env and fill in your info
python3 main.py
```

20
bot.py
View File

@ -7,13 +7,17 @@ import dns.resolver
load_dotenv() load_dotenv()
TOKEN = os.getenv('DISCORD_TOKEN') TOKEN = os.getenv('DISCORD_TOKEN')
ADMINID = os.getenv('ADMIN_ID')
KUTT_APIKEY=os.getenv('LINK_API_KEY')
KUTT_URL=os.getenv('LINK_URL')
LOG_CHANNEL = os.getenv('LOG_CHANNEL')
intents = discord.Intents.default() intents = discord.Intents.default()
client = discord.Client(intents=intents) client = discord.Client(intents=intents)
tree = app_commands.CommandTree(client) tree = app_commands.CommandTree(client)
activityMessage="over the server" activityMessage="over the server"
statusType="watching" statusType="watching"
logChannel=1139449826287824996
# Commands # Commands
@tree.command(name="ping", description="Check bot connection") @tree.command(name="ping", description="Check bot connection")
@ -23,13 +27,12 @@ async def ping(ctx):
@tree.command(name="shortlink", description="Shorten a link") @tree.command(name="shortlink", description="Shorten a link")
async def shortlink(ctx, link: str, name: str = None): async def shortlink(ctx, link: str, name: str = None):
if (ctx.user.id != 892672018917519370): if (ctx.user.id != ADMINID):
await log("User: " + str(ctx.user.name) + " tried to use the shortlink command") await log("User: " + str(ctx.user.name) + " tried to use the shortlink command")
await ctx.response.send_message("You don't have permission to use this command",ephemeral=True) await ctx.response.send_message("You don't have permission to use this command",ephemeral=True)
else: else:
APIKEY=os.getenv('LINK_API_KEY') url=f"https://{KUTT_URL}/api/v2/links"
url="https://l.woodburn.au/api/v2/links" headers = {'X-API-KEY' : KUTT_APIKEY}
headers = {'X-API-KEY' : APIKEY}
data = {'target' : link, 'customurl' : name} data = {'target' : link, 'customurl' : name}
if (name == None): if (name == None):
@ -43,7 +46,7 @@ async def shortlink(ctx, link: str, name: str = None):
@tree.command(name="botstatus", description="Set the bot status") @tree.command(name="botstatus", description="Set the bot status")
async def botstatus(ctx, message: str, statusmethod: str = None): async def botstatus(ctx, message: str, statusmethod: str = None):
if (ctx.user.id != 892672018917519370): if (ctx.user.id != ADMINID):
await log("User: " + str(ctx.user.name) + " tried to use the botstatus command") await log("User: " + str(ctx.user.name) + " tried to use the botstatus command")
await ctx.response.send_message("You don't have permission to use this command",ephemeral=True) await ctx.response.send_message("You don't have permission to use this command",ephemeral=True)
else: else:
@ -60,8 +63,8 @@ async def botstatus(ctx, message: str, statusmethod: str = None):
@tree.command(name="dig", description="Dig a dns record") @tree.command(name="dig", description="Dig a dns record")
async def dig(ctx, domain: str, record_type: str = "A"): async def dig(ctx, domain: str, record_type: str = "A"):
record_type = record_type.upper() record_type = record_type.upper()
# Format dig @100.74.29.146 -p 5350 <domain> <type>
# Format dig @100.74.29.146 -p 5350 <domain> <type>
resolver = dns.resolver.Resolver() resolver = dns.resolver.Resolver()
resolver.nameservers = ["100.74.29.146"] resolver.nameservers = ["100.74.29.146"]
resolver.port = 5350 resolver.port = 5350
@ -98,9 +101,8 @@ async def curl(ctx, url: str):
async def invite(ctx): async def invite(ctx):
await ctx.response.send_message("https://discord.com/api/oauth2/authorize?client_id=1006128164218621972&permissions=0&scope=bot",ephemeral=True) await ctx.response.send_message("https://discord.com/api/oauth2/authorize?client_id=1006128164218621972&permissions=0&scope=bot",ephemeral=True)
async def log(message): async def log(message):
channel=client.get_channel(logChannel) channel=client.get_channel(LOG_CHANNEL)
await channel.send(message) await channel.send(message)
def updateStatus(): def updateStatus():