Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Refactor branch to dev #22

Merged
merged 71 commits into from
Dec 28, 2020
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
71 commits
Select commit Hold shift + click to select a range
a554ede
Starting to refactor Utility.py
MujyKun Dec 26, 2020
db3893f
Lastfm refactor
A-Phamfam Dec 26, 2020
5359cee
fixed issue with static method referencing Utility object
MujyKun Dec 26, 2020
a6954bc
Refactor patreon
A-Phamfam Dec 26, 2020
634a5ef
Refactor moderator
A-Phamfam Dec 26, 2020
77af4ee
Refactor customcommands
A-Phamfam Dec 26, 2020
e89d968
Refactor Biasgame
A-Phamfam Dec 26, 2020
766fde1
Refactor datadog
A-Phamfam Dec 26, 2020
f41da4d
Finished Refactoring Cache Util
MujyKun Dec 26, 2020
0aab956
Finished Refactoring Cache Util
MujyKun Dec 26, 2020
86419fd
Finished Refactoring Currency Util
MujyKun Dec 26, 2020
6719b24
Refactor weverse
A-Phamfam Dec 26, 2020
3fe154f
Refactor self assign roles
A-Phamfam Dec 26, 2020
7a192e7
Refactor reminder
A-Phamfam Dec 26, 2020
c6cdb5d
Refactor twitter
A-Phamfam Dec 26, 2020
5c0ceb2
Finished Refactoring Miscellaneous Util
MujyKun Dec 26, 2020
3113a1e
Refactor logging
A-Phamfam Dec 26, 2020
7c35245
Finished Refactoring BlackJack Util
MujyKun Dec 26, 2020
fe4fc01
Finished Refactoring Levels Util
MujyKun Dec 26, 2020
0c99d21
Refactor groupmembers
A-Phamfam Dec 26, 2020
1e77641
Merge pull request #3 from MujyKun/database
MujyKun Dec 26, 2020
de3c6a6
Merge pull request #4 from MujyKun/cache
MujyKun Dec 26, 2020
0822d64
Merge branch 'refactor' into currency
MujyKun Dec 26, 2020
14eb905
Merge pull request #5 from MujyKun/currency
MujyKun Dec 26, 2020
e794037
Merge branch 'refactor' into miscellaneous
MujyKun Dec 26, 2020
9f3a766
Merge pull request #6 from MujyKun/miscellaneous
MujyKun Dec 26, 2020
08e96f0
Merge branch 'refactor' into GroupMembers
MujyKun Dec 26, 2020
9712d44
Merge pull request #7 from MujyKun/GroupMembers
MujyKun Dec 26, 2020
4f37d0d
Merge branch 'refactor' into Logging
MujyKun Dec 26, 2020
7293ed2
Merge pull request #8 from MujyKun/Logging
MujyKun Dec 26, 2020
f3dfe03
Merge pull request #9 from MujyKun/Twitter
MujyKun Dec 26, 2020
694d6b2
Merge branch 'refactor' into Reminder
MujyKun Dec 26, 2020
d31cf24
Merge pull request #10 from MujyKun/Reminder
MujyKun Dec 26, 2020
3e52802
Merge branch 'refactor' into blackjack
MujyKun Dec 26, 2020
4945861
Merge pull request #11 from MujyKun/blackjack
MujyKun Dec 26, 2020
1961508
Merge pull request #12 from MujyKun/SelfAssignroles
MujyKun Dec 26, 2020
18f04c2
Merge branch 'refactor' into levels
MujyKun Dec 26, 2020
c80b818
Merge pull request #13 from MujyKun/levels
MujyKun Dec 26, 2020
11aac30
Merge branch 'refactor' into Weverse
MujyKun Dec 26, 2020
a20cb17
Merge pull request #14 from MujyKun/Weverse
MujyKun Dec 26, 2020
e714689
Merge branch 'refactor' into DataDog
MujyKun Dec 26, 2020
e00388c
Merge pull request #15 from MujyKun/DataDog
MujyKun Dec 26, 2020
f05b6dc
Merge pull request #16 from MujyKun/BiasGame
MujyKun Dec 26, 2020
6dc80d3
Merge branch 'refactor' into CustomCommands
MujyKun Dec 26, 2020
e68086c
Merge pull request #17 from MujyKun/CustomCommands
MujyKun Dec 26, 2020
4bd96a4
Merge branch 'refactor' into Moderator
MujyKun Dec 26, 2020
71659ab
Merge pull request #18 from MujyKun/Moderator
MujyKun Dec 26, 2020
60ce101
Merge branch 'refactor' into Patreon
MujyKun Dec 26, 2020
87a924f
Merge pull request #19 from MujyKun/Patreon
MujyKun Dec 26, 2020
db99ac6
Merge pull request #20 from MujyKun/Last_FM
MujyKun Dec 26, 2020
e5e64a5
Merge branch 'dev' into refactor
MujyKun Dec 26, 2020
8ae08ba
Need help fixing stuff
MujyKun Dec 26, 2020
2e5ebde
Refactor to ex.subclass
A-Phamfam Dec 26, 2020
cafa847
ex.subclasses
MujyKun Dec 26, 2020
ce0b1cf
Merge pull request #23 from MujyKun/refactor_p
MujyKun Dec 26, 2020
1547fd7
ex.subclasses
MujyKun Dec 26, 2020
4abdbb7
ex.subclasses
MujyKun Dec 26, 2020
1438d04
Changed so .get_cooldown_time() is being called from the proper subclass
A-Phamfam Dec 26, 2020
6fceb0d
Currently cleaning up warnings
MujyKun Dec 26, 2020
a9eb7aa
Merge branch 'refactor' of https://github.com/MujyKun/IreneBot into r…
MujyKun Dec 26, 2020
65e9e47
Added PyCharm inspection comments, shortened exceptions, and cleared …
MujyKun Dec 27, 2020
aa76edb
Added comments for acceptable Pycharm coding style violations
MujyKun Dec 27, 2020
cf5544e
Made all necessary methods static
MujyKun Dec 27, 2020
d4e7f2e
Added .gitkeep to folders and using .gitignore properly
MujyKun Dec 27, 2020
cbc764f
Removed unused module Cogs.
MujyKun Dec 27, 2020
3fdd556
Added a few comments in Utility
MujyKun Dec 27, 2020
4fd07b5
Added few comments
MujyKun Dec 28, 2020
12a0435
Added flask as a requirement
MujyKun Dec 28, 2020
c1e7c9e
Fixed references to methods that have been moved to util classes
A-Phamfam Dec 28, 2020
0d7c450
Fixed referencing issues with Utility and Utils
MujyKun Dec 28, 2020
0202b36
Merge branch 'refactor' of https://github.com/MujyKun/IreneBot into r…
MujyKun Dec 28, 2020
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Refactor self assign roles
  • Loading branch information
A-Phamfam committed Dec 26, 2020
commit 3fe154f08e88954f0302c5598f92764b17fc2ac8
123 changes: 0 additions & 123 deletions Utility.py
Original file line number Diff line number Diff line change
Expand Up @@ -2789,129 +2789,6 @@ async def send_weverse_to_channel(self, channel_info, message_text, embed, is_co
# no permission to post
return

#########################
# ## SelfAssignRoles ## #
#########################
async def add_self_role(self, role_id, role_name, server_id):
"""Adds a self-assignable role to a server."""
role_info = [role_id, role_name]
await self.conn.execute("INSERT INTO selfassignroles.roles(roleid, rolename, serverid) VALUES ($1, $2, $3)", role_id, role_name, server_id)
roles = await self.get_assignable_server_roles(server_id)
if roles:
roles.append(role_info)
else:
cache_info = self.cache.assignable_roles.get(server_id)
if not cache_info:
self.cache.assignable_roles[server_id] = {}
cache_info = self.cache.assignable_roles.get(server_id)
cache_info['roles'] = [role_info]

async def get_self_role(self, message_content, server_id):
"""Returns a discord.Object that can be used for adding or removing a role to a member."""
roles = await self.get_assignable_server_roles(server_id)
if roles:
for role in roles:
role_id = role[0]
role_name = role[1]
if role_name.lower() == message_content.lower():
return discord.Object(role_id), role_name
return None, None

async def check_self_role_exists(self, role_id, role_name, server_id):
"""Check if a role exists as a self-assignable role in a server."""
cache_info = self.cache.assignable_roles.get(server_id)
if cache_info:
roles = cache_info.get('roles')
if roles:
for role in roles:
c_role_id = role[0]
c_role_name = role[1]
if c_role_id == role_id or c_role_name == role_name:
return True
return False

async def remove_self_role(self, role_name, server_id):
"""Remove a self-assignable role from a server."""
await self.conn.execute("DELETE FROM selfassignroles.roles WHERE rolename = $1 AND serverid = $2", role_name, server_id)
cache_info = self.cache.assignable_roles.get(server_id)
if cache_info:
roles = cache_info.get('roles')
if roles:
for role in roles:
if role[1].lower() == role_name.lower():
roles.remove(role)

async def modify_channel_role(self, channel_id, server_id):
"""Add or Change a server's self-assignable role channel."""
def update_cache():
cache_info = self.cache.assignable_roles.get(server_id)
if not cache_info:
self.cache.assignable_roles[server_id] = {'channel_id': channel_id}
else:
cache_info['channel_id'] = channel_id

amount_of_results = self.first_result(await self.conn.fetchrow("SELECT COUNT(*) FROM selfassignroles.channels WHERE serverid = $1", server_id))
if amount_of_results:
update_cache()
return await self.conn.execute("UPDATE selfassignroles.channels SET channelid = $1 WHERE serverid = $2", channel_id, server_id)
await self.conn.execute("INSERT INTO selfassignroles.channels(channelid, serverid) VALUES($1, $2)", channel_id, server_id)
update_cache()

async def get_assignable_server_roles(self, server_id):
"""Get all the self-assignable roles from a server."""
results = self.cache.assignable_roles.get(server_id)
if results:
return results.get('roles')

async def check_for_self_assignable_role(self, message):
"""Main process for processing self-assignable roles."""
try:
author = message.author
server_id = await self.get_server_id(message)
if await self.check_self_assignable_channel(server_id, message.channel):
if message.content:
prefix = message.content[0]
if len(message.content) > 1:
msg = message.content[1:len(message.content)]
else:
return
role, role_name = await self.get_self_role(msg, server_id)
await self.process_member_roles(message, role, role_name, prefix, author)
except Exception as e:
log.console(e)

async def check_self_assignable_channel(self, server_id, channel):
"""Check if a channel is a self assignable role channel."""
if server_id:
cache_info = self.cache.assignable_roles.get(server_id)
if cache_info:
channel_id = cache_info.get('channel_id')
if channel_id:
if channel_id == channel.id:
return True

@staticmethod
async def check_member_has_role(member_roles, role_id):
"""Check if a member has a role"""
for role in member_roles:
if role.id == role_id:
return True

async def process_member_roles(self, message, role, role_name, prefix, author):
"""Adds or removes a (Self-Assignable) role from a member"""
if role:
if prefix == '-':
if await self.check_member_has_role(author.roles, role.id):
await author.remove_roles(role, reason="Self-Assignable Role", atomic=True)
return await message.channel.send(f"> {author.display_name}, You no longer have the {role_name} role.", delete_after=10)
else:
return await message.channel.send(f"> {author.display_name}, You do not have the {role_name} role.", delete_after=10)
elif prefix == '+':
if await self.check_member_has_role(author.roles, role.id):
return await message.channel.send(f"> {author.display_name}, You already have the {role_name} role.", delete_after=10)
await author.add_roles(role, reason="Self-Assignable Role", atomic=True)
return await message.channel.send(f"> {author.display_name}, You have been given the {role_name} role.", delete_after=10)
await message.delete()

##################
# ## REMINDER ## #
Expand Down
12 changes: 6 additions & 6 deletions module/SelfAssignRoles.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ async def setrolechannel(self, ctx, text_channel: discord.TextChannel = None):
if not text_channel:
text_channel = ctx.channel
try:
await ex.modify_channel_role(text_channel.id, ctx.guild.id)
await ex.u_self_assign_roles.modify_channel_role(text_channel.id, ctx.guild.id)
return await ctx.send(f"> Self-Assignable Roles can now only be used in {text_channel.name}")
except Exception as e:
log.console(e)
Expand All @@ -27,7 +27,7 @@ async def removerole(self, ctx, role_name):
"""Remove a self-assignable role based on the role name given.
[Format: %removerole <role_name>]"""
try:
await ex.remove_self_role(role_name, ctx.guild.id)
await ex.u_self_assign_roles.remove_self_role(role_name, ctx.guild.id)
return await ctx.send(f"> If {role_name} existed as a Self-Assignable role, it was removed.")
except Exception as e:
log.console(e)
Expand All @@ -39,7 +39,7 @@ async def listroles(self, ctx):
"""List all the self-assignable roles in a server.
[Format: %listroles]"""
try:
roles = await ex.get_assignable_server_roles(ctx.guild.id)
roles = await ex.u_self_assign_roles.get_assignable_server_roles(ctx.guild.id)
if not roles:
return await ctx.send("> You have no Self-Assignable roles in this server.")
msg_body = ""
Expand All @@ -58,9 +58,9 @@ async def addrole(self, ctx, role: discord.Role, *, role_name):
"""Add a role to be self-assignable.
[Format: %addrole <role> <role name>]"""
try:
if await ex.check_self_role_exists(role.id, role_name, ctx.guild.id):
if await ex.u_self_assign_roles.check_self_role_exists(role.id, role_name, ctx.guild.id):
return await ctx.send("> You have an identical role or role name, remove it first.")
await ex.add_self_role(role.id, role_name, ctx.guild.id)
await ex.u_self_assign_roles.add_self_role(role.id, role_name, ctx.guild.id)
await ctx.send(f"> Added {role.name} ({role_name}) to Self-Assignable Roles.")
except Exception as e:
log.console(e)
Expand All @@ -70,7 +70,7 @@ async def addrole(self, ctx, role: discord.Role, *, role_name):
@commands.has_guild_permissions(manage_messages=True)
async def sendrolemessage(self, ctx):
"""Sends the default role message in the current channel. Is not needed for the roles to work."""
roles = await ex.get_assignable_server_roles(ctx.guild.id)
roles = await ex.u_self_assign_roles.get_assignable_server_roles(ctx.guild.id)
if not roles:
return await ctx.send("> This server does not have any self-assignable roles.")
role_names = [f"`{role[1]}`" for role in roles]
Expand Down
2 changes: 1 addition & 1 deletion module/events.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ async def process_on_message(message):
# check for the n word
await Events.catch_on_message_errors(ex.check_for_nword, message)
# check for self-assignable roles and process it.
await Events.catch_on_message_errors(ex.check_for_self_assignable_role, message)
await Events.catch_on_message_errors(ex.u_self_assign_roles.check_for_self_assignable_role, message)
# process the commands with their prefixes.
await Events.catch_on_message_errors(ex.process_commands, message)
except Exception as e:
Expand Down
138 changes: 136 additions & 2 deletions util/selfassignroles.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,140 @@
from Utility import Utility

from module import logger as log
import discord

class SelfAssignRoles(Utility):
pass
#########################
# ## SelfAssignRoles ## #
#########################
async def add_self_role(self, role_id, role_name, server_id):
"""Adds a self-assignable role to a server."""
role_info = [role_id, role_name]
await self.conn.execute("INSERT INTO selfassignroles.roles(roleid, rolename, serverid) VALUES ($1, $2, $3)",
role_id, role_name, server_id)
roles = await self.get_assignable_server_roles(server_id)
if roles:
roles.append(role_info)
else:
cache_info = self.cache.assignable_roles.get(server_id)
if not cache_info:
self.cache.assignable_roles[server_id] = {}
cache_info = self.cache.assignable_roles.get(server_id)
cache_info['roles'] = [role_info]

async def get_self_role(self, message_content, server_id):
"""Returns a discord.Object that can be used for adding or removing a role to a member."""
roles = await self.get_assignable_server_roles(server_id)
if roles:
for role in roles:
role_id = role[0]
role_name = role[1]
if role_name.lower() == message_content.lower():
return discord.Object(role_id), role_name
return None, None

async def check_self_role_exists(self, role_id, role_name, server_id):
"""Check if a role exists as a self-assignable role in a server."""
cache_info = self.cache.assignable_roles.get(server_id)
if cache_info:
roles = cache_info.get('roles')
if roles:
for role in roles:
c_role_id = role[0]
c_role_name = role[1]
if c_role_id == role_id or c_role_name == role_name:
return True
return False

async def remove_self_role(self, role_name, server_id):
"""Remove a self-assignable role from a server."""
await self.conn.execute("DELETE FROM selfassignroles.roles WHERE rolename = $1 AND serverid = $2", role_name,
server_id)
cache_info = self.cache.assignable_roles.get(server_id)
if cache_info:
roles = cache_info.get('roles')
if roles:
for role in roles:
if role[1].lower() == role_name.lower():
roles.remove(role)

async def modify_channel_role(self, channel_id, server_id):
"""Add or Change a server's self-assignable role channel."""

def update_cache():
cache_info = self.cache.assignable_roles.get(server_id)
if not cache_info:
self.cache.assignable_roles[server_id] = {'channel_id': channel_id}
else:
cache_info['channel_id'] = channel_id

amount_of_results = self.first_result(
await self.conn.fetchrow("SELECT COUNT(*) FROM selfassignroles.channels WHERE serverid = $1", server_id))
if amount_of_results:
update_cache()
return await self.conn.execute("UPDATE selfassignroles.channels SET channelid = $1 WHERE serverid = $2",
channel_id, server_id)
await self.conn.execute("INSERT INTO selfassignroles.channels(channelid, serverid) VALUES($1, $2)", channel_id,
server_id)
update_cache()

async def get_assignable_server_roles(self, server_id):
"""Get all the self-assignable roles from a server."""
results = self.cache.assignable_roles.get(server_id)
if results:
return results.get('roles')

async def check_for_self_assignable_role(self, message):
"""Main process for processing self-assignable roles."""
try:
author = message.author
server_id = await self.get_server_id(message)
if await self.check_self_assignable_channel(server_id, message.channel):
if message.content:
prefix = message.content[0]
if len(message.content) > 1:
msg = message.content[1:len(message.content)]
else:
return
role, role_name = await self.get_self_role(msg, server_id)
await self.process_member_roles(message, role, role_name, prefix, author)
except Exception as e:
log.console(e)

async def check_self_assignable_channel(self, server_id, channel):
"""Check if a channel is a self assignable role channel."""
if server_id:
cache_info = self.cache.assignable_roles.get(server_id)
if cache_info:
channel_id = cache_info.get('channel_id')
if channel_id:
if channel_id == channel.id:
return True

@staticmethod
async def check_member_has_role(member_roles, role_id):
"""Check if a member has a role"""
for role in member_roles:
if role.id == role_id:
return True

async def process_member_roles(self, message, role, role_name, prefix, author):
"""Adds or removes a (Self-Assignable) role from a member"""
if role:
if prefix == '-':
if await self.check_member_has_role(author.roles, role.id):
await author.remove_roles(role, reason="Self-Assignable Role", atomic=True)
return await message.channel.send(
f"> {author.display_name}, You no longer have the {role_name} role.", delete_after=10)
else:
return await message.channel.send(f"> {author.display_name}, You do not have the {role_name} role.",
delete_after=10)
elif prefix == '+':
if await self.check_member_has_role(author.roles, role.id):
return await message.channel.send(
f"> {author.display_name}, You already have the {role_name} role.", delete_after=10)
await author.add_roles(role, reason="Self-Assignable Role", atomic=True)
return await message.channel.send(f"> {author.display_name}, You have been given the {role_name} role.",
delete_after=10)
await message.delete()