add moviebot
This commit is contained in:
commit
82fdec04ff
|
@ -0,0 +1,3 @@
|
||||||
|
TOKEN=<TOKEN>
|
||||||
|
MOVIE_CHANNEL=movies
|
||||||
|
BOT_NAME=MovieBot
|
|
@ -0,0 +1,13 @@
|
||||||
|
# syntax=docker/dockerfile:1
|
||||||
|
|
||||||
|
FROM python:3.8-slim-buster
|
||||||
|
|
||||||
|
RUN mkdir app
|
||||||
|
COPY requirements.txt /app
|
||||||
|
COPY discordbot.py /app
|
||||||
|
|
||||||
|
WORKDIR /app
|
||||||
|
|
||||||
|
RUN pip install -r requirements.txt
|
||||||
|
|
||||||
|
CMD ["python", "discordbot.py"]
|
|
@ -0,0 +1,112 @@
|
||||||
|
#!/usr/bin/python3
|
||||||
|
|
||||||
|
from dotenv import dotenv_values
|
||||||
|
from discord.ext import commands
|
||||||
|
from tinydb import TinyDB
|
||||||
|
import random
|
||||||
|
import discord
|
||||||
|
|
||||||
|
db = TinyDB('./db.json')
|
||||||
|
movies = db.table('movies')
|
||||||
|
|
||||||
|
# TODO: validate .env
|
||||||
|
env = dotenv_values()
|
||||||
|
|
||||||
|
activity = discord.Game(name="!help in #movies")
|
||||||
|
bot = commands.Bot(command_prefix='!', activity=activity, status=discord.Status.online, help_command=None)
|
||||||
|
bot.remove_command('help')
|
||||||
|
|
||||||
|
|
||||||
|
@bot.event
|
||||||
|
async def on_ready():
|
||||||
|
print(f'{bot.user.name} has connected to Discord!')
|
||||||
|
|
||||||
|
|
||||||
|
@bot.command('add', help='Adds to the watchlist')
|
||||||
|
async def add(ctx):
|
||||||
|
if not validateCommand(ctx):
|
||||||
|
return
|
||||||
|
|
||||||
|
movie_link = ctx.message.content[5:]
|
||||||
|
data = {
|
||||||
|
'author': ctx.author.name,
|
||||||
|
'link': movie_link
|
||||||
|
}
|
||||||
|
|
||||||
|
movies.insert(data)
|
||||||
|
await ctx.send(f"Added <{movie_link}> to the list")
|
||||||
|
|
||||||
|
|
||||||
|
@bot.command('rm', help='Removes a movie by id')
|
||||||
|
async def remove(ctx):
|
||||||
|
if not validateCommand(ctx):
|
||||||
|
return
|
||||||
|
id = int(ctx.message.content[4:])
|
||||||
|
response = movies.get(doc_id=id)
|
||||||
|
|
||||||
|
if response is None:
|
||||||
|
await ctx.send(f"Could not find Movie with id {id} in the watchlist")
|
||||||
|
else:
|
||||||
|
movies.remove(doc_ids=[id])
|
||||||
|
await ctx.send(f'removed <{response["link"]}> from the watchlist')
|
||||||
|
|
||||||
|
|
||||||
|
@bot.command('list', help='Shows all movies.', aliases=["l"])
|
||||||
|
async def list(ctx):
|
||||||
|
if not validateCommand(ctx):
|
||||||
|
return
|
||||||
|
raw = movies.all()
|
||||||
|
formatted = "Current watchlist: Part I"
|
||||||
|
|
||||||
|
parts = 2
|
||||||
|
index = 0
|
||||||
|
for mov in raw:
|
||||||
|
formatted += f'\n[{mov.doc_id}] [{mov["author"]}] <{mov["link"]}>'
|
||||||
|
index += 1
|
||||||
|
if index == 20:
|
||||||
|
await ctx.send(formatted)
|
||||||
|
index = 0
|
||||||
|
formatted = "Part: " + "I" * parts
|
||||||
|
parts += 1
|
||||||
|
|
||||||
|
await ctx.send(formatted)
|
||||||
|
|
||||||
|
@bot.command('random', help='Selects a random movie', aliases=["rnd"])
|
||||||
|
async def rand(ctx):
|
||||||
|
if not validateCommand(ctx):
|
||||||
|
return
|
||||||
|
all = movies.all()
|
||||||
|
mov = random.choice(all)
|
||||||
|
out = f"Choosing out of {len(all)} movies:\n"
|
||||||
|
out += "...\n"
|
||||||
|
out += "...\n"
|
||||||
|
out += "...\n"
|
||||||
|
out += f'I have chosen [{mov.doc_id}] <{mov["link"]}> proposed by [{mov["author"]}]\n'
|
||||||
|
await ctx.send(out)
|
||||||
|
|
||||||
|
@bot.command('help')
|
||||||
|
async def help(ctx):
|
||||||
|
if not validateCommand(ctx):
|
||||||
|
return
|
||||||
|
out = "```"
|
||||||
|
out += "*" + env["BOT_NAME"] + " 3000*\n\n"
|
||||||
|
out += "add Adds to the watchlist\n"
|
||||||
|
out += "help Shows this message\n"
|
||||||
|
out += "list Shows all movies.\n"
|
||||||
|
out += "random Selects a random movie\n"
|
||||||
|
out += 'rm Removes a movie by id\n'
|
||||||
|
|
||||||
|
out += "\n"
|
||||||
|
out += "If you have further questions @SpeckiJ#5233\n"
|
||||||
|
out += "```"
|
||||||
|
|
||||||
|
await ctx.send(out)
|
||||||
|
|
||||||
|
def validateCommand(ctx):
|
||||||
|
if ctx.author == bot.user:
|
||||||
|
return False
|
||||||
|
if ctx.channel.name != env["MOVIE_CHANNEL"]:
|
||||||
|
return False
|
||||||
|
return True
|
||||||
|
|
||||||
|
bot.run(env["TOKEN"], bot=True)
|
|
@ -0,0 +1,3 @@
|
||||||
|
python-dotenv
|
||||||
|
discord.py
|
||||||
|
tinydb
|
Loading…
Reference in New Issue