convert from Hungarian to English, remove pytz dependency, fix a bunch of issues

This commit is contained in:
csd4ni3l
2025-04-21 18:49:19 +02:00
parent 53370c6a8b
commit 960dec3256
4 changed files with 245 additions and 262 deletions

View File

@@ -1,4 +1,3 @@
MC Discord Bot MC Discord Bot
This is one of my Hungarian projects where i made a Discord bot with additional Minecraft features. This is one of my random projects where i made a Discord bot with additional Minecraft features, i released it as open source, if anyone wants templates or ideas for their own discord bot.
Its not going to be developed heavily.

489
bot.py
View File

@@ -6,7 +6,6 @@ import json, ast
import traceback import traceback
from mcstatus import JavaServer from mcstatus import JavaServer
import time import time
import pytz
from discord.ext import tasks from discord.ext import tasks
import discord.utils import discord.utils
@@ -43,6 +42,43 @@ private_server_ip = settings["private_minecraft_server_ip"]
private_server_port = settings["private_minecraft_server_port"] private_server_port = settings["private_minecraft_server_port"]
server_name = settings["server_name"] server_name = settings["server_name"]
commands = {
'Mod': [
['/clear {amount}', 'Deletes messages in the current channel'],
['/warn {user mention}', 'Gives a warning to the specified user, if they reach a certain number of warnings, it also gives a punishment.'],
['/mute {username}', 'Mutes a user'],
['/kick {user mention}', 'Kicks a user'],
['/ban {user mention}', 'Bans a user'],
['/unban {username}', 'Unbans a user'],
['/clear_member_msg {user mention} {number of messages}', 'Deletes only messages from a selected user in the current channel']],
'Fun': [
['/say {text}', 'The bot sends what you write.'],
['/suggest {idea}','Help us with an idea!'],
['/screenshot {link}','Take a screenshot of a page!']],
'Info': [
['/help', 'This command'],
['/userinfo {user mention} or /ui {user mention}','Information about a user'],
['/serverinfo or /si {user mention}','Information about our Discord server'],
['/ip', 'Shows the IP address of our Minecraft server'],
['/mcstats','Find out our server\'s current ping and player count']],
'Admin': [
['/giveaway {time} {number of winners} {prize}','Creates a giveaway in the current channel.'],
['/greroll {message id}','Rerolls the giveaway based on the given message ID.'],
['/send_reaction_role_message {channel mention}','Sends the reaction role panel in the mentioned channel'],
['/send_ticket_message {channel mention}','Sends the ticket panel in the mentioned channel'],
['/autoclose {time}','Closes the ticket after a given time if no messages are found'],
['/lock','Locks the current channel.'],
['/unlock','Unlocks the current channel.']]
}
categories = {
'Info': 'Information Commands e.g. /userinfo',
'Admin': 'Commands for admins',
'Mod': 'Commands for moderators.',
"Fun": 'Fun commands e.g. /say'}
time_convert = {"s": 1, "m": 60, "h": 3600,
"d": 86400, "w": 604800, "mo": 31536000}
giveaways = [] giveaways = []
global players_before global players_before
players_before = 0 players_before = 0
@@ -53,22 +89,19 @@ def get_minecraft_status():
def convert_duration(duration): def convert_duration(duration):
if 's' in duration: if 's' in duration:
return duration.replace('s', ' másodperc') return duration.replace('s', ' seconds')
if 'm' in duration: if 'm' in duration:
return duration.replace('m', ' perc') return duration.replace('m', ' minutes')
if 'h' in duration: if 'h' in duration:
return duration.replace('h', ' óra') return duration.replace('h', ' hours')
if 'd' in duration: if 'd' in duration:
return duration.replace('d', ' nap') return duration.replace('d', ' days')
if 'w' in duration: if 'w' in duration:
return duration.replace('w', ' hét') return duration.replace('w', ' weeks')
if 'mo' in duration: if 'mo' in duration:
return duration.replace('mo', ' hónap') return duration.replace('mo', ' months')
def convert_duration_to_seconds(duration): def convert_duration_to_seconds(duration):
time_convert = {"s": 1, "m": 60, "h": 3600,
"d": 86400, "w": 604800, "mo": 31536000}
return int(duration.split(duration[-1])[0]) * time_convert[duration[-1]] return int(duration.split(duration[-1])[0]) * time_convert[duration[-1]]
def convert_seconds_to_date(seconds): def convert_seconds_to_date(seconds):
@@ -78,13 +111,13 @@ def convert_seconds_to_date(seconds):
result = "" result = ""
if days > 0: if days > 0:
result += "{} nap ".format(int(days)) result += "{} days ".format(int(days))
if hours > 0: if hours > 0:
result += "{} óra ".format(int(hours)) result += "{} hours ".format(int(hours))
if minutes > 0: if minutes > 0:
result += "{} perc ".format(int(minutes)) result += "{} minutes ".format(int(minutes))
if seconds > 0 or not any([days, hours, minutes]): if seconds > 0 or not any([days, hours, minutes]):
result += "{} másodperc".format(int(seconds)) result += "{} seconds".format(int(seconds))
return result.strip() return result.strip()
@@ -95,7 +128,7 @@ async def update_mc_status():
await bot.change_presence(activity=discord.Activity(type=discord.ActivityType.playing, name=f"{server_name} | {player_num} Online | /help")) await bot.change_presence(activity=discord.Activity(type=discord.ActivityType.playing, name=f"{server_name} | {player_num} Online | /help"))
global players_before global players_before
if players_before == 0 or player_num != players_before: if players_before == 0 or player_num != players_before:
await discord.utils.get(bot.guilds[0].channels, id=players_status_channel_id).edit(name=f"Játékosok: {player_num}") await discord.utils.get(bot.guilds[0].channels, id=players_status_channel_id).edit(name=f"Players: {player_num}")
players_before = player_num players_before = player_num
await discord.utils.get(bot.guilds[0].channels, id=ping_status_channel_id).edit(name=f"Ping: {round(ping,2)} ms") await discord.utils.get(bot.guilds[0].channels, id=ping_status_channel_id).edit(name=f"Ping: {round(ping,2)} ms")
@@ -111,7 +144,7 @@ async def update_giveaways():
time_left_in_seconds = giveaway['end_time'] - time.time() time_left_in_seconds = giveaway['end_time'] - time.time()
time_left_in_str = convert_seconds_to_date(time_left_in_seconds) time_left_in_str = convert_seconds_to_date(time_left_in_seconds)
embed = discord.Embed( embed = discord.Embed(
title="🎉 Giveaway 🎉", description=f"Reagálj 🎉 emotikonnal hogy jelentkezz!\nHátralevő idő: **{time_left_in_str}**\nNyeremény: **{giveaway['prize']}**\nNyertesek száma: **{giveaway['winner_num']}**", color=0xFFFF00) title="🎉 Giveaway 🎉", description=f"React with 🎉 emoji to participate!\nTime remaining: **{time_left_in_str}**\nPrize: **{giveaway['prize']}**\nNumber of winners: **{giveaway['winner_num']}**", color=0xFFFF00)
if not bot.user.avatar == None: if not bot.user.avatar == None:
embed.set_footer(text=f"{server_name} Bot", icon_url=bot.user.avatar.url) embed.set_footer(text=f"{server_name} Bot", icon_url=bot.user.avatar.url)
else: else:
@@ -121,7 +154,7 @@ async def update_giveaways():
@bot.event @bot.event
async def on_member_join(member): async def on_member_join(member):
if not join_channel_id == -1: if not join_channel_id == -1:
embed = discord.Embed(title=f'Üdvözöllek, {member.name}', color=discord.Colour.red(), description=f"👋 Üdvözöllek a(z) {server_name} discord szerverén, **{member.display_name}**!\nReméljük jól fogod érezni magad a szerverünkön!") embed = discord.Embed(title=f'Welcome, {member.name}', color=discord.Colour.red(), description=f"👋 Welcome to the {server_name} discord server, **{member.display_name}**!\nWe hope you'll enjoy your time on our server!")
if not bot.user.avatar == None: if not bot.user.avatar == None:
embed.set_footer(text=f"{server_name} Bot", icon_url=bot.user.avatar.url) embed.set_footer(text=f"{server_name} Bot", icon_url=bot.user.avatar.url)
else: else:
@@ -133,7 +166,6 @@ async def on_member_join(member):
@bot.event @bot.event
async def on_ready(): async def on_ready():
await bot.sync_commands()
for giveaway_dict in giveaways_json_list: for giveaway_dict in giveaways_json_list:
try: try:
channel = await bot.guilds[0].fetch_channel(giveaway_dict['channel_id']) channel = await bot.guilds[0].fetch_channel(giveaway_dict['channel_id'])
@@ -142,15 +174,16 @@ async def on_ready():
"duration": convert_duration(giveaway_dict['_duration']), "_duration": giveaway_dict['_duration'], "prize": giveaway_dict['prize'], "ended": giveaway_dict['ended'], "end_time": giveaway_dict['start_time']+convert_duration_to_seconds(giveaway_dict['_duration'])}) "duration": convert_duration(giveaway_dict['_duration']), "_duration": giveaway_dict['_duration'], "prize": giveaway_dict['prize'], "ended": giveaway_dict['ended'], "end_time": giveaway_dict['start_time']+convert_duration_to_seconds(giveaway_dict['_duration'])})
except: except:
continue continue
if not server_ip == 'example.com': if not server_ip == 'example.com':
if not server_ip == 'HAMAROSAN!': if not server_ip == 'COMING SOON!':
update_mc_status.start() update_mc_status.start()
else: else:
await bot.change_presence(activity=discord.Activity(type=discord.ActivityType.playing, name=f"{server_name} | /help")) await bot.change_presence(activity=discord.Activity(type=discord.ActivityType.playing, name=f"{server_name} | /help"))
if not ping_status_channel_id == -1: if not ping_status_channel_id == -1:
await discord.utils.get(bot.guilds[0].channels, id=ping_status_channel_id).edit(name=f"Ping: HAMAROSAN!") await discord.utils.get(bot.guilds[0].channels, id=ping_status_channel_id).edit(name=f"Ping: COMING SOON!")
if not players_status_channel_id == -1: if not players_status_channel_id == -1:
await discord.utils.get(bot.guilds[0].channels, id=players_status_channel_id).edit(name=f"Játékosok: HAMAROSAN!") await discord.utils.get(bot.guilds[0].channels, id=players_status_channel_id).edit(name=f"Players: COMING SOON!")
else: else:
await bot.change_presence(activity=discord.Activity(type=discord.ActivityType.playing, name=f"{server_name} | /help")) await bot.change_presence(activity=discord.Activity(type=discord.ActivityType.playing, name=f"{server_name} | /help"))
print(f'{server_name} bot online') print(f'{server_name} bot online')
@@ -161,7 +194,7 @@ if not server_ip == 'example.com':
async def on_message(message): async def on_message(message):
if not message.author.bot: if not message.author.bot:
if any(i in message.content.lower() for i in [' ip', ' ipje', ' ip ']) and message.content.endswith('?'): if any(i in message.content.lower() for i in [' ip', ' ipje', ' ip ']) and message.content.endswith('?'):
await message.reply(f'A szerver ipje: **{server_ip}**') await message.reply(f'The server IP is: **{server_ip}**')
@bot.event @bot.event
async def on_member_update(before, after): async def on_member_update(before, after):
@@ -177,33 +210,33 @@ async def on_member_update(before, after):
new_roles = [role.name for role in after.roles if role not in before.roles] new_roles = [role.name for role in after.roles if role not in before.roles]
if len(new_roles) != 0: if len(new_roles) != 0:
roles_changed = True roles_changed = True
embed.add_field(name='Felhasználó által megkapott rangok:',value=','.join(new_roles)) embed.add_field(name='Roles received by user:',value=','.join(new_roles))
removed_roles = [role.name for role in before.roles if role not in after.roles] removed_roles = [role.name for role in before.roles if role not in after.roles]
if len(removed_roles) != 0: if len(removed_roles) != 0:
roles_changed = True roles_changed = True
embed.add_field(name='Felhasználótól elvett rangok:',value=','.join(removed_roles)) embed.add_field(name='Roles removed from user:',value=','.join(removed_roles))
if roles_changed: if roles_changed:
embed.title += ' rangjai' embed.title += ' roles'
if before.nick != after.nick: if before.nick != after.nick:
nick_changed = True nick_changed = True
embed.title += (' és beceneve' if roles_changed else ' beceneve') embed.title += (' and nickname' if roles_changed else ' nickname')
embed.add_field(name='Felhasználó régi beceneve', value=str(before.nick).replace('None','Nincs becenév')) embed.add_field(name='User\'s old nickname', value=str(before.nick).replace('None','No nickname'))
embed.add_field(name='Felhasználó új beceneve', value=str(after.nick).replace('None','Nincs becenév')) embed.add_field(name='User\'s new nickname', value=str(after.nick).replace('None','No nickname'))
if before.display_name != after.display_name: if before.display_name != after.display_name:
name_changed = True name_changed = True
embed.title += (' és neve' if roles_changed or nick_changed else ' neve') embed.title += (' and name' if roles_changed or nick_changed else ' name')
embed.add_field(name='Felhasználó régi neve', value=str(before.nick)) embed.add_field(name='User\'s old name', value=str(before.nick))
embed.add_field(name='Felhasználó új neve', value=str(after.nick)) embed.add_field(name='User\'s new name', value=str(after.nick))
if roles_changed and not name_changed and not nick_changed: if roles_changed and not name_changed and not nick_changed:
embed.title += ' megváltoztak!' # Egy felhasználó rangjai megváltoztak! embed.title += ' have changed!' # A user's roles have changed!
else: else:
embed.title += ' megváltozott!' embed.title += ' has changed!'
if not embed.title == f'{after.name} megváltozott!': if not embed.title == f'{after.name} has changed!':
if not after.avatar == None: if not after.avatar == None:
embed.set_thumbnail(url=after.avatar.url) embed.set_thumbnail(url=after.avatar.url)
await channel.send(embed=embed) await channel.send(embed=embed)
@@ -217,11 +250,11 @@ async def on_message_delete(message):
return return
log_channel: discord.channel.TextChannel = bot.get_channel(log_channel_id) log_channel: discord.channel.TextChannel = bot.get_channel(log_channel_id)
if not log_channel == '': if not log_channel == '':
embed = discord.Embed(title=f'{message.author.name} üzenetét törölték a ' + embed = discord.Embed(title=f'{message.author.name}\'s message was deleted in ' +
message.channel.name+f' csatornában!', color=discord.Colour.red()) message.channel.name+f' channel!', color=discord.Colour.red())
if not message.author.avatar == None: if not message.author.avatar == None:
embed.set_thumbnail(url=message.author.avatar.url) embed.set_thumbnail(url=message.author.avatar.url)
embed.add_field(name='Tartalma: ', value=message.content) embed.add_field(name='Content: ', value=message.content)
await log_channel.send(embed=embed) await log_channel.send(embed=embed)
except: except:
traceback.print_exc() traceback.print_exc()
@@ -235,8 +268,8 @@ async def on_guild_channel_create(channel):
if not log_channel == '': if not log_channel == '':
async for entry in channel.guild.audit_logs(limit=1, action=discord.AuditLogAction.channel_create): async for entry in channel.guild.audit_logs(limit=1, action=discord.AuditLogAction.channel_create):
creator = entry.user creator = entry.user
embed = discord.Embed(title=creator.name+' létrehozta a ' + embed = discord.Embed(title=creator.name+' created the ' +
channel.name+' csatornát!', color=discord.Colour.red()) channel.name+' channel!', color=discord.Colour.red())
if not creator.avatar == None: if not creator.avatar == None:
embed.set_thumbnail(url=creator.avatar.url) embed.set_thumbnail(url=creator.avatar.url)
await log_channel.send(embed=embed) await log_channel.send(embed=embed)
@@ -252,8 +285,8 @@ async def on_guild_channel_delete(channel):
if not log_channel == '': if not log_channel == '':
async for entry in channel.guild.audit_logs(limit=1, action=discord.AuditLogAction.channel_delete): async for entry in channel.guild.audit_logs(limit=1, action=discord.AuditLogAction.channel_delete):
deleter = entry.user deleter = entry.user
embed = discord.Embed(title=deleter.name+' törölte a ' + embed = discord.Embed(title=deleter.name+' deleted the ' +
channel.name+' csatornát!', color=discord.Colour.red()) channel.name+' channel!', color=discord.Colour.red())
if not deleter.avatar == None: if not deleter.avatar == None:
embed.set_thumbnail(url=deleter.avatar.url) embed.set_thumbnail(url=deleter.avatar.url)
await log_channel.send(embed=embed) await log_channel.send(embed=embed)
@@ -268,13 +301,13 @@ async def on_message_edit(before, after):
return return
log_channel: discord.channel.TextChannel = bot.get_channel(log_channel_id) log_channel: discord.channel.TextChannel = bot.get_channel(log_channel_id)
if not log_channel == '': if not log_channel == '':
embed = discord.Embed(title=after.author.name+' módosította a saját üzenetét itt: ' + embed = discord.Embed(title=after.author.name+' modified their own message in: ' +
after.channel.name+'!', color=discord.Colour.red()) after.channel.name+'!', color=discord.Colour.red())
if not after.avatar == None: if not after.avatar == None:
embed.set_thumbnail(url=after.author.avatar.url) embed.set_thumbnail(url=after.author.avatar.url)
embed.add_field(name='Eredeti tartalma:', embed.add_field(name='Original content:',
value=before.content) value=before.content)
embed.add_field(name='Módosított tartalma:', value=after.content) embed.add_field(name='Modified content:', value=after.content)
await log_channel.send(embed=embed) await log_channel.send(embed=embed)
except: except:
traceback.print_exc() traceback.print_exc()
@@ -288,8 +321,8 @@ async def on_bulk_message_delete(messages):
if not log_channel == '': if not log_channel == '':
async for entry in messages[0].guild.audit_logs(limit=1, action=discord.AuditLogAction.message_bulk_delete): async for entry in messages[0].guild.audit_logs(limit=1, action=discord.AuditLogAction.message_bulk_delete):
deleter = entry.user deleter = entry.user
embed = discord.Embed(title=deleter.name+' törölt '+str(len(messages))+' üzenetet a ' + embed = discord.Embed(title=deleter.name+' deleted '+str(len(messages))+' messages in ' +
messages[0].channel.name+' csatornában!', color=discord.Colour.red()) messages[0].channel.name+' channel!', color=discord.Colour.red())
if not deleter.avatar == None: if not deleter.avatar == None:
embed.set_thumbnail(url=deleter.avatar.url) embed.set_thumbnail(url=deleter.avatar.url)
await log_channel.send(embed=embed) await log_channel.send(embed=embed)
@@ -308,16 +341,16 @@ async def end_giveaway(n, giveaway):
else: else:
winner_list = participant_mentions winner_list = participant_mentions
if len(winner_list) == 0: if len(winner_list) == 0:
embed = discord.Embed(title="🎉 Giveaway Vége 🎉", embed = discord.Embed(title="🎉 Giveaway Ended 🎉",
description=f"Háralevő idő: **A giveawaynek már vége van**\nNyeremény: **{giveaway['prize']}**\nNyertesek száma: **{giveaway['winner_num']}**\nSajnálom de senki sem nyert.", color=0xFF0000) description=f"Time remaining: **The giveaway has ended**\nPrize: **{giveaway['prize']}**\nNumber of winners: **{giveaway['winner_num']}**\nI'm sorry but no one won.", color=0xFF0000)
if not bot.user.avatar == None: if not bot.user.avatar == None:
embed.set_footer(text=f"{server_name} Bot", icon_url=bot.user.avatar.url) embed.set_footer(text=f"{server_name} Bot", icon_url=bot.user.avatar.url)
else: else:
embed.set_footer(text=f"{server_name} Bot") embed.set_footer(text=f"{server_name} Bot")
await message.edit(embed=embed) await message.edit(embed=embed)
else: else:
embed = discord.Embed(title="🎉 Giveaway Vége 🎉", embed = discord.Embed(title="🎉 Giveaway Ended 🎉",
description=f"Hátralevő idő: **A giveawaynek már vége van**\nNyeremény: **{giveaway['prize']}**\nNyertesek száma: **{giveaway['winner_num']}**\nNyertes(ek): {', '.join(winner_list)}", color=0xFF0000) description=f"Time remaining: **The giveaway has ended**\nPrize: **{giveaway['prize']}**\nNumber of winners: **{giveaway['winner_num']}**\nWinner(s): {', '.join(winner_list)}", color=0xFF0000)
await message.edit(content=', '.join(winner_list), embed=embed) await message.edit(content=', '.join(winner_list), embed=embed)
giveaways[n]['ended'] = True giveaways[n]['ended'] = True
@@ -326,25 +359,25 @@ async def end_giveaway(n, giveaway):
file.write(json.dumps(giveaways_json_list, indent=4)) file.write(json.dumps(giveaways_json_list, indent=4))
@bot.slash_command() @bot.slash_command()
async def greroll(interaction, message_id): async def greroll(interaction: discord.Interaction, message_id):
if interaction.user.guild_permissions.administrator: if interaction.user.guild_permissions.administrator:
for n,giveaway in enumerate(giveaways): for n,giveaway in enumerate(giveaways):
if int(message_id) == giveaway["message_id"]: if int(message_id) == giveaway["message_id"]:
try: try:
await end_giveaway(n, giveaway) await end_giveaway(n, giveaway)
await interaction.response.send_message('Giveaway sikeresen újrasorsolva!') await interaction.response.send_message('Giveaway successfully rerolled!')
return return
except: except:
traceback.print_exc() traceback.print_exc()
else: else:
await interaction.response.send_message("Nincs jogod használni ezt a parancsot!", ephemeral=True) await interaction.response.send_message("You don't have permission to use this command!", ephemeral=True)
@bot.slash_command() @bot.slash_command()
async def giveaway(interaction: discord.Interaction, duration: str, winners: int, prize: str): async def giveaway(interaction: discord.Interaction, duration: str, winners: int, prize: str):
if interaction.user.guild_permissions.administrator: if interaction.user.guild_permissions.administrator:
try: try:
embed = discord.Embed( embed = discord.Embed(
title="🎉 Giveaway 🎉", description=f"Reagálj 🎉 emotikonnal hogy jelentkezz!\nHátralevő idő: **{convert_duration(duration)}**\nNyeremény: **{prize}**\nNyertesek száma: **{winners}**", color=0xFFFF00) title="🎉 Giveaway 🎉", description=f"React with 🎉 emoji to participate!\nTime remaining: **{convert_duration(duration)}**\nPrize: **{prize}**\nNumber of winners: **{winners}**", color=0xFFFF00)
if not bot.user.avatar == None: if not bot.user.avatar == None:
embed.set_footer(text=f"{server_name} Bot", icon_url=bot.user.avatar.url) embed.set_footer(text=f"{server_name} Bot", icon_url=bot.user.avatar.url)
else: else:
@@ -359,23 +392,23 @@ async def giveaway(interaction: discord.Interaction, duration: str, winners: int
except: except:
traceback.print_exc() traceback.print_exc()
else: else:
await interaction.response.send_message("Nincs jogod használni ezt a parancsot!", ephemeral=True) await interaction.response.send_message("You don't have permission to use this command!", ephemeral=True)
@bot.slash_command() @bot.slash_command()
async def send_reaction_role_message(interaction, channel: discord.channel.TextChannel): async def send_reaction_role_message(interaction: discord.Interaction, channel: discord.channel.TextChannel):
global settings global settings
embed_description = "Reagálj a megfelelő emojikra a rangokért!" embed_description = "React to the appropriate emojis for roles!"
for reaction_role_emoji, reaction_role_dict in reaction_roles.items(): for reaction_role_emoji, reaction_role_dict in reaction_roles.items():
embed_description += f"\n{reaction_role_emoji}: {reaction_role_dict['description']}" embed_description += f"\n{reaction_role_emoji}: {reaction_role_dict['description']}"
embed = discord.Embed(title="Reakció Rangok", description=embed_description, color=discord.Colour.red()) embed = discord.Embed(title="Reaction Roles", description=embed_description, color=discord.Colour.red())
if not bot.user.avatar == None: if not bot.user.avatar == None:
embed.set_footer(text=f"{server_name} Bot", icon_url=bot.user.avatar.url) embed.set_footer(text=f"{server_name} Bot", icon_url=bot.user.avatar.url)
else: else:
embed.set_footer(text=f"{server_name} Bot") embed.set_footer(text=f"{server_name} Bot")
message: discord.Message = await channel.send(embed=embed) message: discord.Message = await channel.send(embed=embed)
await interaction.response.send_message("Üzenet elküldve a megadott csatornába!\nÜzenet ID: " + str(message.id), ephemeral=True) await interaction.response.send_message("Message sent to the specified channel!\nMessage ID: " + str(message.id), ephemeral=True)
for reaction_role_emoji, _ in reaction_roles.items(): for reaction_role_emoji, _ in reaction_roles.items():
await message.add_reaction(reaction_role_emoji) await message.add_reaction(reaction_role_emoji)
@@ -408,9 +441,9 @@ async def on_raw_reaction_remove(payload):
await on_reaction_remove(payload.emoji, message, user) await on_reaction_remove(payload.emoji, message, user)
@bot.slash_command() @bot.slash_command()
async def suggest(interaction, suggestion): async def suggest(interaction: discord.Interaction, suggestion):
if not suggestion_channel_id == -1: if not suggestion_channel_id == -1:
embed = discord.Embed(title=str(interaction.user.name)+' új javaslata', description=suggestion, color=discord.Colour.red()) embed = discord.Embed(title=str(interaction.user.name)+'\'s new suggestion', description=suggestion, color=discord.Colour.red())
embed.set_thumbnail(url=interaction.user.avatar.url) embed.set_thumbnail(url=interaction.user.avatar.url)
if not bot.user.avatar == None: if not bot.user.avatar == None:
embed.set_footer(text=f"{server_name} Bot", icon_url=bot.user.avatar.url) embed.set_footer(text=f"{server_name} Bot", icon_url=bot.user.avatar.url)
@@ -420,9 +453,9 @@ async def suggest(interaction, suggestion):
await message.add_reaction('') await message.add_reaction('')
await message.add_reaction('') await message.add_reaction('')
await interaction.response.send_message('Ötlet sikeresen közzétéve!') await interaction.response.send_message('Suggestion successfully published!')
else: else:
await interaction.response.send_message('Ez a parancs nincs beállítva!', ephemeral=True) await interaction.response.send_message('This command is not configured!', ephemeral=True)
async def close_ticket(interaction): async def close_ticket(interaction):
channel = interaction.message.channel channel = interaction.message.channel
@@ -430,17 +463,17 @@ async def close_ticket(interaction):
await interaction.response.pong() await interaction.response.pong()
message = await interaction.channel.send(f'Törlés 5 másodperc múlva!') message = await interaction.channel.send(f'Deletion in 5 seconds!')
for i in range(4, 0, -1): for i in range(4, 0, -1):
await asyncio.sleep(1) await asyncio.sleep(1)
await message.edit(content=f'Törlés {i} másodperc múlva!') await message.edit(content=f'Deletion in {i} seconds!')
await asyncio.sleep(0.5) await asyncio.sleep(0.5)
await channel.delete() await channel.delete()
if not transcript_channel_id == -1: if not transcript_channel_id == -1:
transcript_channel = discord.utils.get(interaction.guild.channels, id=transcript_channel_id) transcript_channel = discord.utils.get(interaction.guild.channels, id=transcript_channel_id)
transcript_embed = discord.Embed(title=f"Jegy #{channel.name.split('-')[1]} bezárva") transcript_embed = discord.Embed(title=f"Ticket #{channel.name.split('-')[1]} closed")
transcript_embed.add_field(name="Bezárta", value=closer.mention) transcript_embed.add_field(name="Closed by", value=closer.mention)
await transcript_channel.send(embed=transcript_embed) await transcript_channel.send(embed=transcript_embed)
@@ -448,25 +481,25 @@ async def close_ticket(interaction):
async def lock(interaction): async def lock(interaction):
if interaction.user.guild_permissions.manage_channels: if interaction.user.guild_permissions.manage_channels:
await interaction.channel.set_permissions(interaction.guild.default_role, send_messages=False) await interaction.channel.set_permissions(interaction.guild.default_role, send_messages=False)
await interaction.response.send_message(f'Csatorna lezárva {interaction.user.mention} által!') await interaction.response.send_message(f'Channel locked by {interaction.user.mention}!')
else: else:
await interaction.response.send_message("Nincs jogod használni ezt a parancsot!", ephemeral=True) await interaction.response.send_message("You don't have permission to use this command!", ephemeral=True)
@bot.slash_command() @bot.slash_command()
async def unlock(interaction): async def unlock(interaction):
if interaction.user.guild_permissions.manage_channels: if interaction.user.guild_permissions.manage_channels:
await interaction.channel.set_permissions(interaction.guild.default_role, send_messages=True) await interaction.channel.set_permissions(interaction.guild.default_role, send_messages=True)
await interaction.response.send_message(f'Csatorna megnyitva {interaction.user.mention} által!') await interaction.response.send_message(f'Channel unlocked by {interaction.user.mention}!')
else: else:
await interaction.response.send_message("Nincs jogod használni ezt a parancsot!", ephemeral=True) await interaction.response.send_message("You don't have permission to use this command!", ephemeral=True)
async def ticket(interaction: discord.Interaction, ticket_tema): async def ticket(interaction: discord.Interaction, ticket_topic):
guild = interaction.guild guild = interaction.guild
if not ticket_category_id == -1: if not ticket_category_id == -1:
ticket_category = discord.utils.get( ticket_category = discord.utils.get(
interaction.guild.categories, id=ticket_category_id) interaction.guild.categories, id=ticket_category_id)
else: else:
await interaction.response.send_message('Ticket létrehozása sikertelen. Ticket kategória nincs beállítva.') await interaction.response.send_message('Ticket creation failed. Ticket category not configured.')
return return
overwrites = { overwrites = {
interaction.guild.default_role: discord.PermissionOverwrite(read_messages=False, send_messages=False), interaction.guild.default_role: discord.PermissionOverwrite(read_messages=False, send_messages=False),
@@ -479,9 +512,9 @@ async def ticket(interaction: discord.Interaction, ticket_tema):
overwrites[role] = discord.PermissionOverwrite( overwrites[role] = discord.PermissionOverwrite(
read_messages=True, send_messages=True) read_messages=True, send_messages=True)
else: else:
print(f'Invalid rang ID találva a Ticket Support rangokhoz!\nID: {role_id}') print(f'Invalid role ID found in Ticket Support roles!\nID: {role_id}')
if ticket_tema == "Partnerkedés" and not partner_manager_role_id == -1: if ticket_topic == "Partnership" and not partner_manager_role_id == -1:
overwrites[discord.utils.get(guild.roles, id=partner_manager_role_id)] = discord.PermissionOverwrite( overwrites[discord.utils.get(guild.roles, id=partner_manager_role_id)] = discord.PermissionOverwrite(
read_messages=True, send_messages=True) read_messages=True, send_messages=True)
@@ -493,18 +526,18 @@ async def ticket(interaction: discord.Interaction, ticket_tema):
with open('values.json', 'w') as file: with open('values.json', 'w') as file:
file.write(json.dumps(values_json, indent=4)) file.write(json.dumps(values_json, indent=4))
channel = await guild.create_text_channel('jegy-'+str(ticket_number), category=ticket_category, overwrites=overwrites) channel = await guild.create_text_channel('ticket-'+str(ticket_number), category=ticket_category, overwrites=overwrites)
await interaction.response.send_message(f'Ticket sikeresen megnyitva: <#{channel.id}>', ephemeral=True) await interaction.response.send_message(f'Ticket successfully opened: <#{channel.id}>', ephemeral=True)
view = discord.ui.View(timeout=None) view = discord.ui.View(timeout=None)
embed = discord.Embed(title='Ticket Létrehozva!') embed = discord.Embed(title='Ticket Created!')
button = discord.ui.Button(label='Ticket bezárása', custom_id=f'ticket_{ticket_number}_close_button') button = discord.ui.Button(label='Close Ticket', custom_id=f'ticket_{ticket_number}_close_button')
view.add_item(button) view.add_item(button)
bot.add_view(view) bot.add_view(view)
embed.add_field(name='Ticket témája:',value=ticket_tema) embed.add_field(name='Ticket topic:',value=ticket_topic)
embed.add_field(name='Létrehozója:', value=interaction.user.mention) embed.add_field(name='Created by:', value=interaction.user.mention)
if not bot.user.avatar == None: if not bot.user.avatar == None:
embed.set_footer(text=f"{server_name} Bot", icon_url=bot.user.avatar.url) embed.set_footer(text=f"{server_name} Bot", icon_url=bot.user.avatar.url)
@@ -515,36 +548,36 @@ async def ticket(interaction: discord.Interaction, ticket_tema):
if not transcript_channel_id == -1: if not transcript_channel_id == -1:
transcript_channel = discord.utils.get(interaction.guild.channels, id=transcript_channel_id) transcript_channel = discord.utils.get(interaction.guild.channels, id=transcript_channel_id)
transcript_embed = discord.Embed(title=f"Jegy #{channel.name.split('-')[1]} létrehozva") transcript_embed = discord.Embed(title=f"Ticket #{channel.name.split('-')[1]} created")
transcript_embed.add_field(name='Ticket témája:',value=ticket_tema) transcript_embed.add_field(name='Ticket topic:',value=ticket_topic)
transcript_embed.add_field(name="Létrehozta", value=interaction.user.mention) transcript_embed.add_field(name="Created by", value=interaction.user.mention)
await transcript_channel.send(embed=transcript_embed) await transcript_channel.send(embed=transcript_embed)
@bot.slash_command() @bot.slash_command()
async def send_ticket_message(interaction, channel: discord.channel.TextChannel): async def send_ticket_message(interaction: discord.Interaction, channel: discord.channel.TextChannel):
if interaction.user.guild_permissions.administrator: if interaction.user.guild_permissions.administrator:
if len(ticket_categories) == 0: if len(ticket_categories) == 0:
await interaction.response.send_message('Nincsenek hibajegy kategóriák beállítva!', ephemeral=True) await interaction.response.send_message('No ticket categories are configured!', ephemeral=True)
return return
embed = discord.Embed( embed = discord.Embed(
title="Ticket nyitás", description=''' title="Open a Ticket", description='''
⁉️ Problémát találtál? Bugot találtál? Nyiss ticketet! ⁉️ Found a problem? Found a bug? Open a ticket!
📌| Kérlek írd le a problémádat a ticket megnyitása után. 📌| Please describe your problem after opening the ticket.
⚡| Egyik csapattagunk máris válaszolni fog!''') ⚡| One of our team members will respond right away!''')
if not bot.user.avatar == None: if not bot.user.avatar == None:
embed.set_footer(text=f"{server_name} Bot", icon_url=bot.user.avatar.url) embed.set_footer(text=f"{server_name} Bot", icon_url=bot.user.avatar.url)
else: else:
embed.set_footer(text=f"{server_name} Bot") embed.set_footer(text=f"{server_name} Bot")
view = discord.ui.View(timeout=None) view = discord.ui.View(timeout=None)
select = discord.ui.Select(options=[discord.SelectOption( select = discord.ui.Select(options=[discord.SelectOption(
label=dolog, value=dolog, emoji=emoji) for emoji, dolog in ticket_categories], custom_id='ticket') label=thing, value=thing, emoji=emoji) for emoji, thing in ticket_categories], custom_id='ticket')
view.add_item(select) view.add_item(select)
bot.add_view(view) bot.add_view(view)
await channel.send(embed=embed, view=view) await channel.send(embed=embed, view=view)
await interaction.response.send_message('Ticket Panel sikeresen elküldve a megadott csatornába!', ephemeral=True) await interaction.response.send_message('Ticket Panel successfully sent to the specified channel!', ephemeral=True)
else: else:
await interaction.response.send_message("Nincs jogod használni ezt a parancsot!", ephemeral=True) await interaction.response.send_message("You don't have permission to use this command!", ephemeral=True)
@bot.event @bot.event
async def on_interaction(interaction: discord.Interaction): async def on_interaction(interaction: discord.Interaction):
@@ -558,56 +591,65 @@ async def on_interaction(interaction: discord.Interaction):
await close_ticket(interaction) await close_ticket(interaction)
@bot.slash_command() @bot.slash_command()
async def warn(interaction, member: discord.Member, *, reason='Ok nem megadva'): async def warn(interaction: discord.Interaction, member: discord.Member, *, reason='Reason not provided'):
if interaction.user.guild_permissions.moderate_members: if interaction.user.guild_permissions.moderate_members:
if interaction.user.id == member.id: # if interaction.user.id == member.id:
await interaction.response.send_message('Saját magadat nem figyelmeztetheted!', ephemeral=True) # await interaction.response.send_message('You cannot warn yourself!', ephemeral=True)
return # return
if member.bot: if member.bot:
await interaction.response.send_message('Egy botot nem figyelmeztethetsz!', ephemeral=True) await interaction.response.send_message('You cannot warn a bot!', ephemeral=True)
return return
if not interaction.user.id == interaction.guild.owner_id and interaction.user.id in emergency_admin_ids and not interaction.user.top_role.position > member.top_role.position: if not interaction.user.id == interaction.guild.owner_id and interaction.user.id in emergency_admin_ids and not interaction.user.top_role.position > member.top_role.position:
await interaction.response.send_message("Nincs jogod ezt a felhasználót figyelmeztetni!", ephemeral=True) await interaction.response.send_message("You don't have permission to warn this user!", ephemeral=True)
return return
if member.id in warns: if str(member.id) in warns:
warns[member.id].append(reason) warns[str(member.id)].append(reason)
else: else:
warns[member.id] = [reason] warns[str(member.id)] = [reason]
await member.send(f'Figyelmeztetve lettél a következő okból: {reason}') try:
await interaction.response.send_message(f'A figyelmeztetést elküldtem, a következő okból: {reason}') await member.send(f'You have been warned for the following reason: {reason}')
except discord.errors.Forbidden:
pass
if len(warns[member.id]) == 2: try:
await member.timeout(datetime.timedelta(hours=1)) if len(warns[str(member.id)]) == 2:
if len(warns[member.id]) == 3: await member.timeout(datetime.datetime.now() + datetime.timedelta(hours=1))
await member.kick() if len(warns[str(member.id)]) == 3:
if len(warns[member.id]) == 4: await member.kick()
await member.timeout(datetime.timedelta(days=1)) if len(warns[str(member.id)]) == 4:
if len(warns[member.id]) == 5: await member.timeout(datetime.datetime.now() + datetime.timedelta(days=1))
await member.timeout(datetime.timedelta(days=3)) if len(warns[str(member.id)]) == 5:
if len(warns[member.id]) == 6: await member.timeout(datetime.datetime.now() + datetime.timedelta(days=3))
await member.ban(reason='Elérte a 6 figyelmeztetést, ezért automatikusan bannoltam') if len(warns[str(member.id)]) == 6:
await member.ban(reason='The member reached 6 warns.')
await interaction.response.send_message(f'Warning sent for the following reason: {reason}')
except discord.errors.Forbidden:
await interaction.response.send_message("I was not able to punish the user due to missing permissions.")
with open('warns.json', 'w') as file: with open('warns.json', 'w') as file:
file.write(json.dumps(warns, indent=4)) file.write(json.dumps(warns, indent=4))
else: else:
await interaction.response.send_message("Nincs jogod használni ezt a parancsot!", ephemeral=True) await interaction.response.send_message("You don't have permission to use this command!", ephemeral=True)
@bot.slash_command() @bot.slash_command()
async def mcstats(interaction: discord.Interaction): async def mcstats(interaction: discord.Interaction):
if not server_ip == 'example.com': if not server_ip == 'example.com':
if not server_ip == 'HAMAROSAN!': if not server_ip == 'COMING SOON!':
try: try:
await interaction.response.defer() await interaction.response.defer()
status = get_minecraft_status() status = get_minecraft_status()
except: except:
traceback.print_exc() traceback.print_exc()
await interaction.followup.send('A szerver nem elérhető!') await interaction.followup.send('The server is not available!')
return return
embed = discord.Embed(title='MC Statisztikák', color=discord.Colour.red()) embed = discord.Embed(title='MC Statistics', color=discord.Colour.red())
embed.add_field(name="Online Játékosok",value=str(status.players.online)) embed.add_field(name="Online Players",value=str(status.players.online))
embed.add_field(name="Ping",value=f"{round(status.latency,2)} ms") embed.add_field(name="Ping",value=f"{round(status.latency,2)} ms")
if not bot.user.avatar == None: if not bot.user.avatar == None:
embed.set_footer(text=f"{server_name} Bot", icon_url=bot.user.avatar.url) embed.set_footer(text=f"{server_name} Bot", icon_url=bot.user.avatar.url)
@@ -615,51 +657,51 @@ async def mcstats(interaction: discord.Interaction):
embed.set_footer(text=f"{server_name} Bot") embed.set_footer(text=f"{server_name} Bot")
await interaction.followup.send(embed=embed) await interaction.followup.send(embed=embed)
else: else:
await interaction.response.send_message("IP HAMAROSAN!") await interaction.response.send_message("IP COMING SOON!")
else: else:
await interaction.response.send_message("Ez a parancs ki van kapcsolva!", ephemeral=True) await interaction.response.send_message("This command is disabled!", ephemeral=True)
@bot.slash_command() @bot.slash_command()
async def kick(interaction, member: discord.Member, reason=None): async def kick(interaction: discord.Interaction, member: discord.Member, reason=None):
if interaction.user.guild_permissions.kick_members: if interaction.user.guild_permissions.kick_members:
if interaction.user.id == member.id: if interaction.user.id == member.id:
await interaction.response.send_message('Saját magadat nem rúghatod ki!', ephemeral=True) await interaction.response.send_message('You cannot kick yourself!', ephemeral=True)
return return
if bot.user.id == member.id: if bot.user.id == member.id:
await interaction.response.send_message('A botot nem rúghatod ki!', ephemeral=True) await interaction.response.send_message('You cannot kick the bot!', ephemeral=True)
return return
if not interaction.user.id == interaction.guild.owner_id and interaction.user.id in emergency_admin_ids and not interaction.user.top_role.position > member.top_role.position: if not interaction.user.id == interaction.guild.owner_id and interaction.user.id in emergency_admin_ids and not interaction.user.top_role.position > member.top_role.position:
await interaction.response.send_message("Nincs jogod ezt a felhasználót kirúgni!", ephemeral=True) await interaction.response.send_message("You don't have permission to kick this user!", ephemeral=True)
return return
await member.kick(reason=reason) await member.kick(reason=reason)
await interaction.response.send_message(f'A {member.name} felhasználó ki lett rúgva!') await interaction.response.send_message(f'User {member.name} has been kicked!')
else: else:
await interaction.response.send_message("Nincs jogod használni ezt a parancsot!", ephemeral=True) await interaction.response.send_message("You don't have permission to use this command!", ephemeral=True)
@bot.slash_command() @bot.slash_command()
async def ban(interaction: discord.Interaction, member: discord.Member, reason=None): async def ban(interaction: discord.Interaction, member: discord.Member, reason=None):
if interaction.user.guild_permissions.ban_members: if interaction.user.guild_permissions.ban_members:
if interaction.user.id == member.id: if interaction.user.id == member.id:
await interaction.response.send_message('Saját magadat nem tilthatod ki!', ephemeral=True) await interaction.response.send_message('You cannot ban yourself!', ephemeral=True)
return return
if bot.user.id == member.id: if bot.user.id == member.id:
await interaction.response.send_message('A botot nem tilthatod ki!', ephemeral=True) await interaction.response.send_message('You cannot ban the bot!', ephemeral=True)
return return
if not interaction.user.id == interaction.guild.owner_id and interaction.user.id in emergency_admin_ids and not interaction.user.top_role.position > member.top_role.position: if not interaction.user.id == interaction.guild.owner_id and interaction.user.id in emergency_admin_ids and not interaction.user.top_role.position > member.top_role.position:
await interaction.response.send_message("Nincs jogod ezt a felhasználót kitiltani!", ephemeral=True) await interaction.response.send_message("You don't have permission to ban this user!", ephemeral=True)
return return
if not reason == None: if not reason == None:
await member.ban(reason=reason) await member.ban(reason=reason)
else: else:
await member.ban() await member.ban()
await interaction.response.send_message(f'A {member.name} felhasználó ki lett tiltva!') await interaction.response.send_message(f'User {member.name} has been banned!')
else: else:
await interaction.response.send_message("Nincs jogod használni ezt a parancsot!", ephemeral=True) await interaction.response.send_message("You don't have permission to use this command!", ephemeral=True)
@bot.slash_command() @bot.slash_command()
async def unban(interaction, member_id: int, reason=None): async def unban(interaction: discord.Interaction, member_id: int, reason=None):
if interaction.user.guild_permissions.ban_members and interaction.user.guild_permissions.administrator: if interaction.user.guild_permissions.ban_members and interaction.user.guild_permissions.administrator:
banned_users = await interaction.guild.bans() banned_users = await interaction.guild.bans()
@@ -671,35 +713,33 @@ async def unban(interaction, member_id: int, reason=None):
await interaction.guild.unban(user, reason=reason) await interaction.guild.unban(user, reason=reason)
else: else:
await interaction.guild.unban(user) await interaction.guild.unban(user)
await interaction.response.send_message(f'A {user.name} felhasználó kitiltása fel lett oldva!') await interaction.response.send_message(f'User {user.name} has been unbanned!')
else: else:
await interaction.response.send_message("Nincs jogod használni ezt a parancsot!", ephemeral=True) await interaction.response.send_message("You don't have permission to use this command!", ephemeral=True)
@bot.slash_command() @bot.slash_command()
async def mute(interaction, member: discord.Member, time): async def mute(interaction: discord.Interaction, member: discord.Member, time):
if interaction.user.guild_permissions.moderate_members: if interaction.user.guild_permissions.moderate_members:
if interaction.user.id == member.id: if interaction.user.id == member.id:
await interaction.response.send_message('Saját magadat nem muteolhatod!', ephemeral=True) await interaction.response.send_message('You cannot mute yourself!', ephemeral=True)
return return
if member.bot: if member.bot:
await interaction.response.send_message('Egy botot nem muteolhatsz!', ephemeral=True) await interaction.response.send_message('You cannot mute a bot!', ephemeral=True)
return return
if not interaction.user.id == interaction.guild.owner_id and interaction.user.id in emergency_admin_ids and not interaction.user.top_role.position > member.top_role.position: if not interaction.user.id == interaction.guild.owner_id and interaction.user.id in emergency_admin_ids and not interaction.user.top_role.position > member.top_role.position:
time_convert = {"s": 1, "m": 60, "h": 3600,
"d": 86400, "w": 604800, "mo": 31536000}
seconds = int(time.split(time[-1])[0]) * time_convert[time[-1]] seconds = int(time.split(time[-1])[0]) * time_convert[time[-1]]
duration = datetime.timedelta(seconds=seconds) duration = datetime.timedelta(seconds=seconds)
await member.timeout(duration) await member.timeout(duration)
await interaction.response.send_message(f'{member.name} muteolva lett {seconds} másodpercig') await interaction.response.send_message(f'{member.name} has been muted for {seconds} seconds')
else: else:
await interaction.response.send_message('Nem muteolhatsz nálad magasabb rangú felhasználót!!') await interaction.response.send_message('You cannot mute a user with a higher role than yours!')
else: else:
await interaction.response.send_message("Nincs jogod használni ezt a parancsot!", ephemeral=True) await interaction.response.send_message("You don't have permission to use this command!", ephemeral=True)
@bot.slash_command() @bot.slash_command()
async def userinfo(interaction, tag: discord.Member = None): async def userinfo(interaction: discord.Interaction, tag: discord.Member = None):
member = tag or interaction.user member = tag or interaction.user
roles = [i.name for i in member.roles] roles = [i.name for i in member.roles]
roles.remove("@everyone") roles.remove("@everyone")
@@ -716,22 +756,22 @@ async def userinfo(interaction, tag: discord.Member = None):
if member.avatar: if member.avatar:
embed.set_thumbnail(url=member.avatar.url) embed.set_thumbnail(url=member.avatar.url)
embed.add_field(name='Felhasználó neve', value=f"{member.name}", inline=False) embed.add_field(name='Username', value=f"{member.name}", inline=False)
embed.add_field(name='ID', value=str(member.id), inline=False) embed.add_field(name='ID', value=str(member.id), inline=False)
embed.add_field(name='Státusz', value=str(member.status).replace('idle', 'Tétlen').replace('dnd', 'Elfoglalt').replace('online', 'Elérhető').replace('offline', 'Nem elérhető'), inline=False) embed.add_field(name='Status', value=str(member.status).replace('idle', 'Idle').replace('dnd', 'Busy').replace('online', 'Available').replace('offline', 'Not Available'), inline=False)
embed.add_field(name='Profil Létrehozva', value=member.created_at.strftime("%b %d, %Y"), inline=False) embed.add_field(name='Profile Created', value=member.created_at.strftime("%b %d, %Y"), inline=False)
embed.add_field(name='Fiók Kor', value=f"{account_age} nap", inline=False) embed.add_field(name='Account Age', value=f"{account_age} days", inline=False)
embed.add_field(name='Csatlakozott a Szerverre', value=member.joined_at.strftime("%b %d, %Y"), inline=False) embed.add_field(name='Joined Server', value=member.joined_at.strftime("%b %d, %Y"), inline=False)
embed.add_field(name='Jelenlegi Tevékenység', value=activity, inline=False) embed.add_field(name='Current Activity', value=activity, inline=False)
embed.add_field(name='Rangok', value='\n'.join(roles) or "Nincs rangja", inline=False) embed.add_field(name='Roles', value='\n'.join(roles) or "No roles", inline=False)
embed.add_field(name='Legmagasabb rang', value=roles[-1] if roles else "Nincs rangja", inline=False) embed.add_field(name='Highest Role', value=roles[-1] if roles else "No roles", inline=False)
embed.add_field(name='Nitro Boost?', value='Igen' if is_boosting else 'Nem', inline=False) embed.add_field(name='Nitro Boost?', value='Yes' if is_boosting else 'No', inline=False)
if is_boosting: if is_boosting:
embed.add_field(name='Boostolás kezdete', value=boosting_since.strftime("%b %d, %Y"), inline=False) embed.add_field(name='Boosting Since', value=boosting_since.strftime("%b %d, %Y"), inline=False)
embed.add_field(name='Bot?', value='Igen' if member.bot else 'Nem', inline=False) embed.add_field(name='Bot?', value='Yes' if member.bot else 'No', inline=False)
if bot.user.avatar: if bot.user.avatar:
embed.set_footer(text=f"{server_name} Bot", icon_url=bot.user.avatar.url) embed.set_footer(text=f"{server_name} Bot", icon_url=bot.user.avatar.url)
@@ -741,90 +781,58 @@ async def userinfo(interaction, tag: discord.Member = None):
await interaction.response.send_message(embed=embed) await interaction.response.send_message(embed=embed)
@bot.slash_command() @bot.slash_command()
async def ui(interaction, member: discord.Member = None): async def ui(interaction: discord.Interaction, member: discord.Member = None):
await userinfo(interaction, member) await userinfo(interaction, member)
if not server_ip == 'example.com': if not server_ip == 'example.com':
@bot.slash_command() @bot.slash_command()
async def ip(interaction): async def ip(interaction):
await interaction.response.send_message(f'A szerver ipje: **{server_ip}**') await interaction.response.send_message(f'Server IP: **{server_ip}**')
@bot.slash_command() @bot.slash_command()
async def help(interaction, help_tema=None): async def help(interaction: discord.Interaction, topic=None):
embed = discord.Embed(title='Bot Parancsok', color=discord.Colour.red()) embed = discord.Embed(title='Bot Commands', color=discord.Colour.red())
parancsok = {
'Mod': [ if topic != None:
['/clear {mennyiség}', 'Törli a jelenlegi csatornában lévő üzeneteket'], if commands.get(topic.title()) != None:
['/warn {felhasználó említése}', 'Egy figyelmeztetést ad a megadott felhasználónak, ha az elért egy számú figyelmeztetést, büntetést is ad.'], for parancs in commands[topic.title()]:
['/mute {felhasználó neve}', 'Lenémít egy felhasználót'],
['/kick {felhasználó említése}', 'Kirúg egy felhasználót'],
['/ban {felhasználó említése}', 'Kitilt egy felhasználót'],
['/unban {felhasználó neve}', 'Unbannol egy felhasználót'],
['/clear_member_msg {felhasználó említése} {üzenetek száma}', 'Csak egy kiválszott felhasználó üzeneteit törli a jelenlegi csatornában']],
'Fun': [
['/say {szöveg}', 'A bot elküldi amit írsz.'],
['/suggest {ötlet}','Segíts nekünk egy ötlet írásával!'],
['/screenshot {link}','Készíts egy screenshotot egy oldalról!']],
'Infó': [
['/help', 'Ez a parancs'],
['/userinfo {felhasználó említés} vagy /ui {felhasználó említés}','Információk egy felhasználóról'],
['/serverinfo vagy /si {felhasználó említés}','Információk a dc szerverünkről'],
['/ip', 'Kiírja a minecraft szerverünk ip címét'],
['/mcstats','Tudd meg szerverünk jelenlegi pingjét és játékos számát']],
'Admin': [
['/giveaway {idő} {nyertesek száma} {nyeremény}','Csinál egy giveawayt a jelenlegi csatornában.'],
['/greroll {üzenet idja}','A megadott üzenet id alapján a giveawayt fogja újrasorsolni..'],
['/send_reaction_role_message {csatorna említése}','Elküldi a reakció rang panelt az említett csatornában'],
['/send_ticket_message {csatorna említése}','Elküldi a hibajegy panelt az említett csatornában'],
['/autoclose {idő}','Adott idő után ha nem talál üzenetet, akkor bezárja a ticketet'],
['/lock','Lezárja a jelenlegi csatornát.'],
['/unlock','Felnyitja a jelenlegi csatornát.']]
}
kategoria_leirasok = {
'Infó': 'Információs Parancsok pl /userinfo',
'Admin': 'Adminoknak szánt parancsok',
'Mod': 'Moderátoroknak szánt parancsok.',
"Fun": 'Fun parancsok pl. /say'}
if help_tema != None:
if parancsok.get(help_tema.title()) != None:
for parancs in parancsok[help_tema.title()]:
embed.add_field(name=parancs[0], value=parancs[1]) embed.add_field(name=parancs[0], value=parancs[1])
else: else:
await interaction.response.send_message('Ez a help kategória nem létezik!') await interaction.response.send_message('This help category does not exist!')
return return
# for kategoria in parancsok:
# for parancs in parancsok[kategoria]:
# if parancs[0].replace('/', '').startswith(str(help_tema)):
# embed.add_field(name=parancs[0], value=parancs[1])
# break
else: else:
for kategoria in parancsok: for category in commands:
embed.add_field(name=kategoria, value=kategoria_leirasok[kategoria]) embed.add_field(name=category, value=categories[category])
if not bot.user.avatar == None: if not bot.user.avatar == None:
embed.set_footer(text=f"{server_name} Bot", icon_url=bot.user.avatar.url) embed.set_footer(text=f"{server_name} Bot", icon_url=bot.user.avatar.url)
else: else:
embed.set_footer(text=f"{server_name} Bot") embed.set_footer(text=f"{server_name} Bot")
await interaction.response.send_message(embed=embed) await interaction.response.send_message(embed=embed)
@bot.slash_command() @bot.slash_command()
async def serverinfo(interaction: discord.Interaction): async def serverinfo(interaction: discord.Interaction):
server = interaction.guild server = interaction.guild
roles = [role.name for role in server.roles] roles = [role.name for role in server.roles]
roles.reverse() roles.reverse()
embed = discord.Embed(title='Szerver infó', color=discord.Colour.red())
embed.add_field(name='Név', value=server.name, inline=False) embed = discord.Embed(title='Server Info', color=discord.Colour.red())
embed.add_field(name='Name', value=server.name, inline=False)
embed.add_field(name='ID', value=server.id, inline=False) embed.add_field(name='ID', value=server.id, inline=False)
embed.add_field(name='Rangok száma', value=str(len(server.roles)), inline=False) embed.add_field(name='Number of Roles', value=str(len(server.roles)), inline=False)
embed.add_field(name='Tagok száma', value=str(len(server.members)), inline=False) embed.add_field(name='Number of Members', value=str(len(server.members)), inline=False)
embed.add_field(name='Emberek száma', value=str(sum([1 if not member.bot else 0 for member in server.members])), inline=False) embed.add_field(name='Number of Humans', value=str(sum([1 if not member.bot else 0 for member in server.members])), inline=False)
embed.add_field(name='Botok száma', value=str(sum([1 if member.bot else 0 for member in server.members])), inline=False) embed.add_field(name='Number of Bots', value=str(sum([1 if member.bot else 0 for member in server.members])), inline=False)
embed.add_field(name='Legmagasabb rang', value=roles[0], inline=False) embed.add_field(name='Highest Role', value=roles[0], inline=False)
embed.add_field(name="Boostok száma", value=server.premium_subscription_count, inline=False) embed.add_field(name="Number of Boosts", value=server.premium_subscription_count, inline=False)
#embed.add_field(name="Botok", value=server.premium_subscription_count, inline=False)
if not bot.user.avatar == None: if not bot.user.avatar == None:
embed.set_footer(text=f"{server_name} Bot", icon_url=bot.user.avatar.url) embed.set_footer(text=f"{server_name} Bot", icon_url=bot.user.avatar.url)
else: else:
embed.set_footer(text=f"{server_name} Bot") embed.set_footer(text=f"{server_name} Bot")
await interaction.response.send_message(embed=embed) await interaction.response.send_message(embed=embed)
@bot.slash_command() @bot.slash_command()
@@ -832,67 +840,46 @@ async def si(interaction):
await serverinfo(interaction) await serverinfo(interaction)
@bot.slash_command() @bot.slash_command()
async def clear(interaction: discord.Interaction, mennyiseg: int): async def clear(interaction: discord.Interaction, amount: int):
if interaction.user.guild_permissions.manage_messages: if interaction.user.guild_permissions.manage_messages:
await interaction.channel.purge(limit=mennyiseg+1) await interaction.channel.purge(limit=amount + 1)
response = await interaction.response.send_message(f'{mennyiseg} üzenet törölve!') response = await interaction.response.send_message(f'{amount} messages deleted!')
else: else:
await interaction.response.send_message("Nincs jogod használni ezt a parancsot!", ephemeral=True) await interaction.response.send_message("You don't have permission to use this command!", ephemeral=True)
@bot.slash_command() @bot.slash_command()
async def say(interaction, szoveg): async def say(interaction: discord.Interaction, text):
if interaction.user.guild_permissions.manage_messages: if interaction.user.guild_permissions.manage_messages:
if '<@' in szoveg or "@everyone" in szoveg or "@here" in szoveg: if '<@' in text or "@everyone" in text or "@here" in text:
await interaction.response.send_message('Pinget nem használhatsz egy say parancsban!', ephemeral=True) await interaction.response.send_message('You cannot use pings in a say command!', ephemeral=True)
return return
await interaction.channel.send(szoveg) await interaction.channel.send(text)
#await interaction.response.send_message(szoveg)
else: else:
await interaction.response.send_message("Nincs jogod használni ezt a parancsot!", ephemeral=True) await interaction.response.send_message("You don't have permission to use this command!", ephemeral=True)
def check_member_msg_purge(message, member, amount):
global cleared_num
if member == message.author:
cleared_num += 1
return cleared_num <= amount
@bot.slash_command() @bot.slash_command()
async def clear_member_msg(interaction, amount: int, member: discord.Member): async def autoclose(interaction: discord.Interaction, duration):
if interaction.user.guild_permissions.manage_messages:
global cleared_num
cleared_num = 0
if not amount == 'all':
await interaction.channel.purge(check=lambda message: member == message.author)
else:
await interaction.channel.purge(check=lambda message, member=member, amount=amount:check_member_msg_purge(message, member, amount))
await interaction.channel.send(amount.replace('all', 'összes')+' '+str(member)+' által írt üzenet törölve')
@bot.slash_command()
async def autoclose(interaction, duration):
if interaction.user.guild_permissions.manage_channels: if interaction.user.guild_permissions.manage_channels:
ticket_category = discord.utils.get( ticket_category = discord.utils.get(
interaction.channel.guild.categories, id=ticket_category_id) interaction.channel.guild.categories, id=ticket_category_id)
if interaction.channel.category == ticket_category: if interaction.channel.category == ticket_category:
time_convert = {"s": 1, "m": 60, "h": 3600,
"d": 86400, "w": 604800, "mo": 31536000}
seconds = int(duration.split(duration[-1])[0]) * time_convert[duration[-1]] seconds = int(duration.split(duration[-1])[0]) * time_convert[duration[-1]]
await interaction.response.send_message(f'Sikeres autoclose művelet! Ha ticketben nem lesz üzenet {seconds} másodperc után, a ticket automatikusan zárolva lesz!') await interaction.response.send_message(f'Successful autoclose operation! If there are no messages in the ticket after {seconds} seconds, the ticket will be automatically closed!')
await asyncio.sleep(seconds) await asyncio.sleep(seconds)
messages = await interaction.channel.history(limit=1).flatten() messages = await interaction.channel.history(limit=1).flatten()
last_message = messages[0] last_message = messages[0]
time_difference = datetime.datetime.now(pytz.timezone('Europe/Berlin')) - last_message.created_at.replace(tzinfo=pytz.UTC) time_difference = time.time() - last_message.created_at.timestamp()
if time_difference.total_seconds() >= seconds: if time_difference >= seconds:
await interaction.channel.send("Ticket inaktivitás miatt zárolva.") await interaction.channel.send("Ticket locked due to inactivity.")
await asyncio.sleep(3) await asyncio.sleep(3)
await interaction.channel.delete() await interaction.channel.delete()
else: else:
await interaction.response.send_message('Ezt a parancsot csak ticketekben lehet használni!') await interaction.response.send_message('This command can only be used in tickets!')
else: else:
await interaction.response.send_message("Nincs jogod használni ezt a parancsot!", ephemeral=True) await interaction.response.send_message("You don't have permission to use this command!", ephemeral=True)
if not settings['token'] == 'TOKEN': if settings['token']:
bot.run(settings['token']) bot.run(settings['token'])
else: else:
print('Írd át a token változót a settings.json fájlban a bot elindításához!') print('Change the token variable in the settings.json file to start the bot!')

View File

@@ -1,12 +1,11 @@
[project] [project]
name = "mc-bot" name = "mc-bot"
version = "0.1.0" version = "0.1.0"
description = "MC discord bot" description = "MC Discord Bot"
readme = "README.md" readme = "README.md"
requires-python = ">=3.13" requires-python = ">=3.11"
dependencies = [ dependencies = [
"audioop-lts>=0.2.1", "audioop-lts>=0.2.1",
"mcstatus>=11.1.1", "mcstatus>=11.1.1",
"py-cord[voice]>=2.6.1", "py-cord[voice]>=2.6.1",
"pytz>=2025.2",
] ]

View File

@@ -1,12 +1,10 @@
{ {
"log_channel_id": -1, "log_channel_id": -1,
"ticket_categories": [ "ticket_categories": [
["⛔", "Hiba bejelentése"], ["⛔", "Report Bugs"],
["🏆", "TGF"], ["🎁", "Rewards"],
["🤡", "Csaló Jelentése"], ["", "Other Questions"],
["🎁", "Jutalom átvétele"], ["🤝", "Partners"]
["❓", "Egyéb kérdések"],
["🤝", "Partnerkedés"]
], ],
"join_channel_id": -1, "join_channel_id": -1,
"join_autorole_id": -1, "join_autorole_id": -1,