More 3.4 compatibility, mentions and listeners

This commit is contained in:
bobloy 2020-08-18 10:01:10 -04:00
parent 3d4a6578fd
commit 151eca1c76
14 changed files with 70 additions and 37 deletions

View File

@ -229,7 +229,7 @@ class CCRole(commands.Cog):
cmd_list = "Custom commands:\n\n" + cmd_list cmd_list = "Custom commands:\n\n" + cmd_list
if ( if (
len(cmd_list) < 1500 len(cmd_list) < 1500
): # I'm allowed to have arbitrary numbers for when it's too much to dm dammit ): # I'm allowed to have arbitrary numbers for when it's too much to dm dammit
await ctx.send(box(cmd_list)) await ctx.send(box(cmd_list))
else: else:
@ -254,6 +254,9 @@ class CCRole(commands.Cog):
if len(message.content) < 2 or is_private or not user_allowed or message.author.bot: if len(message.content) < 2 or is_private or not user_allowed or message.author.bot:
return return
if await self.bot.cog_disabled_in_guild(self, message.guild):
return
ctx = await self.bot.get_context(message) ctx = await self.bot.get_context(message)
if ctx.prefix is None: if ctx.prefix is None:
@ -273,28 +276,6 @@ class CCRole(commands.Cog):
if cmd is not None: if cmd is not None:
await self.eval_cc(cmd, message, ctx) await self.eval_cc(cmd, message, ctx)
# @commands.Cog.listener()
# async def on_message(self, message: discord.Message):
# if len(message.content) < 2 or message.guild is None:
# return
#
# ctx: commands.Context = await self.bot.get_context(message)
# cmd = ctx.invoked_with
# guild = message.guild
# # try:
# # prefix = await self.get_prefix(message)
# # except ValueError:
# # return
#
# # prefix = ctx.prefix
#
# cmdlist = self.config.guild(guild).cmdlist
# # cmd = message.content[len(prefix) :].split()[0].lower()
# cmd = await cmdlist.get_raw(cmd, default=None)
#
# if cmd is not None:
# await self.eval_cc(cmd, message, ctx)
async def _get_roles_from_content(self, ctx, content): async def _get_roles_from_content(self, ctx, content):
content_list = content.split(",") content_list = content.split(",")
try: try:
@ -325,10 +306,10 @@ class CCRole(commands.Cog):
return p return p
raise ValueError raise ValueError
async def eval_cc(self, cmd, message, ctx): async def eval_cc(self, cmd, message: discord.Message, ctx: commands.Context):
"""Does all the work""" """Does all the work"""
if cmd["proles"] and not ( if cmd["proles"] and not (
set(role.id for role in message.author.roles) & set(cmd["proles"]) set(role.id for role in message.author.roles) & set(cmd["proles"])
): ):
return # Not authorized, do nothing return # Not authorized, do nothing
@ -400,7 +381,7 @@ class CCRole(commands.Cog):
await message.channel.send("Permission error: Unable to remove roles") await message.channel.send("Permission error: Unable to remove roles")
out_message = self.format_cc(cmd, message, target) out_message = self.format_cc(cmd, message, target)
await message.channel.send(out_message) await message.channel.send(out_message, allowed_mentions=discord.AllowedMentions())
def format_cc(self, cmd, message, target): def format_cc(self, cmd, message, target):
out = cmd["text"] out = cmd["text"]

View File

@ -427,6 +427,9 @@ class Chatter(Cog):
if len(message.content) < 2 or is_private or not user_allowed or message.author.bot: if len(message.content) < 2 or is_private or not user_allowed or message.author.bot:
return return
if await self.bot.cog_disabled_in_guild(self, message.guild):
return
ctx: commands.Context = await self.bot.get_context(message) ctx: commands.Context = await self.bot.get_context(message)
if ctx.prefix is not None: if ctx.prefix is not None:

View File

@ -89,6 +89,9 @@ class Dad(Cog):
if guild is None: if guild is None:
return return
if await self.bot.cog_disabled_in_guild(self, guild):
return
guild_config = self.config.guild(guild) guild_config = self.config.guild(guild)
is_on = await guild_config.enabled() is_on = await guild_config.enabled()
if not is_on: if not is_on:
@ -113,7 +116,8 @@ class Dad(Cog):
else: else:
out = cleaned_content[4:] out = cleaned_content[4:]
try: try:
await message.channel.send(f"Hi {out}, I'm {guild.me.display_name}!") await message.channel.send(f"Hi {out}, I'm {guild.me.display_name}!",
allowed_mentions=discord.AllowedMentions)
except discord.HTTPException: except discord.HTTPException:
return return

View File

@ -97,6 +97,9 @@ class ExclusiveRole(Cog):
if before.roles == after.roles: if before.roles == after.roles:
return return
if await self.bot.cog_disabled_in_guild(self, after.guild):
return
await asyncio.sleep(1) await asyncio.sleep(1)
role_set = set(await self.config.guild(after.guild).role_list()) role_set = set(await self.config.guild(after.guild).role_list())

View File

@ -1,5 +1,6 @@
import asyncio import asyncio
import discord
from discord.utils import get from discord.utils import get
from redbot.core import Config, checks, commands from redbot.core import Config, checks, commands
from redbot.core.bot import Red from redbot.core.bot import Red
@ -38,8 +39,18 @@ class ForceMention(Cog):
if not role_obj.mentionable: if not role_obj.mentionable:
await role_obj.edit(mentionable=True) await role_obj.edit(mentionable=True)
await ctx.send("{}\n{}".format(role_obj.mention, message)) await ctx.send(
"{}\n{}".format(role_obj.mention, message),
allowed_mentions=discord.AllowedMentions(
everyone=False, users=False, roles=[role_obj]
),
)
await asyncio.sleep(5) await asyncio.sleep(5)
await role_obj.edit(mentionable=False) await role_obj.edit(mentionable=False)
else: else:
await ctx.send("{}\n{}".format(role_obj.mention, message)) await ctx.send(
"{}\n{}".format(role_obj.mention, message),
allowed_mentions=discord.AllowedMentions(
everyone=False, users=False, roles=[role_obj]
),
)

View File

@ -2,7 +2,7 @@
"author": [ "author": [
"Bobloy" "Bobloy"
], ],
"min_bot_version": "3.3.0", "min_bot_version": "3.4.0",
"description": "Mentions roles that are unmentionable", "description": "Mentions roles that are unmentionable",
"hidden": false, "hidden": false,
"install_msg": "Thank you for installing ForceMention! Get started with `[p]load forcemention`, then `[p]forcemention`", "install_msg": "Thank you for installing ForceMention! Get started with `[p]load forcemention`, then `[p]forcemention`",

View File

@ -1,5 +1,6 @@
from collections import defaultdict from collections import defaultdict
from random import randint from random import randint
from typing import Union
import discord import discord
from redbot.core import Config, checks, commands from redbot.core import Config, checks, commands
@ -280,15 +281,22 @@ class Hangman(Cog):
await self._reprintgame(message) await self._reprintgame(message)
@commands.Cog.listener() @commands.Cog.listener()
async def on_react(self, reaction, user): async def on_react(self, reaction, user: Union[discord.User, discord.Member]):
""" Thanks to flapjack reactpoll for guidelines """ Thanks to flapjack reactpoll for guidelines
https://github.com/flapjax/FlapJack-Cogs/blob/master/reactpoll/reactpoll.py""" https://github.com/flapjax/FlapJack-Cogs/blob/master/reactpoll/reactpoll.py"""
guild: discord.Guild = getattr(user, "guild", None)
if reaction.message.id != self.the_data[user.guild]["trackmessage"]: if guild is None:
return
if reaction.message.id != self.the_data[guild]["trackmessage"]:
return
if user.bot:
return # Don't react to bot reactions
if await self.bot.cog_disabled_in_guild(self, guild):
return return
if user == self.bot.user:
return # Don't react to bot's own reactions
message = reaction.message message = reaction.message
emoji = reaction.emoji emoji = reaction.emoji

View File

@ -273,14 +273,20 @@ class InfoChannel(Cog):
@Cog.listener() @Cog.listener()
async def on_member_join(self, member: discord.Member): async def on_member_join(self, member: discord.Member):
if await self.bot.cog_disabled_in_guild(self, member.guild):
return
await self.update_infochannel_with_cooldown(member.guild) await self.update_infochannel_with_cooldown(member.guild)
@Cog.listener() @Cog.listener()
async def on_member_remove(self, member: discord.Member): async def on_member_remove(self, member: discord.Member):
if await self.bot.cog_disabled_in_guild(self, member.guild):
return
await self.update_infochannel_with_cooldown(member.guild) await self.update_infochannel_with_cooldown(member.guild)
@Cog.listener() @Cog.listener()
async def on_member_update(self, before: discord.Member, after: discord.Member): async def on_member_update(self, before: discord.Member, after: discord.Member):
if await self.bot.cog_disabled_in_guild(self, after.guild):
return
onlinecount = await self.config.guild(after.guild).online_count() onlinecount = await self.config.guild(after.guild).online_count()
if onlinecount: if onlinecount:
if before.status != after.status: if before.status != after.status:

View File

@ -38,6 +38,10 @@ class Leaver(Cog):
@commands.Cog.listener() @commands.Cog.listener()
async def on_member_remove(self, member: discord.Member): async def on_member_remove(self, member: discord.Member):
guild = member.guild guild = member.guild
if await self.bot.cog_disabled_in_guild(self, guild):
return
channel = await self.config.guild(guild).channel() channel = await self.config.guild(guild).channel()
if channel != "": if channel != "":

View File

@ -89,6 +89,8 @@ class LastSeen(Cog):
@commands.Cog.listener() @commands.Cog.listener()
async def on_member_update(self, before: discord.Member, after: discord.Member): async def on_member_update(self, before: discord.Member, after: discord.Member):
if before.status != self.offline_status and after.status == self.offline_status: if before.status != self.offline_status and after.status == self.offline_status:
if not await self.config.guild(before.guild).enabled(): if await self.bot.cog_disabled_in_guild(self, after.guild):
return
if not await self.config.guild(after.guild).enabled():
return return
await self.config.member(before).seen.set(datetime.utcnow().isoformat()) await self.config.member(before).seen.set(datetime.utcnow().isoformat())

View File

@ -96,6 +96,9 @@ class Nudity(commands.Cog):
# print("did not qualify") # print("did not qualify")
return return
if await self.bot.cog_disabled_in_guild(self, message.guild):
return
try: try:
is_on = await self.config.guild(message.guild).enabled() is_on = await self.config.guild(message.guild).enabled()
except AttributeError: except AttributeError:

View File

@ -281,6 +281,9 @@ class ReactRestrict(Cog):
if member.bot: if member.bot:
return return
if await self.bot.cog_disabled_in_guild(self, member.guild):
return
try: try:
roles = [self._get_role(member.guild, c.role_id) for c in combos] roles = [self._get_role(member.guild, c.role_id) for c in combos]
except LookupError: except LookupError:

View File

@ -181,6 +181,10 @@ class StealEmoji(Cog):
# print("Collecting is off") # print("Collecting is off")
return return
guild: discord.Guild = getattr(user, "guild", None)
if await self.bot.cog_disabled_in_guild(self, guild): # Handles None guild just fine
return
emoji: discord.Emoji = reaction.emoji emoji: discord.Emoji = reaction.emoji
if emoji in self.bot.emojis: if emoji in self.bot.emojis:
# print("Emoji already in bot.emojis") # print("Emoji already in bot.emojis")

View File

@ -3,12 +3,13 @@
"Bobloy" "Bobloy"
], ],
"min_bot_version": "3.3.0", "min_bot_version": "3.3.0",
"max_bot_version": "3.3.12",
"description": "Customizable Werewolf Game", "description": "Customizable Werewolf Game",
"hidden": true, "hidden": true,
"install_msg": "Thank you for installing Werewolf! Get started with `[p]load werewolf`\n Use `[p]wwset` to run inital setup", "install_msg": "Thank you for installing Werewolf! Get started with `[p]load werewolf`\n Use `[p]wwset` to run inital setup",
"requirements": [], "requirements": [],
"short": "Werewolf Game", "short": "Werewolf Game",
"end_user_data_statement": "This store user IDs in memory while they're actively using the cog, and store no persistent End User Data.", "end_user_data_statement": "This store user IDs in memory while they're actively using the cog, and stores no persistent End User Data.",
"tags": [ "tags": [
"mafia", "mafia",
"werewolf", "werewolf",