Skip to content

Commit 8571b9a

Browse files
committed
Rewrote set_permissions; more tests; lower_case variables; support for python3.13
1 parent 43fc778 commit 8571b9a

File tree

10 files changed

+482
-388
lines changed

10 files changed

+482
-388
lines changed

.github/workflows/pytest.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ jobs:
1717
runs-on: ubuntu-latest
1818
strategy:
1919
matrix:
20-
python-version: [ "3.12.0", "3.12.3", "3.12.6" ]
20+
python-version: [ "3.12.0", "3.12.3", "3.12.6", "3.13.0 "]
2121
name: Beardless Bot Python ${{ matrix.python-version }} unit tests
2222
steps:
2323
- name: Enable Brawl tests on latest Python only

Bot.py

+86-77
Original file line numberDiff line numberDiff line change
@@ -152,13 +152,10 @@ async def on_message_delete(
152152
emb = None
153153
if (
154154
message.guild
155-
and (
156-
(
157-
hasattr(message.channel, "name")
158-
and message.channel.name != misc.LogChannelName
159-
)
160-
or message.content
161-
)
155+
and ((
156+
hasattr(message.channel, "name")
157+
and message.channel.name != misc.LogChannelName
158+
) or message.content)
162159
and (channel := misc.get_log_channel(message.guild))
163160
):
164161
emb = logs.log_delete_msg(message)
@@ -186,9 +183,9 @@ async def on_message_edit(
186183
if after.guild and (before.content != after.content):
187184
if misc.scam_check(after.content):
188185
await misc.delete_scam_and_notify(after)
189-
if logChannel := misc.get_log_channel(after.guild):
186+
if log_channel := misc.get_log_channel(after.guild):
190187
emb = logs.log_edit_msg(before, after)
191-
await logChannel.send(embed=emb)
188+
await log_channel.send(embed=emb)
192189
return emb
193190

194191

@@ -209,9 +206,9 @@ async def on_guild_channel_delete(
209206
channel: nextcord.abc.GuildChannel,
210207
) -> nextcord.Embed | None:
211208
emb = None
212-
if logChannel := misc.get_log_channel(channel.guild):
209+
if log_channel := misc.get_log_channel(channel.guild):
213210
emb = logs.log_delete_channel(channel)
214-
await logChannel.send(embed=emb)
211+
await log_channel.send(embed=emb)
215212
return emb
216213

217214

@@ -220,9 +217,9 @@ async def on_guild_channel_create(
220217
channel: nextcord.abc.GuildChannel,
221218
) -> nextcord.Embed | None:
222219
emb = None
223-
if logChannel := misc.get_log_channel(channel.guild):
220+
if log_channel := misc.get_log_channel(channel.guild):
224221
emb = logs.log_create_channel(channel)
225-
await logChannel.send(embed=emb)
222+
await log_channel.send(embed=emb)
226223
return emb
227224

228225

@@ -399,24 +396,26 @@ async def cmd_stay(ctx: misc.BotContext) -> int:
399396
async def cmd_av(ctx: misc.BotContext, *, target: str = "") -> int:
400397
if misc.ctx_created_thread(ctx):
401398
return -1
402-
await ctx.send(embed=misc.avatar(misc.get_target(ctx, target), ctx.message))
399+
await ctx.send(embed=misc.avatar(
400+
misc.get_target(ctx, target), ctx.message,
401+
))
403402
return 1
404403

405404

406405
@BeardlessBot.command(name="info") # type: ignore[arg-type]
407406
async def cmd_info(ctx: misc.BotContext, *, target: str = "") -> int:
408407
if misc.ctx_created_thread(ctx) or not ctx.guild:
409408
return -1
410-
infoTarget: nextcord.Member | str
409+
info_target: nextcord.Member | str
411410
if ctx.message.mentions:
412411
assert isinstance(ctx.message.mentions[0], nextcord.Member)
413-
infoTarget = ctx.message.mentions[0]
412+
info_target = ctx.message.mentions[0]
414413
elif target:
415-
infoTarget = target
414+
info_target = target
416415
else:
417416
assert isinstance(ctx.author, nextcord.Member)
418-
infoTarget = ctx.author
419-
await ctx.send(embed=misc.info(infoTarget, ctx.message))
417+
info_target = ctx.author
418+
await ctx.send(embed=misc.info(info_target, ctx.message))
420419
return 1
421420

422421

@@ -572,8 +571,8 @@ async def cmd_animals(ctx: misc.BotContext) -> int:
572571
),
573572
inline=False,
574573
)
575-
for animalName in misc.AnimalList:
576-
emb.add_field(name="!" + animalName, value="_ _")
574+
for animal_name in misc.AnimalList:
575+
emb.add_field(name="!" + animal_name, value="_ _")
577576
await ctx.send(embed=emb)
578577
return 1
579578

@@ -615,7 +614,7 @@ async def cmd_dog(ctx: misc.BotContext, *, breed: str = "") -> int:
615614
return -1
616615
assert ctx.invoked_with is not None
617616
try:
618-
dogUrl = await misc.get_dog(
617+
url = await misc.get_dog(
619618
breed.lower() if ctx.invoked_with.lower() != "moose" else "moose",
620619
)
621620
except (misc.AnimalException, ValueError, KeyError) as e:
@@ -626,13 +625,13 @@ async def cmd_dog(ctx: misc.BotContext, *, breed: str = "") -> int:
626625
"Please inform my creator and he'll see what's going on.",
627626
))
628627
return 0
629-
if dogUrl.startswith(("Dog breeds: ", "Breed not found")):
630-
await ctx.send(dogUrl)
631-
return int(dogUrl.startswith("Dog breeds: "))
632-
dogBreed = "Hound" if "hound" in dogUrl else dogUrl.split("/")[-2]
628+
if url.startswith(("Dog breeds: ", "Breed not found")):
629+
await ctx.send(url)
630+
return int(url.startswith("Dog breeds: "))
631+
dog_breed = "Hound" if "hound" in url else url.split("/")[-2]
633632
emb = misc.bb_embed(
634-
"Random " + dogBreed.replace("main", "moose").title(),
635-
).set_image(url=dogUrl)
633+
"Random " + dog_breed.replace("main", "moose").title(),
634+
).set_image(url=url)
636635
await ctx.send(embed=emb)
637636
return 1
638637

@@ -674,51 +673,53 @@ async def cmd_mute(
674673
) -> int:
675674
if misc.ctx_created_thread(ctx) or not ctx.guild:
676675
return -1
677-
if not (
678-
muteTarget := await misc.process_mute_target(ctx, target, BeardlessBot)
679-
):
676+
if not (mute_target := await misc.process_mute_target(
677+
ctx, target, BeardlessBot,
678+
)):
680679
return 0
681680
role = await misc.create_muted_role(ctx.guild)
682-
duration, reason, mTime = misc.process_mute_duration(duration, additional)
681+
duration, reason, mute_time = misc.process_mute_duration(
682+
duration, additional,
683+
)
683684
try:
684-
await muteTarget.add_roles(role)
685+
await mute_target.add_roles(role)
685686
except nextcord.Forbidden as e:
686687
misc.log_exception(e, ctx)
687688
await ctx.send(misc.HierarchyMsg)
688689
return 0
689690
addendum = (" for " + duration + ".") if duration is not None else "."
690691
emb = misc.bb_embed(
691-
"Beardless Bot Mute", "Muted " + muteTarget.mention + addendum,
692+
"Beardless Bot Mute", "Muted " + mute_target.mention + addendum,
692693
).set_author(name=ctx.author, icon_url=misc.fetch_avatar(ctx.author))
693694
if reason:
694695
emb.add_field(name="Mute Reason:", value=reason, inline=False)
695696
await ctx.send(embed=emb)
696697
if channel := misc.get_log_channel(ctx.guild):
697-
await channel.send(
698-
embed=logs.log_mute(muteTarget, ctx.message, duration),
699-
)
700-
if mTime:
701-
# autounmute(muteTarget, ctx, mTime, role, addendum)
698+
await channel.send(embed=logs.log_mute(
699+
mute_target, ctx.message, duration,
700+
))
701+
if mute_time:
702+
# autounmute(mute_target, ctx, mute_time, role, addendum)
702703
# TODO: use on_close() to make mute times persist through restarts
703704
# https://github.com/LevBernstein/BeardlessBot/issues/44
704705
# Autounmute
705706
logging.info(
706707
"Muted %s/%i%s Muter: %s/%i. Guild: %s",
707-
muteTarget.name,
708-
muteTarget.id,
708+
mute_target.name,
709+
mute_target.id,
709710
addendum,
710711
ctx.author.name,
711712
ctx.author.id,
712713
ctx.guild.name,
713714
)
714-
await asyncio.sleep(mTime)
715-
await muteTarget.remove_roles(role)
715+
await asyncio.sleep(mute_time)
716+
await mute_target.remove_roles(role)
716717
logging.info(
717-
"Autounmuted %s after waiting%s", muteTarget.name, addendum,
718+
"Autounmuted %s after waiting%s", mute_target.name, addendum,
718719
)
719720
if channel := misc.get_log_channel(ctx.guild):
720721
assert isinstance(ctx.author, nextcord.Member)
721-
await channel.send(embed=logs.log_unmute(muteTarget, ctx.author))
722+
await channel.send(embed=logs.log_unmute(mute_target, ctx.author))
722723
return 1
723724

724725

@@ -736,21 +737,21 @@ async def cmd_unmute(
736737
elif target:
737738
converter = commands.MemberConverter()
738739
try:
739-
mutedMember = await converter.convert(ctx, target)
740+
muted_member = await converter.convert(ctx, target)
740741
except commands.MemberNotFound as e:
741742
misc.log_exception(e, ctx)
742743
report = "Invalid target! Target must be a mention or user ID."
743744
else:
744745
try:
745-
await mutedMember.remove_roles(role)
746+
await muted_member.remove_roles(role)
746747
except nextcord.Forbidden as e:
747748
misc.log_exception(e, ctx)
748749
report = misc.HierarchyMsg
749750
else:
750-
report = f"Unmuted {mutedMember.mention}."
751+
report = f"Unmuted {muted_member.mention}."
751752
if channel := misc.get_log_channel(ctx.guild):
752753
await channel.send(
753-
embed=logs.log_unmute(mutedMember, ctx.author),
754+
embed=logs.log_unmute(muted_member, ctx.author),
754755
)
755756
else:
756757
report = f"Invalid target, {ctx.author.mention}."
@@ -766,7 +767,7 @@ async def cmd_purge(
766767
return -1
767768
assert hasattr(ctx.author, "guild_permissions")
768769
if ctx.author.guild_permissions.manage_messages:
769-
if num is None or not num.isnumeric() or ((mNum := int(num)) < 0):
770+
if num is None or not num.isnumeric() or ((limit := int(num)) < 0):
770771
await ctx.send(embed=misc.bb_embed(
771772
"Beardless Bot Purge", "Invalid message number!",
772773
))
@@ -776,7 +777,7 @@ async def cmd_purge(
776777
nextcord.TextChannel | nextcord.VoiceChannel | nextcord.Thread,
777778
)
778779
await ctx.channel.purge(
779-
limit=mNum + 1, check=lambda msg: not msg.pinned,
780+
limit=limit + 1, check=lambda msg: not msg.pinned,
780781
)
781782
return 1
782783
await ctx.send(embed=misc.bb_embed(
@@ -864,7 +865,7 @@ async def cmd_spar(
864865
await ctx.send(embed=misc.SparPinsEmbed)
865866
return 0
866867
report = brawl.BadRegion.format(author)
867-
tooRecent: int | None = None
868+
too_recent: int | None = None
868869
role: nextcord.Role | None = None
869870
if (region := region.lower()) in {"usw", "use"}:
870871
region = region[:2] + "-" + region[2]
@@ -880,13 +881,15 @@ async def cmd_spar(
880881
pings[region] = int(time())
881882
report = f"{role.mention} come spar {author}"
882883
else:
883-
tooRecent = value
884-
if role and tooRecent:
885-
hours, seconds = divmod(SparCooldown - (int(time()) - tooRecent), 3600)
884+
too_recent = value
885+
if role and too_recent:
886+
hours, seconds = divmod(
887+
SparCooldown - (int(time()) - too_recent), 3600,
888+
)
886889
minutes, seconds = divmod(seconds, 60)
887890
report = brawl.ping_msg(author, hours, minutes, seconds)
888891
await ctx.send(report)
889-
if additional and role and not tooRecent:
892+
if additional and role and not too_recent:
890893
await ctx.send(f"Additional info: \"{additional}\"".replace("@", ""))
891894
return 1
892895

@@ -908,17 +911,19 @@ async def cmd_brawl(ctx: misc.BotContext) -> int:
908911
async def cmd_brawlclaim(ctx: misc.BotContext, url_or_id: str = "None") -> int:
909912
if misc.ctx_created_thread(ctx) or not BrawlKey:
910913
return -1
911-
brawlId = (
914+
brawl_id = (
912915
int(url_or_id)
913916
if url_or_id.isnumeric()
914917
else await brawl.get_brawl_id(BrawlKey, url_or_id)
915918
)
916-
if brawlId is not None:
917-
brawl.claim_profile(ctx.author.id, brawlId)
919+
if brawl_id is not None:
920+
brawl.claim_profile(ctx.author.id, brawl_id)
918921
report = "Profile claimed."
919922
else:
920923
report = "Invalid profile URL/Brawlhalla ID! " + brawl.BadClaim
921-
await ctx.send(embed=misc.bb_embed("Beardless Bot Brawlhalla Rank", report))
924+
await ctx.send(embed=misc.bb_embed(
925+
"Beardless Bot Brawlhalla Rank", report,
926+
))
922927
return 1
923928

924929

@@ -928,34 +933,36 @@ async def cmd_brawlrank(ctx: misc.BotContext, *, target: str = "") -> int:
928933
return -1
929934
# TODO: write valid target method; no need for this copy paste
930935
# have it return target, report
931-
rankTarget: misc.TargetTypes | None = misc.get_target(ctx, target)
936+
rank_target: misc.TargetTypes | None = misc.get_target(ctx, target)
932937
report = "Invalid target!"
933-
if isinstance(rankTarget, str):
934-
rankTarget = misc.member_search(ctx.message, rankTarget)
935-
if rankTarget:
938+
if isinstance(rank_target, str):
939+
rank_target = misc.member_search(ctx.message, rank_target)
940+
if rank_target:
936941
try:
937-
emb = await brawl.get_rank(rankTarget, BrawlKey)
942+
emb = await brawl.get_rank(rank_target, BrawlKey)
938943
except RequestError as e:
939944
misc.log_exception(e, ctx)
940945
report = brawl.RequestLimit
941946
else:
942947
await ctx.send(embed=emb)
943948
return 1
944-
await ctx.send(embed=misc.bb_embed("Beardless Bot Brawlhalla Rank", report))
949+
await ctx.send(embed=misc.bb_embed(
950+
"Beardless Bot Brawlhalla Rank", report,
951+
))
945952
return 0
946953

947954

948955
@BeardlessBot.command(name="brawlstats") # type: ignore[arg-type]
949956
async def cmd_brawlstats(ctx: misc.BotContext, *, target: str = "") -> int:
950957
if misc.ctx_created_thread(ctx) or not ctx.guild or not BrawlKey:
951958
return -1
952-
statsTarget: misc.TargetTypes | None = misc.get_target(ctx, target)
959+
stats_target: misc.TargetTypes | None = misc.get_target(ctx, target)
953960
report = "Invalid target!"
954-
if isinstance(statsTarget, str):
955-
statsTarget = misc.member_search(ctx.message, statsTarget)
956-
if statsTarget:
961+
if isinstance(stats_target, str):
962+
stats_target = misc.member_search(ctx.message, stats_target)
963+
if stats_target:
957964
try:
958-
emb = await brawl.get_stats(statsTarget, BrawlKey)
965+
emb = await brawl.get_stats(stats_target, BrawlKey)
959966
except RequestError as e:
960967
misc.log_exception(e, ctx)
961968
report = brawl.RequestLimit
@@ -972,20 +979,22 @@ async def cmd_brawlstats(ctx: misc.BotContext, *, target: str = "") -> int:
972979
async def cmd_brawlclan(ctx: misc.BotContext, *, target: str = "") -> int:
973980
if misc.ctx_created_thread(ctx) or not ctx.guild or not BrawlKey:
974981
return -1
975-
clanTarget: misc.TargetTypes | None = misc.get_target(ctx, target)
982+
clan_target: misc.TargetTypes | None = misc.get_target(ctx, target)
976983
report = "Invalid target!"
977-
if isinstance(clanTarget, str):
978-
clanTarget = misc.member_search(ctx.message, clanTarget)
979-
if clanTarget:
984+
if isinstance(clan_target, str):
985+
clan_target = misc.member_search(ctx.message, clan_target)
986+
if clan_target:
980987
try:
981-
emb = await brawl.get_clan(clanTarget, BrawlKey)
988+
emb = await brawl.get_clan(clan_target, BrawlKey)
982989
except RequestError as e:
983990
misc.log_exception(e, ctx)
984991
report = brawl.RequestLimit
985992
else:
986993
await ctx.send(embed=emb)
987994
return 1
988-
await ctx.send(embed=misc.bb_embed("Beardless Bot Brawlhalla Clan", report))
995+
await ctx.send(embed=misc.bb_embed(
996+
"Beardless Bot Brawlhalla Clan", report,
997+
))
989998
return 0
990999

9911000

0 commit comments

Comments
 (0)