prepare the help module and general cleanup of files
This commit is contained in:
9
.gitignore
vendored
Normal file
9
.gitignore
vendored
Normal file
@@ -0,0 +1,9 @@
|
||||
jeevesbot/env.py
|
||||
jeevesbot/secret.json
|
||||
logs/
|
||||
__init__.py
|
||||
*.pyc
|
||||
__pycache__/*
|
||||
cogs/__pycache__/*
|
||||
jeevesbot/__pycache__/*
|
||||
.vscode/
|
||||
14
Makefile
14
Makefile
@@ -1,5 +1,5 @@
|
||||
init:
|
||||
pip install -r requirements.txt
|
||||
pip install -r requirements.txt
|
||||
|
||||
install:
|
||||
mkdir logs
|
||||
@@ -7,14 +7,12 @@ install:
|
||||
cp jeevesbot/secret.json.dist jeevesbot/secret.json
|
||||
|
||||
clearlog:
|
||||
rm jeeves.log
|
||||
rm logs/jeeves.log*
|
||||
|
||||
clean:
|
||||
rm jeeves.log
|
||||
rm logs/jeeves.log*
|
||||
rm jeevesbot/env.py
|
||||
rm jeevesbot/secret.json
|
||||
rm -rf jeevesbot/__pycache/
|
||||
rm -rf __pycache/
|
||||
|
||||
lint:
|
||||
pylint jeeves.py jeevesbot/
|
||||
rm -rf cogs/__pycache__/
|
||||
rm -rf jeevesbot/__pycache__/
|
||||
rm -rf __pycache__/
|
||||
@@ -8,23 +8,27 @@ from discord import User, errors, TextChannel, Forbidden
|
||||
# setup logging
|
||||
log = getLogger(__name__)
|
||||
|
||||
|
||||
embed = discord.Embed()
|
||||
|
||||
class Admin(commands.Cog):
|
||||
|
||||
class Admin(commands.Cog):
|
||||
""" Admin Commands, Use at own risk. """
|
||||
def __init__(self, bot):
|
||||
self.bot = bot
|
||||
|
||||
|
||||
@commands.command(name='purge', hidden=True)
|
||||
@commands.is_owner()
|
||||
@commands.has_permissions(administrator=True)
|
||||
async def purge(self, ctx, amount=1):
|
||||
""" Purge <n> messages from current channel"""
|
||||
await ctx.message.delete()
|
||||
await ctx.channel.purge(limit = amount)
|
||||
log.warn(f'{ctx.message.author} purged {amount} messages')
|
||||
|
||||
|
||||
@commands.command(name='purge_from', hidden=True)
|
||||
@commands.is_owner()
|
||||
@commands.has_permissions(administrator=True)
|
||||
async def purge_from(self, ctx, message_id: int):
|
||||
"""Purge all messages after the given message.id"""
|
||||
try:
|
||||
@@ -37,15 +41,14 @@ class Admin(commands.Cog):
|
||||
log.info(f'{ctx.message.author} purged all messages after {message_id}')
|
||||
return True
|
||||
|
||||
|
||||
@commands.command(name='purge_user', hidden=True)
|
||||
@commands.is_owner()
|
||||
async def purge_user(self, ctx, user: User, num_minutes: typing.Optional[int] = 5):
|
||||
"""Clear all messages of <user.id> in all channels within the last [n=5] minutes"""
|
||||
after = ctx.message.created_at - timedelta(minutes=num_minutes)
|
||||
|
||||
def check(msg):
|
||||
return msg.author.id == user.id
|
||||
|
||||
for channel in await ctx.guild.fetch_channels():
|
||||
if type(channel) is TextChannel:
|
||||
try:
|
||||
@@ -54,9 +57,11 @@ class Admin(commands.Cog):
|
||||
except Forbidden:
|
||||
continue
|
||||
|
||||
|
||||
@commands.Cog.listener()
|
||||
async def on_ready(self):
|
||||
log.info(f'module active')
|
||||
|
||||
|
||||
async def setup(bot):
|
||||
await bot.add_cog(Admin(bot))
|
||||
@@ -9,6 +9,7 @@ e = discord.Embed()
|
||||
|
||||
|
||||
class Flair(commands.Cog):
|
||||
""" This part of the bot is responsible for giving users roles! """
|
||||
def __init__(self, bot):
|
||||
self.bot = bot
|
||||
self.message_id = 1084937456819908679
|
||||
@@ -24,6 +25,7 @@ class Flair(commands.Cog):
|
||||
'🔞' : env.FLAIRROLES[8],
|
||||
}
|
||||
|
||||
|
||||
@commands.Cog.listener()
|
||||
async def on_raw_reaction_add(self, payload):
|
||||
try:
|
||||
@@ -39,6 +41,7 @@ class Flair(commands.Cog):
|
||||
except:
|
||||
log.debug("Reaction not found.")
|
||||
|
||||
|
||||
@commands.Cog.listener()
|
||||
async def on_raw_reaction_remove(self, payload):
|
||||
try:
|
||||
@@ -52,42 +55,11 @@ class Flair(commands.Cog):
|
||||
except:
|
||||
log.debug("Could not remove role")
|
||||
|
||||
@commands.command(name='flairsetup', hidden=True)
|
||||
@commands.is_owner()
|
||||
async def flairsetup(self, ctx):
|
||||
""" Setup reaction post as embed. """
|
||||
await ctx.message.delete()
|
||||
embed = discord.Embed(title="Kies je rollen!",
|
||||
description="Klik op de emoji onder het bericht om de rol te krijgen.")
|
||||
embed.add_field(name="", value="", inline=False)
|
||||
embed.add_field(name="Voornaamwoorden:", value="", inline=False)
|
||||
embed.add_field(name=":one:", value="hij/hem")
|
||||
embed.add_field(name=":two:", value="zij/haar")
|
||||
embed.add_field(name=":three:", value="hen/hun")
|
||||
embed.add_field(name=":four:", value="die/hun")
|
||||
embed.add_field(name=":five:", value="die/diens")
|
||||
embed.add_field(name=":six:", value="iedere/all")
|
||||
embed.add_field(name="Sta je open voor Direct Messages van andere serverleden?", value="", inline=False)
|
||||
embed.add_field(name=":thumbsup:", value="DM: ja")
|
||||
embed.add_field(name=":thumbsdown:", value="DM: nee")
|
||||
embed.add_field(name="Rollen voor toegang tot opt-in kanalen.", value="", inline=False)
|
||||
embed.add_field(name=":underage:", value="serieuze-onderwerpen")
|
||||
embed.set_footer(text="Mis je een voornaamwoord of heb je ideeën voor een andere rol? Laat het de mods weten in de #ideeënbus!\nJe kan zelf je rollen verwijderen door opnieuw op de emoji te drukken.")
|
||||
message = await ctx.send(embed=embed)
|
||||
await message.add_reaction("1️⃣")
|
||||
await message.add_reaction("2️⃣")
|
||||
await message.add_reaction("3️⃣")
|
||||
await message.add_reaction("4️⃣")
|
||||
await message.add_reaction("5️⃣")
|
||||
await message.add_reaction("6️⃣")
|
||||
await message.add_reaction("👍")
|
||||
await message.add_reaction("👎")
|
||||
await message.add_reaction("🔞")
|
||||
log.warn(f'{ctx.message.author} reset the flair embed, new message_id = {message.id}')
|
||||
|
||||
@commands.Cog.listener()
|
||||
async def on_ready(self):
|
||||
log.info(f'module active')
|
||||
|
||||
|
||||
async def setup(bot):
|
||||
await bot.add_cog(Flair(bot))
|
||||
@@ -1,6 +1,5 @@
|
||||
import discord
|
||||
from discord.ext import commands
|
||||
import logging
|
||||
from jeevesbot import functions, babbelbingo
|
||||
from logging import getLogger
|
||||
|
||||
@@ -13,14 +12,46 @@ e = discord.Embed()
|
||||
|
||||
|
||||
class Games(commands.Cog):
|
||||
|
||||
|
||||
""" Deze commando's zijn gerelateerd aan spelletjes op de Discord server. """
|
||||
def __init__(self, bot):
|
||||
self.bot = bot
|
||||
|
||||
|
||||
@commands.command()
|
||||
@commands.guild_only()
|
||||
async def bingo(self, ctx):
|
||||
""" Maak een babbelbingo kaart (staat niet altijd aan) """
|
||||
name = ctx.message.author.name
|
||||
bingocard = babbelbingo.bingo(name)
|
||||
await ctx.author.send(file=discord.File(bingocard))
|
||||
|
||||
|
||||
@commands.command()
|
||||
async def roll(self, ctx):
|
||||
""" Roll the dice!
|
||||
|
||||
Simple rolls
|
||||
!roll 1d20+6
|
||||
!roll 1d20-(2+6)
|
||||
!roll 1d20-4+(1d4+3)
|
||||
|
||||
Advanced rolls
|
||||
!roll 1d20x(N)
|
||||
exploding dice, will add extra dice on each roll above threshold N. If N is not defined, will default to maximum possible roll.
|
||||
!roll 6d6^(N)
|
||||
highest N dicerolls will be kept, so 6d6^2 will keep the highest two dice.
|
||||
!roll 6d6m(N)
|
||||
middle N dicerolls will be kept, so 6d6m2 will keep the middle two dice.
|
||||
!roll 6d6v(N)
|
||||
lowest N dicerolls will be kept, so 6d6l2 wil keep the lowest two dice.
|
||||
!roll 2d6r(N)
|
||||
will reroll any dice that are below threshold N. The reroll is possible to be below the threshold N.
|
||||
!roll 2d6rr(N)
|
||||
will reroll any dice that are below threshold N. The reroll will be at the very minimum threshold N.
|
||||
!roll 10d10s
|
||||
will sort the rolls in order, this will not change the result.
|
||||
|
||||
"""
|
||||
parameters = ctx.message.content.split(' ', 1)
|
||||
if len(parameters) == 2:
|
||||
param = parameters[1]
|
||||
@@ -31,14 +62,6 @@ class Games(commands.Cog):
|
||||
await ctx.send(msg)
|
||||
|
||||
|
||||
@commands.command()
|
||||
@commands.guild_only()
|
||||
async def bingo(self, ctx):
|
||||
name = ctx.message.author.name
|
||||
bingocard = babbelbingo.bingo(name)
|
||||
await ctx.author.send(file=discord.File(bingocard))
|
||||
|
||||
|
||||
@commands.Cog.listener()
|
||||
async def on_ready(self):
|
||||
log.info(f'module active')
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
import discord
|
||||
from discord.ext import commands
|
||||
import logging
|
||||
from jeevesbot import functions
|
||||
from logging import getLogger
|
||||
|
||||
@@ -13,7 +12,7 @@ e = discord.Embed()
|
||||
|
||||
|
||||
class Gif(commands.Cog):
|
||||
|
||||
""" Ensures that high-risk channels don't display embedded links, but only gifs."""
|
||||
|
||||
def __init__(self, bot):
|
||||
self.bot = bot
|
||||
|
||||
55
cogs/help.py
Normal file
55
cogs/help.py
Normal file
@@ -0,0 +1,55 @@
|
||||
import discord
|
||||
from discord.ext import commands
|
||||
from logging import getLogger
|
||||
|
||||
# setup logging
|
||||
log = getLogger(__name__)
|
||||
e = discord.Embed()
|
||||
|
||||
|
||||
class CustomHelp(commands.Cog):
|
||||
""" Help """
|
||||
def __init__(self, bot):
|
||||
self.bot = bot
|
||||
|
||||
|
||||
@commands.command()
|
||||
async def help(self, ctx):
|
||||
""" Help """
|
||||
await ctx.message.delete()
|
||||
with open("help/help.md", "r") as f:
|
||||
contents = f.read()
|
||||
embed = discord.Embed(title="Help", description=contents, color=discord.Color.blue())
|
||||
await ctx.author.send(embed=embed)
|
||||
log.warn(f'{ctx.message.author} asked for help!')
|
||||
|
||||
|
||||
@commands.command()
|
||||
async def info(self, ctx):
|
||||
""" Info about Jeeves """
|
||||
await ctx.message.delete()
|
||||
with open("help/info.md", "r") as f:
|
||||
contents = f.read()
|
||||
embed = discord.Embed(title="Info over Jeeves", description=contents, color=discord.Color.yellow())
|
||||
await ctx.author.send(embed=embed)
|
||||
log.warn(f'{ctx.message.author} asked for info!')
|
||||
|
||||
|
||||
@commands.command(hidden=True)
|
||||
@commands.is_owner()
|
||||
async def adminhelp(self, ctx):
|
||||
""" Admin Help """
|
||||
await ctx.message.delete()
|
||||
with open("help/adminhelp.md", "r") as f:
|
||||
contents = f.read()
|
||||
embed = discord.Embed(title="Admin Help", description=contents, color=discord.Color.red())
|
||||
await ctx.author.send(embed=embed)
|
||||
log.warn(f'{ctx.message.author} asked for adminhelp!')
|
||||
|
||||
|
||||
@commands.Cog.listener()
|
||||
async def on_ready(self):
|
||||
log.info(f'module active')
|
||||
|
||||
async def setup(bot):
|
||||
await bot.add_cog(CustomHelp(bot))
|
||||
@@ -11,7 +11,7 @@ e = discord.Embed()
|
||||
|
||||
|
||||
class Links(commands.Cog):
|
||||
|
||||
""" Handige linkjes! """
|
||||
|
||||
def __init__(self, bot):
|
||||
self.bot = bot
|
||||
@@ -19,12 +19,32 @@ class Links(commands.Cog):
|
||||
|
||||
@commands.command()
|
||||
async def youtube(self, ctx):
|
||||
""" LARP Platform YouTube kanaal """
|
||||
await ctx.send('https://www.youtube.com/channel/UCTAnkjUOud_HdKhY_hi2ISA')
|
||||
|
||||
|
||||
@commands.command()
|
||||
async def donatie(self, ctx):
|
||||
await ctx.send('<https://bunq.me/larpzomerfestival>')
|
||||
""" LARP Platform / Stichting Verhaal in Uitvoering Donatie"""
|
||||
await ctx.send('<https://bunq.me/larpplatform>')
|
||||
|
||||
|
||||
@commands.command()
|
||||
async def agenda(self, ctx):
|
||||
""" LARP Agenda"""
|
||||
await ctx.send('<https://www.larp-platform.nl/kalender/>')
|
||||
|
||||
|
||||
@commands.command()
|
||||
async def evenementen(self, ctx):
|
||||
""" LARP Agenda Evenementenoverzicht"""
|
||||
await ctx.send('<https://www.larp-platform.nl/evenementenoverzicht/>')
|
||||
|
||||
|
||||
@commands.command()
|
||||
async def organisaties(self, ctx):
|
||||
""" LARP Agenda Organisatieoverzicht"""
|
||||
await ctx.send('<https://www.larp-platform.nl/organisaties/>')
|
||||
|
||||
|
||||
@commands.Cog.listener()
|
||||
|
||||
@@ -11,7 +11,7 @@ e = discord.Embed()
|
||||
|
||||
|
||||
class Misc(commands.Cog):
|
||||
|
||||
""" Van alles en nog wat. """
|
||||
|
||||
def __init__(self, bot):
|
||||
self.bot = bot
|
||||
|
||||
63
cogs/setup.py
Normal file
63
cogs/setup.py
Normal file
@@ -0,0 +1,63 @@
|
||||
import discord
|
||||
from discord.ext import commands
|
||||
from logging import getLogger
|
||||
from jeevesbot import env
|
||||
|
||||
|
||||
# setup logging
|
||||
log = getLogger(__name__)
|
||||
|
||||
embed = discord.Embed()
|
||||
|
||||
class BotSetup(commands.Cog):
|
||||
""" Admin Commands, Use at own risk. """
|
||||
def __init__(self, bot):
|
||||
self.bot = bot
|
||||
self.botchannel = int(env.BOTCHANNEL[0])
|
||||
|
||||
|
||||
@commands.command(hidden=True)
|
||||
@commands.is_owner()
|
||||
async def flairsetup(self, ctx):
|
||||
""" Setup reaction post as embed. """
|
||||
await ctx.message.delete()
|
||||
channel_id = ctx.channel.id
|
||||
if (channel_id) == (self.botchannel):
|
||||
embed = discord.Embed(title="Kies je rollen!",
|
||||
description="Klik op de emoji onder het bericht om de rol te krijgen.")
|
||||
embed.add_field(name="", value="", inline=False)
|
||||
embed.add_field(name="Voornaamwoorden:", value="", inline=False)
|
||||
embed.add_field(name=":one:", value="hij/hem")
|
||||
embed.add_field(name=":two:", value="zij/haar")
|
||||
embed.add_field(name=":three:", value="hen/hun")
|
||||
embed.add_field(name=":four:", value="die/hun")
|
||||
embed.add_field(name=":five:", value="die/diens")
|
||||
embed.add_field(name=":six:", value="iedere/all")
|
||||
embed.add_field(name="Sta je open voor Direct Messages van andere serverleden?", value="", inline=False)
|
||||
embed.add_field(name=":thumbsup:", value="DM: ja")
|
||||
embed.add_field(name=":thumbsdown:", value="DM: nee")
|
||||
embed.add_field(name="Rollen voor toegang tot opt-in kanalen.", value="", inline=False)
|
||||
embed.add_field(name=":underage:", value="serieuze-onderwerpen")
|
||||
embed.set_footer(text="Mis je een voornaamwoord of heb je ideeën voor een andere rol? Laat het de mods weten in de #ideeënbus!\nJe kan zelf je rollen verwijderen door opnieuw op de emoji te drukken.")
|
||||
message = await ctx.send(embed=embed)
|
||||
await message.add_reaction("1️⃣")
|
||||
await message.add_reaction("2️⃣")
|
||||
await message.add_reaction("3️⃣")
|
||||
await message.add_reaction("4️⃣")
|
||||
await message.add_reaction("5️⃣")
|
||||
await message.add_reaction("6️⃣")
|
||||
await message.add_reaction("👍")
|
||||
await message.add_reaction("👎")
|
||||
await message.add_reaction("🔞")
|
||||
log.warn(f'{ctx.message.author} reset the flair embed, new message_id = {message.id}')
|
||||
else:
|
||||
log.warn(f'{ctx.message.author} tried setting up the flair in the wrong channel')
|
||||
|
||||
|
||||
@commands.Cog.listener()
|
||||
async def on_ready(self):
|
||||
log.info(f'module active')
|
||||
|
||||
|
||||
async def setup(bot):
|
||||
await bot.add_cog(BotSetup(bot))
|
||||
22
help/adminhelp.md
Normal file
22
help/adminhelp.md
Normal file
@@ -0,0 +1,22 @@
|
||||
|
||||
__These commands are very destructive and should be used with care.__
|
||||
|
||||
`!purge <n>`
|
||||
Purge <n> messages from current channel.
|
||||
|
||||
`!purge_from <message.id>`
|
||||
Purge all messages after the given <message.id>
|
||||
|
||||
`!purge_user <user.id> <n>`
|
||||
Clear all messages of <user.id> in all channels within the last <n> minutes (n is optional, default 5 minutes)
|
||||
|
||||
All purge commands also delete their own message.
|
||||
|
||||
---
|
||||
|
||||
`!flairsetup`
|
||||
Can be used to reset the flair embed for Jeeves. Needs manual steps to fix the bot giving out roles. Don't use unless you know what you're doing.
|
||||
|
||||
---
|
||||
|
||||
*To easily copy IDs of discord items, turn on Developer Mode in Advanced settings in your profile. After this, you can right click on almost all items in discord to get the "Copy ID" option.*
|
||||
17
help/help.md
Normal file
17
help/help.md
Normal file
@@ -0,0 +1,17 @@
|
||||
|
||||
** Games **
|
||||
`!roll <xdx>`
|
||||
Rolt dobbelstenen voor je! De standaard notatie is xdx, maar ook ingewikkelde rolls zijn mogelijk. Zie `!info` voor meer informatie.
|
||||
|
||||
`!bingo`
|
||||
Maakt een Babbelbingo kaart voor je aan. Deze optie wordt doorgaans alleen aangezet tijdens digitale evenementen.
|
||||
|
||||
** Links **
|
||||
`!youtube`
|
||||
`!donatie`
|
||||
`!agenda`
|
||||
`!evenementen`
|
||||
`!organisaties`
|
||||
|
||||
** Misc **
|
||||
`!eirik`
|
||||
26
help/info.md
Normal file
26
help/info.md
Normal file
@@ -0,0 +1,26 @@
|
||||
|
||||
** GIFs **
|
||||
** Flair **
|
||||
|
||||
** Extra informatie voor het !roll commando **
|
||||
|
||||
- Simpele rolls
|
||||
`!roll 1d20+6`
|
||||
`!roll 1d20-(2+6)`
|
||||
`!roll 1d20-4+(1d4+3)`
|
||||
|
||||
- Geavanceerde rolls
|
||||
`!roll 1d20x<N>`
|
||||
exploding dice, voegt een extra roll toe voor ieder resultaat boven (N). als N niet is gedefinieerd, wordt de hoogste mogelijke rol aangenomen.
|
||||
`!roll 6d6^(N)`
|
||||
hoogste (N) rolls worden gehouden, dus 6d6^2 houdt de hoogste twee rolls.
|
||||
`!roll 6d6m(N)`
|
||||
middelste (N) rolls worden gehouden, dus 6d6m2 houdt de middelste twee rolls.
|
||||
`!roll 6d6v(N)`
|
||||
laagste (N) rolls worden gehouden, dus 6d6v2 houdt de laagste twee rolls.
|
||||
`!roll 2d6r(N)`
|
||||
rollt alle resultaten beneden (N) opnieuw. Het is mogelijk voor de reroll om onder (N) uit te komen.
|
||||
`!roll 2d6rr(N)`
|
||||
rollt alle resultaten beneden (N) opnieuw. De reroll zal minimaal (N) zijn, mogelijk hoger.
|
||||
`!roll 10d10s`
|
||||
Sorteert alle rolls van laag naar hoog, dit veranderd het resultaat verder niet.
|
||||
10
jeeves.py
10
jeeves.py
@@ -15,11 +15,13 @@ logging.config.dictConfig(log.LOGGING)
|
||||
# setup logging
|
||||
log = getLogger(__name__)
|
||||
|
||||
|
||||
# setup discord.py bot
|
||||
intents = discord.Intents().all()
|
||||
bot = commands.Bot(command_prefix='!', intents=intents)
|
||||
bot = commands.Bot(command_prefix='!', intents=intents, help_command=None)
|
||||
e = discord.Embed()
|
||||
|
||||
|
||||
@bot.command(name='load', hidden=True)
|
||||
@commands.has_permissions(administrator=True)
|
||||
async def load(ctx, extension):
|
||||
@@ -41,20 +43,24 @@ async def reload(ctx, extension):
|
||||
bot.load_extension(f'cogs.{extension}')
|
||||
log.info(f'{ctx.message.author} reloaded the {extension} module')
|
||||
|
||||
|
||||
async def load_extensions():
|
||||
for filename in os.listdir('./cogs'):
|
||||
if filename.endswith('.py'):
|
||||
await bot.load_extension(f'cogs.{filename[:-3]}')
|
||||
|
||||
|
||||
@bot.event
|
||||
async def on_ready():
|
||||
print('### Active with id %s as %s ###' % (bot.user.id,bot.user.name) )
|
||||
log.info(f'Active with ID:{bot.user.id} as {bot.user.name}')
|
||||
activity = discord.Activity(name='!help', type=discord.ActivityType.listening)
|
||||
await bot.change_presence(activity=activity)
|
||||
|
||||
|
||||
async def main():
|
||||
async with bot:
|
||||
await load_extensions()
|
||||
await bot.start(env.TOKEN)
|
||||
|
||||
|
||||
asyncio.run(main())
|
||||
@@ -3,5 +3,6 @@
|
||||
TOKEN = 'discord-bot-token-here'
|
||||
ADMIN_ROLE = 'role-to-exclude-from-gifbot'
|
||||
GIFCHANNELS = 'add-channel-ids-for-bot-to-work-in'
|
||||
BOTCHANNEL = ['add id of bot channel']
|
||||
FLAIRROLES = ['add list of role ids to correspond to the emoji']
|
||||
FLAIRROLE = ['add id of flair separator role']
|
||||
Reference in New Issue
Block a user