This commit is contained in:
Ondřej Chwiedziuk 2024-08-19 20:27:46 +02:00
commit a70a5a3912
3 changed files with 86 additions and 0 deletions

1
.gitignore vendored Normal file
View file

@ -0,0 +1 @@
config.ini

3
config-example.ini Normal file
View file

@ -0,0 +1,3 @@
[ROK]
server_ID = 111
kruh-XX = 6

82
main.py Normal file
View file

@ -0,0 +1,82 @@
import discord
from discord.ext import commands
from configparser import ConfigParser
# Bot token (replace with your own)
TOKEN = 'MTE1NDc0ODQ3MzE4MzMwNTc4OQ.Gz_Q7u.02sb2YNV_QQy7Bs19roXlB62mjoMKA6y8aubHU'
# Iterate over the sections in the config file
def get_server_IDs():
config = ConfigParser()
config.read("config.ini")
server_IDs = []
for section in config.sections():
server_IDs.append(int(config[section]['server_ID']))
return server_IDs
# Create an instance of the bot
intents = discord.Intents.default()
intents.members = True
bot = commands.Bot(command_prefix='!', intents=intents)
# Study group roles and their corresponding IDs (you can customize this)
def get_study_groups(server_id):
config = ConfigParser()
config.read("config.ini")
study_groups = {}
for section in config.sections():
if int(config[section]['server_ID']) == server_id:
# Study group names are in style "kruh-XX", where XX is a two-digit number
# Iterate over all from top to bottom
for (key, value) in config.items(section):
if key.startswith('kruh-'):
study_groups[key] = int(value)
return study_groups
@bot.event
async def on_ready():
print(f'Logged in as {bot.user.name}')
@bot.command()
async def grant_role(ctx, study_group_name: str):
server_IDs = get_server_IDs()
author_id = ctx.author.id
for guild_id in server_IDs:
guild = bot.get_guild(guild_id)
if guild is None:
continue
author = guild.get_member(author_id)
if author is None:
continue
study_groups = get_study_groups(guild_id)
if study_group_name in study_groups:
role_name = study_groups[study_group_name]
role = discord.utils.get(guild.roles, id=role_name)
if role is not None:
await author.add_roles(role)
await ctx.send(f'{author.mention} has been granted the {study_group_name} role on server {guild.name}.')
return
await ctx.send('Something gone wrong. Please check your command and try again.')
return
@bot.event
async def on_message(message):
# Check if the message is a private message and not from the bot itself
if isinstance(message.channel, discord.DMChannel) and message.author != bot.user:
# Split the message content into words
words = message.content.split()
# Check if the message starts with the bot's command prefix and has enough arguments
if len(words) >= 3 and words[0] == '!grant_role':
# Process the command
await bot.process_commands(message)
# Run the bot
bot.run(TOKEN)