def _handle_levelup(self, user, userinfo, server, channel):
if not isinstance(self.settings["lvl_msg"], list):
self.settings["lvl_msg"] = []
fileIO("data/leveler/settings.json", "save", self.settings)
if server.id in self.settings["lvl_msg"]: # if lvl msg is enabled
# channel lock implementation
if "lvl_msg_lock" in self.settings.keys() and server.id in self.settings["lvl_msg_lock"].keys():
channel_id = self.settings["lvl_msg_lock"][server.id]
channel = find(lambda m: m.id == channel_id, server.channels)
server_identifier = "" # super hacky
name = self._is_mention(user) # also super hacky
# private message takes precedent, of course
if "private_lvl_msg" in self.settings and server.id in self.settings["private_lvl_msg"]:
server_identifier = " on {}".format(server.name)
channel = user
name = "You"
new_level = str(userinfo["servers"][server.id]["level"])
# add to appropriate role if necessary
try:
server_roles = db.roles.find_one({'server_id':server.id})
if server_roles != None:
for role in server_roles['roles'].keys():
if int(server_roles['roles'][role]['level']) == int(new_level):
role_obj = discord.utils.find(lambda r: r.name == role, server.roles)
await self.bot.add_roles(user, role_obj)
if server_roles['roles'][role]['remove_role'] != None:
remove_role_obj = discord.utils.find(
lambda r: r.name == server_roles['roles'][role]['remove_role'], server.roles)
if remove_role_obj != None:
await self.bot.remove_roles(user, remove_role_obj)
except:
await self.bot.send_message(channel, 'Role was not set. Missing Permissions!')
# add appropriate badge if necessary
try:
server_linked_badges = db.badgelinks.find_one({'server_id':server.id})
if server_linked_badges != None:
for badge_name in server_linked_badges['badges']:
if int(server_linked_badges['badges'][badge_name]) == int(new_level):
server_badges = db.badges.find_one({'server_id':server.id})
if server_badges != None and badge_name in server_badges['badges'].keys():
userinfo_db = db.users.find_one({'user_id':user.id})
new_badge_name = "{}_{}".format(badge_name, server.id)
userinfo_db["badges"][new_badge_name] = server_badges['badges'][badge_name]
db.users.update_one({'user_id':user.id}, {'$set':{"badges": userinfo_db["badges"]}})
except:
await self.bot.send_message(channel, 'Error. Badge was not given!')
if "text_only" in self.settings and server.id in self.settings["text_only"]:
await self.bot.send_typing(channel)
em = discord.Embed(description='**{} just gained a level{}! (LEVEL {})**'.format(name, server_identifier, new_level), colour=user.colour)
await self.bot.send_message(channel, '', embed = em)
else:
await self.draw_levelup(user, server)
await self.bot.send_typing(channel)
await self.bot.send_file(channel, 'data/leveler/temp/{}_level.png'.format(user.id), content='**{} just gained a level{}!**'.format(name, server_identifier))
评论列表
文章目录