-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy pathmain.py
More file actions
137 lines (102 loc) · 3.92 KB
/
main.py
File metadata and controls
137 lines (102 loc) · 3.92 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
import datetime
import json
import discord
from discord.ext import commands
from CodeUtils import embeds
import mccommands
import setup
import mcrcon
from data_store import load_user_data, save_user_data
bot_token = None
server_ip = None
server_rcon_port = None
server_rcon_password = None
server_member_role_name = None
def config_reload():
global bot_token, server_ip, server_rcon_port, server_rcon_password, server_member_role_name
with open('config.json', 'r') as config:
config = json.load(config)
bot_token = str(config["bot_token"])
server_ip = str(config["server_ip"])
server_rcon_port = int(config["server_rcon_port"])
server_rcon_password = str(config["server_rcon_password"])
server_member_role_name = config["server_member_role_name"]
config_reload()
load_user_data()
intents = discord.Intents.all()
bot = commands.Bot(command_prefix='!', intents=intents)
@bot.event
async def on_ready():
await bot.add_cog(mccommands.mccommands(bot))
await bot.add_cog(setup.setup(bot))
print(f'Logged in as {bot.user.name}')
with open('config.json', 'r') as file:
config_data = json.load(file)
config_data['bot_name'] = bot.user.name
with open('config.json', 'w') as file:
json.dump(config_data, file, indent=4)
print(f"|✅|{datetime.datetime.now().strftime('%d/%m/%y %H:%M:%S')}| - All Cogs Loaded")
await bot.tree.sync()
print(f"|✅|{datetime.datetime.now().strftime('%d/%m/%y %H:%M:%S')}| - bot.tree synced")
@bot.event
async def on_member_update(before, after):
if server_member_role_name in [role.name for role in after.roles]:
if server_member_role_name not in [role.name for role in before.roles]:
await set_mcname_permission(after, True)
await notify_role_added(after)
if server_member_role_name not in [role.name for role in after.roles]:
if server_member_role_name in [role.name for role in before.roles]:
await set_mcname_permission(after, False)
await remove_from_whitelist(after)
async def remove_from_whitelist(member):
config_reload()
data = load_user_data()
discord_name = str(member)
record = data.get(discord_name)
if not record:
return
minecraft_name = record.get("minecraft_name", "")
if not minecraft_name:
return
rcon = mcrcon.MCRcon(host=str(server_ip), password=str(server_rcon_password), port=int(server_rcon_port))
try:
rcon.connect()
rcon.command(f'whitelist remove {minecraft_name}')
rcon.command(f'kick {minecraft_name} Du bist nicht mehr auf der Whitelist!')
print(f"|🖥|{datetime.datetime.now().strftime('%d/%m/%y %H:%M:%S')}| - removed {minecraft_name} from the whitelist")
finally:
try:
rcon.disconnect()
except Exception:
pass
record["minecraft_name"] = ""
record["permission"] = False
data[discord_name] = record
save_user_data(data)
async def notify_role_added(member):
try:
await member.send(embed=embeds.MCaddUserEmbed())
except discord.Forbidden:
print(
f"|⚠️|{datetime.datetime.now().strftime('%d/%m/%y %H:%M:%S')}| - "
f"Could not DM {member}: DMs are disabled."
)
except discord.HTTPException as exc:
print(
f"|⚠️|{datetime.datetime.now().strftime('%d/%m/%y %H:%M:%S')}| - "
f"Failed to DM {member}: {exc}"
)
def is_mcname_permission_allowed(member):
data = load_user_data()
discord_name = str(member)
if discord_name in data:
return data[discord_name].get("permission", False)
return False
async def set_mcname_permission(member, permission):
data = load_user_data()
discord_name = str(member)
record = data.get(discord_name, {"minecraft_name": "", "permission": False})
record["permission"] = permission
data[discord_name] = record
save_user_data(data)
bot.run(str(bot_token))