Skip to content

Commit 2f81a73

Browse files
authored
Merge pull request #180 from practical-python-org/merge/cleanup-branch-additions
fix: cleanup branch additions
2 parents ead410b + b790708 commit 2f81a73

File tree

12 files changed

+60
-65
lines changed

12 files changed

+60
-65
lines changed

README.md

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,8 @@ Main and Development already exist. You would want to make a new branch for what
8181

8282

8383

84-
![Untitled Diagram.drawio.png](..%2F..%2FDesktop%2FUntitled%20Diagram.drawio.png)
84+
![git-flow](https://github.com/practical-python-org/ZorakBot/assets/33434582/9d04d6a1-305f-48d9-8cee-be3ad08e099f)
85+
8586

8687

8788
### Version Bumping through PR titles
@@ -97,4 +98,4 @@ If your PR title does not include any of the specified prefixes, the GitHub Acti
9798

9899
When your PR is merged into main, the GitHub Action will increment the version according to the prefix in the PR title and create a new tag.
99100

100-
Please ensure you follow this convention to maintain a well-structured and meaningful version history for our project.
101+
Please ensure you follow this convention to maintain a well-structured and meaningful version history for our project.

git-flow.png

-26.8 KB
Binary file not shown.

src/zorak/cogs/admin/moderation_invites.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ def check_for_admin_override(arg_message):
8484
if not message.content.startswith('z.invite '):
8585
return False
8686

87-
return any(role.id in admin_roles.values() for role in message.author.roles)
87+
return any(role.id in self.bot.server_settings.admin_roles.values() for role in message.author.roles)
8888

8989
if is_invite(txt):
9090
if not check_for_admin_override(txt):

src/zorak/cogs/admin/verification_on_join.py

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,12 @@
22
This is a handler that adds a Need Approval role and sends the user a message.
33
"""
44
from asyncio import sleep
5-
5+
import logging
66
import discord
77
from discord.ext import commands
88

9+
logger = logging.getLogger(__name__)
10+
911

1012
class LoggingVerification(commands.Cog):
1113
"""
@@ -24,7 +26,8 @@ async def on_member_join(self, member: discord.Member):
2426
await member.add_roles(member.guild.get_role(self.bot.server_settings.unverified_role["needs_approval"]))
2527

2628
# Log unverified join
27-
logs_channel = await self.bot.fetch_channel(self.bot.server_settings.log_channel["verification_log"]) # ADMIN user log
29+
logs_channel = await self.bot.fetch_channel(
30+
self.bot.server_settings.log_channel["verification_log"]) # ADMIN user log
2831
await logs_channel.send(f"<@{member.id}> joined, but has not verified.")
2932

3033
# Send Welcome
@@ -42,7 +45,11 @@ async def on_member_join(self, member: discord.Member):
4245
After you do, all of {guild.name} is availibe to you. Have a great time :-)
4346
"""
4447
# Send Welcome Message
45-
await member.send(welcome_message)
48+
try:
49+
await member.send(welcome_message)
50+
except discord.errors.Forbidden as catch_dat_forbidden:
51+
logger.debug(f'{member.name} cannot be sent a DM.')
52+
4653
time_unverified_kick = 3600 # 1 hour
4754
await sleep(time_unverified_kick)
4855

@@ -54,7 +61,8 @@ async def on_member_join(self, member: discord.Member):
5461

5562
if "Needs Approval" in [role.name for role in member.roles]:
5663
# Log the kick
57-
await logs_channel.send(f"{member.mention} did not verify, auto-removed." f" ({(time_unverified_kick/3600)} hour/s)")
64+
await logs_channel.send(
65+
f"{member.mention} did not verify, auto-removed." f" ({(time_unverified_kick / 3600)} hour/s)")
5866
await member.kick(reason="Did not verify.")
5967

6068

src/zorak/cogs/admin/verification_on_verified.py

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -23,19 +23,23 @@ async def verify_button_callback(self, bot, interaction):
2323
user = interaction.user
2424
guild = interaction.guild
2525
roles = guild.roles
26-
role = discord.utils.get(roles, id=user_roles["unverified"]["needs_approval"])
26+
unverified_role = discord.utils.get(roles, id=self.bot.server_settings.unverified_role['needs_approval'])
27+
28+
# Moved this up here, as someone "unverified" might be able to block the command.
29+
if "Needs Approval" not in [role.name for role in user.roles]:
30+
await user.send("You have already been Verified. Go away.")
2731

2832
website = "https://practical-python-org.github.io/Home/"
29-
website_emoji = discord.utils.get(self.bot.emojis, name="logo")
33+
website_emoji = ":globe_with_meridians:"
3034
31-
email_emoji = "<:email:1040342884240597122>"
35+
email_emoji = ":email:"
3236
review = "https://disboard.org/review/create/900302240559018015"
3337
review_emoji = "<:100:1040342353417863318>"
3438
created = str(guild.created_at.timestamp())
3539
created = created[:10]
3640
created_emoji = "<:triangular_flag_on_post:1040343017204228217>"
3741
owner = guild.owner.mention
38-
owner_emoji = discord.utils.get(self.bot.emojis, name="xarlos")
42+
owner_emoji = (":crown:")
3943
invite = "https://discord.gg/vgZmgNwuHw"
4044
invite_emoji = "<:heart_hands:1040343137454915594>"
4145

@@ -70,14 +74,13 @@ async def verify_button_callback(self, bot, interaction):
7074
embed.add_field(name="Information", value=info)
7175

7276
if "Needs Approval" in [role.name for role in user.roles]:
73-
await user.remove_roles(role)
77+
await user.remove_roles(unverified_role)
7478
await user.send(embed=embed)
7579

7680
log_channels = await self.bot.fetch_channel(self.bot.server_settings.log_channel["verification_log"]) # ADMIN user log
7781
await log_channels.send(f"{user.mention} has verified!")
7882

79-
else:
80-
await user.send("You have already been Verified. Go away.")
83+
8184

8285

8386
class VerifyHelper(commands.Cog):

src/zorak/cogs/logging/logging_message_delete.py

Lines changed: 20 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
import discord
77
from discord.ext import commands
88

9-
# from utilities.cog_helpers._embeds import embed_message_delete
9+
from zorak.utilities.cog_helpers._embeds import embed_message_delete
1010

1111

1212
class LoggingMessageDelete(commands.Cog):
@@ -21,52 +21,30 @@ def __init__(self, bot):
2121
@commands.Cog.listener()
2222
async def on_message_delete(self, message):
2323
"""
24-
then we grab the guild, and from there read the last entry in the audit log.
25-
Discord is stupid right now, and message deletes in the audit log suck,
26-
so we cant use this now.
27-
https://discordpy.readthedocs.io/en/stable/api.html
28-
?highlight=audit%20log#discord.AuditLogAction.message_delete
24+
If a mod deletes, take the audit log event. If a user deletes, handle it normally.
2925
"""
30-
# current_guild = self.bot.get_guild(server_info['id'])
31-
# audit_log = [entry async for entry in current_guild.audit_logs(limit=1)][0]
32-
#
33-
# if str(audit_log.action) == 'AuditLogAction.message_delete':
34-
# member = current_guild.get_member(audit_log.user.id)
35-
#
36-
# embed = embed_message_delete(member, audit_log.target, message)
37-
#
38-
# logs_channel = await self.bot.fetch_channel(log_channel["chat_log"])
39-
# await logs_channel.send(embed=embed)
40-
# return
41-
42-
if message.author.nick is None:
43-
username = message.author
44-
else:
45-
username = message.author.nick
46-
47-
author = message.author
26+
current_guild = self.bot.get_guild(self.bot.server_settings.server_info['id'])
27+
audit_log = [entry async for entry in current_guild.audit_logs(limit=1)][0]
28+
logs_channel = await self.bot.fetch_channel(self.bot.server_settings.log_channel["chat_log"])
4829

49-
embed = discord.Embed(
50-
title="<:red_circle:1043616578744357085> Deleted Message",
51-
description=f"Deleted by {username}\nIn {message.channel.mention}",
52-
color=discord.Color.dark_red(),
53-
timestamp=datetime.utcnow(),
54-
)
55-
embed.set_thumbnail(url=author.avatar)
30+
# If the audit log is triggered, it means someone OTHER than the author deleted the message.
31+
# https://discordpy.readthedocs.io/en/stable/api.html
32+
# ?highlight=audit%20log#discord.AuditLogAction.message_delete
33+
if str(audit_log.action) == 'AuditLogAction.message_delete':
34+
embed = embed_message_delete(audit_log.user, message)
35+
await logs_channel.send(embed=embed)
5636

57-
embed.add_field(
58-
name="Message: ",
59-
value=message.content, # ToDo: This throws an error when deleting an embed.
60-
inline=True,
61-
)
37+
return
38+
else:
39+
# Otherwise, the author deleted it.
40+
username = message.author
6241

63-
logs_channel = await self.bot.fetch_channel(self.bot.server_settings.log_channel["chat_log"])
42+
for role in message.author.roles:
43+
if role.id in self.bot.server_settings.admin_roles.values():
44+
await logs_channel.send(embed=embed_message_delete(username, message))
45+
return
6446

65-
for role in message.author.roles:
66-
if role.id in self.bot.server_settings.admin_roles.values():
67-
await logs_channel.send(embed=embed)
68-
return
69-
await logs_channel.send(f"{username.mention}", embed=embed)
47+
await logs_channel.send(f"{username.mention}", embed=embed_message_delete(username, message))
7048

7149

7250
def setup(bot):

src/zorak/cogs/utility/rss.py renamed to src/zorak/cogs/utility/_rss.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
"""
22
Grabs info from an RSS feed, and posts it in the server. TODO Clean
3+
4+
this cog is retired, and not loaded by the bot. If we want to add the features again, we can.
35
"""
46
from asyncio import sleep
57

src/zorak/cogs/utility/points.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -136,10 +136,11 @@ def is_staff(member_obj):
136136
top10_no_staff = []
137137
points = self.bot.db_client.get_top_10()
138138
guild = self.bot.get_guild(self.bot.server_settings.server_info['id'])
139-
for person in points:
140-
member = guild.get_member(person['UserID'])
141-
if not is_staff(member):
142-
top10_no_staff.append((member, person['Points']))
139+
for iteration, person in enumerate(points):
140+
if iteration < 11:
141+
member = guild.get_member(person['UserID'])
142+
if not is_staff(member):
143+
top10_no_staff.append((member, person['Points']))
143144

144145
embed = embed_leaderboard(top10_no_staff, self.bot.server_settings.server_info['name'], self.bot.server_settings.server_info['logo'])
145146
await ctx.respond(embed=embed)

src/zorak/cogs/utility/utility_preview_message.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,10 @@ async def on_message(self, message):
2727
sourcechannel = sourceserver.get_channel(int(link[5]))
2828
sourcemessage = await sourcechannel.fetch_message(int(link[6]))
2929

30-
if len(sourcemessage.content) <= 1000:
30+
if len(sourcemessage.content) == 0:
31+
return
32+
33+
elif 0 < len(sourcemessage.content) <= 1000:
3134
embed = discord.Embed(
3235
title="Link preview: ",
3336
description=f"Length: {len(sourcemessage.content)}",

src/zorak/cogs/utility/utility_run_code.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ def __init__(self, bot):
1818
@commands.command()
1919
async def run(self, ctx, *, codeblock):
2020
"""
21-
# TODO: put this in it's own cog.
2221
Uses Piston-API to run code in the server.
2322
"""
2423
logger.info("%s used the %s command."

src/zorak/utilities/cog_helpers/_embeds.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -77,21 +77,21 @@ def embed_leave(some_member):
7777
return embed
7878

7979

80-
def embed_message_delete(some_member, some_author, some_message):
80+
def embed_message_delete(some_member, some_message):
8181
"""
8282
Embedding for user message deletion alerts.
8383
"""
8484
embed = discord.Embed(
8585
title='<:red_circle:1043616578744357085> Deleted Message'
86-
, description=f'{some_author} deleted a message'
86+
, description=f'{some_member} deleted a message'
8787
f'\nIn {some_message.channel}\nMessage '
8888
f'author: {some_message.author}'
8989
, color=discord.Color.dark_red()
9090
, timestamp=datetime.utcnow()
9191
)
9292

9393
embed.set_thumbnail(
94-
url=some_member.avatar
94+
url=some_member.avatar # the person who DELETED the message
9595
)
9696
if len(some_message.content) > 1020:
9797
the_message = some_message.content[0:1020] + '...'

0 commit comments

Comments
 (0)