Finalize NAFF 2.0 migration
This commit is contained in:
parent
b4fd6b1f5b
commit
db640578df
11 changed files with 97 additions and 100 deletions
|
@ -81,8 +81,10 @@ async def run() -> None:
|
||||||
)
|
)
|
||||||
|
|
||||||
# External modules
|
# External modules
|
||||||
if jconfig.log_level == "DEBUG":
|
if jconfig.jurigged:
|
||||||
logging.addLevelName(11, "\033[35mJURIG\033[0m ")
|
logging.addLevelName(11, "\033[35mJURIG\033[0m ")
|
||||||
|
if jconfig.log_level == "INFO":
|
||||||
|
logger.setLevel(11)
|
||||||
jurigged.watch(pattern="jarvis/*.py", logger=partial(jlogger, logger))
|
jurigged.watch(pattern="jarvis/*.py", logger=partial(jlogger, logger))
|
||||||
|
|
||||||
# Initialize bot
|
# Initialize bot
|
||||||
|
|
|
@ -10,17 +10,17 @@ from jarvis.utils import build_embed
|
||||||
|
|
||||||
|
|
||||||
class ComponentEventMixin:
|
class ComponentEventMixin:
|
||||||
async def _handle_modcase_button(self, event: ButtonPressed) -> None:
|
async def _handle_modcase_button(self, event: ButtonPressed) -> bool:
|
||||||
context = event.context
|
context = event.ctx
|
||||||
|
|
||||||
if not context.custom_id.startswith("modcase|"):
|
if not context.custom_id.startswith("modcase|"):
|
||||||
return # Failsafe
|
return False # Failsafe
|
||||||
|
|
||||||
if not context.deferred and not context.responded:
|
if not context.deferred and not context.responded:
|
||||||
await context.defer(ephemeral=True)
|
await context.defer(ephemeral=True)
|
||||||
|
|
||||||
if not context.author.has_permission(Permissions.MODERATE_MEMBERS):
|
if not context.author.has_permission(Permissions.MODERATE_MEMBERS):
|
||||||
return
|
return False
|
||||||
|
|
||||||
user_key = f"msg|{context.message.id}"
|
user_key = f"msg|{context.message.id}"
|
||||||
action_key = ""
|
action_key = ""
|
||||||
|
@ -79,11 +79,13 @@ class ComponentEventMixin:
|
||||||
await self.redis.delete(user_key)
|
await self.redis.delete(user_key)
|
||||||
await self.redis.delete(action_key)
|
await self.redis.delete(action_key)
|
||||||
|
|
||||||
async def _handle_delete_button(self, event: ButtonPressed) -> None:
|
return True
|
||||||
context = event.context
|
|
||||||
|
async def _handle_delete_button(self, event: ButtonPressed) -> bool:
|
||||||
|
context = event.ctx
|
||||||
|
|
||||||
if not context.custom_id.startswith("delete|"):
|
if not context.custom_id.startswith("delete|"):
|
||||||
return # Failsafe
|
return False # Failsafe
|
||||||
|
|
||||||
if not context.deferred and not context.responded:
|
if not context.deferred and not context.responded:
|
||||||
await context.defer(ephemeral=True)
|
await context.defer(ephemeral=True)
|
||||||
|
@ -96,19 +98,20 @@ class ComponentEventMixin:
|
||||||
and not str(context.author.id) == uid
|
and not str(context.author.id) == uid
|
||||||
):
|
):
|
||||||
await context.send("I'm afraid I can't let you do that", ephemeral=True)
|
await context.send("I'm afraid I can't let you do that", ephemeral=True)
|
||||||
return # User does not have perms to delete
|
return True # User does not have perms to delete
|
||||||
|
|
||||||
if star := await Star.find_one(q(star=context.message.id, guild=context.guild.id)):
|
if star := await Star.find_one(q(star=context.message.id, guild=context.guild.id)):
|
||||||
await star.delete()
|
await star.delete()
|
||||||
|
|
||||||
await context.message.delete()
|
await context.message.delete()
|
||||||
await context.send("Message deleted", ephemeral=True)
|
await context.send("Message deleted", ephemeral=True)
|
||||||
|
return True
|
||||||
|
|
||||||
async def _handle_copy_button(self, event: ButtonPressed) -> None:
|
async def _handle_copy_button(self, event: ButtonPressed) -> bool:
|
||||||
context = event.context
|
context = event.ctx
|
||||||
|
|
||||||
if not context.custom_id.startswith("copy|"):
|
if not context.custom_id.startswith("copy|"):
|
||||||
return
|
return False
|
||||||
|
|
||||||
if not context.deferred and not context.responded:
|
if not context.deferred and not context.responded:
|
||||||
await context.defer(ephemeral=True)
|
await context.defer(ephemeral=True)
|
||||||
|
@ -130,10 +133,12 @@ class ComponentEventMixin:
|
||||||
|
|
||||||
await context.send("Reminder copied!", ephemeral=True)
|
await context.send("Reminder copied!", ephemeral=True)
|
||||||
|
|
||||||
async def _handle_phishlist_button(self, event: ButtonPressed) -> None:
|
return True
|
||||||
context = event.context
|
|
||||||
|
async def _handle_phishlist_button(self, event: ButtonPressed) -> bool:
|
||||||
|
context = event.ctx
|
||||||
if not context.custom_id.startswith("pl|"):
|
if not context.custom_id.startswith("pl|"):
|
||||||
return
|
return False
|
||||||
|
|
||||||
if not context.deferred and not context.responded:
|
if not context.deferred and not context.responded:
|
||||||
await context.defer(ephemeral=True)
|
await context.defer(ephemeral=True)
|
||||||
|
@ -143,7 +148,7 @@ class ComponentEventMixin:
|
||||||
pl = await Phishlist.find_one(q(_id=id_))
|
pl = await Phishlist.find_one(q(_id=id_))
|
||||||
if not pl:
|
if not pl:
|
||||||
self.logger.warn(f"Phishlist {id_} does not exist!")
|
self.logger.warn(f"Phishlist {id_} does not exist!")
|
||||||
return
|
return False
|
||||||
|
|
||||||
pl.valid = valid
|
pl.valid = valid
|
||||||
pl.confirmed = True
|
pl.confirmed = True
|
||||||
|
@ -159,11 +164,16 @@ class ComponentEventMixin:
|
||||||
|
|
||||||
await context.message.edit(components=context.message.components, embeds=embed)
|
await context.message.edit(components=context.message.components, embeds=embed)
|
||||||
await context.send("Confirmed! Thank you for confirming this URL.")
|
await context.send("Confirmed! Thank you for confirming this URL.")
|
||||||
|
return True
|
||||||
|
|
||||||
@listen()
|
@listen()
|
||||||
async def on_button(self, event: ButtonPressed) -> None:
|
async def on_button(self, event: ButtonPressed) -> None:
|
||||||
"""Process button events."""
|
"""Process button events."""
|
||||||
await self._handle_modcase_button(event)
|
modcase = await self._handle_modcase_button(event)
|
||||||
await self._handle_delete_button(event)
|
delete = await self._handle_delete_button(event)
|
||||||
await self._handle_copy_button(event)
|
copy = await self._handle_copy_button(event)
|
||||||
await self._handle_phishlist_button(event)
|
phishlist = await self._handle_phishlist_button(event)
|
||||||
|
|
||||||
|
if not any([modcase, delete, copy, phishlist]):
|
||||||
|
# self.logger.warn(f"Unhandled ButtonPressed event: {event.ctx.custom_id}")
|
||||||
|
pass
|
||||||
|
|
|
@ -30,4 +30,4 @@ class TaskMixin:
|
||||||
if domain in self.phishing_domains:
|
if domain in self.phishing_domains:
|
||||||
sub -= 1
|
sub -= 1
|
||||||
self.phishing_domains.remove(domain)
|
self.phishing_domains.remove(domain)
|
||||||
self.logger.debug(f"{add} additions, {sub} removals")
|
self.logger.info(f"{add} additions, {sub} removals")
|
||||||
|
|
|
@ -33,6 +33,7 @@ CURRENCIES = (
|
||||||
"CNY",
|
"CNY",
|
||||||
"CZK",
|
"CZK",
|
||||||
"DKK",
|
"DKK",
|
||||||
|
"EUR",
|
||||||
"GBP",
|
"GBP",
|
||||||
"HKD",
|
"HKD",
|
||||||
"HRK",
|
"HRK",
|
||||||
|
@ -167,6 +168,7 @@ class CalcCog(Extension):
|
||||||
conv = value * rate
|
conv = value * rate
|
||||||
|
|
||||||
fields = (
|
fields = (
|
||||||
|
EmbedField(name="Conversion Rate", value=f"1 {from_currency} ~= {rate:0.4f} {to_currency}"),
|
||||||
EmbedField(name=from_currency, value=f"{value:0.2f}"),
|
EmbedField(name=from_currency, value=f"{value:0.2f}"),
|
||||||
EmbedField(name=to_currency, value=f"{conv:0.2f}"),
|
EmbedField(name=to_currency, value=f"{conv:0.2f}"),
|
||||||
)
|
)
|
||||||
|
|
|
@ -223,11 +223,11 @@ class RedditCog(Extension):
|
||||||
|
|
||||||
try:
|
try:
|
||||||
context = await self.bot.wait_for_component(
|
context = await self.bot.wait_for_component(
|
||||||
check=lambda x: ctx.author.id == x.context.author.id,
|
check=lambda x: ctx.author.id == x.ctx.author.id,
|
||||||
messages=message,
|
messages=message,
|
||||||
timeout=60 * 5,
|
timeout=60 * 5,
|
||||||
)
|
)
|
||||||
for to_delete in context.context.values:
|
for to_delete in context.ctx.values:
|
||||||
follow = get(redditors, guild=ctx.guild.id, name=names[int(to_delete)])
|
follow = get(redditors, guild=ctx.guild.id, name=names[int(to_delete)])
|
||||||
try:
|
try:
|
||||||
await follow.delete()
|
await follow.delete()
|
||||||
|
@ -237,8 +237,8 @@ class RedditCog(Extension):
|
||||||
for component in row.components:
|
for component in row.components:
|
||||||
component.disabled = True
|
component.disabled = True
|
||||||
|
|
||||||
block = "\n".join(names[int(x)] for x in context.context.values)
|
block = "\n".join(names[int(x)] for x in context.ctx.values)
|
||||||
await context.context.edit_origin(
|
await context.ctx.edit_origin(
|
||||||
content=f"Unfollowed the following:\n```\n{block}\n```", components=components
|
content=f"Unfollowed the following:\n```\n{block}\n```", components=components
|
||||||
)
|
)
|
||||||
except asyncio.TimeoutError:
|
except asyncio.TimeoutError:
|
||||||
|
@ -342,11 +342,11 @@ class RedditCog(Extension):
|
||||||
|
|
||||||
try:
|
try:
|
||||||
context = await self.bot.wait_for_component(
|
context = await self.bot.wait_for_component(
|
||||||
check=lambda x: ctx.author.id == x.context.author.id,
|
check=lambda x: ctx.author.id == x.ctx.author.id,
|
||||||
messages=message,
|
messages=message,
|
||||||
timeout=60 * 5,
|
timeout=60 * 5,
|
||||||
)
|
)
|
||||||
for to_delete in context.context.values:
|
for to_delete in context.ctx.values:
|
||||||
follow = get(subreddits, guild=ctx.guild.id, display_name=names[int(to_delete)])
|
follow = get(subreddits, guild=ctx.guild.id, display_name=names[int(to_delete)])
|
||||||
try:
|
try:
|
||||||
await follow.delete()
|
await follow.delete()
|
||||||
|
@ -356,8 +356,8 @@ class RedditCog(Extension):
|
||||||
for component in row.components:
|
for component in row.components:
|
||||||
component.disabled = True
|
component.disabled = True
|
||||||
|
|
||||||
block = "\n".join(names[int(x)] for x in context.context.values)
|
block = "\n".join(names[int(x)] for x in context.ctx.values)
|
||||||
await context.context.edit_origin(
|
await context.ctx.edit_origin(
|
||||||
content=f"Unfollowed the following:\n```\n{block}\n```", components=components
|
content=f"Unfollowed the following:\n```\n{block}\n```", components=components
|
||||||
)
|
)
|
||||||
except asyncio.TimeoutError:
|
except asyncio.TimeoutError:
|
||||||
|
|
|
@ -241,13 +241,13 @@ class RolegiverCog(Extension):
|
||||||
|
|
||||||
try:
|
try:
|
||||||
context = await self.bot.wait_for_component(
|
context = await self.bot.wait_for_component(
|
||||||
check=lambda x: ctx.author.id == x.context.author.id,
|
check=lambda x: ctx.author.id == x.ctx.author.id,
|
||||||
messages=message,
|
messages=message,
|
||||||
timeout=60 * 5,
|
timeout=60 * 5,
|
||||||
)
|
)
|
||||||
|
|
||||||
added_roles = []
|
added_roles = []
|
||||||
for role in context.context.values:
|
for role in context.ctx.values:
|
||||||
role = await ctx.guild.fetch_role(int(role))
|
role = await ctx.guild.fetch_role(int(role))
|
||||||
added_roles.append(role)
|
added_roles.append(role)
|
||||||
await ctx.author.add_role(role, reason="Rolegiver")
|
await ctx.author.add_role(role, reason="Rolegiver")
|
||||||
|
@ -282,7 +282,7 @@ class RolegiverCog(Extension):
|
||||||
for component in row.components:
|
for component in row.components:
|
||||||
component.disabled = True
|
component.disabled = True
|
||||||
|
|
||||||
await context.context.edit_origin(embeds=embed, content="\u200b", components=components)
|
await context.ctx.edit_origin(embeds=embed, content="\u200b", components=components)
|
||||||
except asyncio.TimeoutError:
|
except asyncio.TimeoutError:
|
||||||
for row in components:
|
for row in components:
|
||||||
for component in row.components:
|
for component in row.components:
|
||||||
|
@ -321,13 +321,13 @@ class RolegiverCog(Extension):
|
||||||
|
|
||||||
try:
|
try:
|
||||||
context = await self.bot.wait_for_component(
|
context = await self.bot.wait_for_component(
|
||||||
check=lambda x: ctx.author.id == x.context.author.id,
|
check=lambda x: ctx.author.id == x.ctx.author.id,
|
||||||
messages=message,
|
messages=message,
|
||||||
timeout=60 * 5,
|
timeout=60 * 5,
|
||||||
)
|
)
|
||||||
|
|
||||||
removed_roles = []
|
removed_roles = []
|
||||||
for to_remove in context.context.values:
|
for to_remove in context.ctx.values:
|
||||||
role = get(user_roles, id=int(to_remove))
|
role = get(user_roles, id=int(to_remove))
|
||||||
await ctx.author.remove_role(role, reason="Rolegiver")
|
await ctx.author.remove_role(role, reason="Rolegiver")
|
||||||
user_roles.remove(role)
|
user_roles.remove(role)
|
||||||
|
@ -358,7 +358,7 @@ class RolegiverCog(Extension):
|
||||||
for component in row.components:
|
for component in row.components:
|
||||||
component.disabled = True
|
component.disabled = True
|
||||||
|
|
||||||
await context.context.edit_origin(embeds=embed, components=components, content="\u200b")
|
await context.ctx.edit_origin(embeds=embed, components=components, content="\u200b")
|
||||||
|
|
||||||
except asyncio.TimeoutError:
|
except asyncio.TimeoutError:
|
||||||
for row in components:
|
for row in components:
|
||||||
|
|
|
@ -55,9 +55,7 @@ class SettingsCog(Extension):
|
||||||
sub_cmd_name="modlog",
|
sub_cmd_name="modlog",
|
||||||
sub_cmd_description="Set Moglod channel",
|
sub_cmd_description="Set Moglod channel",
|
||||||
)
|
)
|
||||||
@slash_option(
|
@slash_option(name="channel", description="ModLog Channel", opt_type=OptionTypes.CHANNEL, required=True)
|
||||||
name="channel", description="ModLog Channel", opt_type=OptionTypes.CHANNEL, required=True
|
|
||||||
)
|
|
||||||
@check(admin_or_permissions(Permissions.MANAGE_GUILD))
|
@check(admin_or_permissions(Permissions.MANAGE_GUILD))
|
||||||
async def _set_modlog(self, ctx: InteractionContext, channel: GuildText) -> None:
|
async def _set_modlog(self, ctx: InteractionContext, channel: GuildText) -> None:
|
||||||
if not isinstance(channel, GuildText):
|
if not isinstance(channel, GuildText):
|
||||||
|
@ -98,9 +96,7 @@ class SettingsCog(Extension):
|
||||||
await ctx.send(f"Settings applied. New massmention limit is {amount}")
|
await ctx.send(f"Settings applied. New massmention limit is {amount}")
|
||||||
|
|
||||||
@set_.subcommand(sub_cmd_name="verified", sub_cmd_description="Set verified role")
|
@set_.subcommand(sub_cmd_name="verified", sub_cmd_description="Set verified role")
|
||||||
@slash_option(
|
@slash_option(name="role", description="Verified role", opt_type=OptionTypes.ROLE, required=True)
|
||||||
name="role", description="Verified role", opt_type=OptionTypes.ROLE, required=True
|
|
||||||
)
|
|
||||||
@check(admin_or_permissions(Permissions.MANAGE_GUILD))
|
@check(admin_or_permissions(Permissions.MANAGE_GUILD))
|
||||||
async def _set_verified(self, ctx: InteractionContext, role: Role) -> None:
|
async def _set_verified(self, ctx: InteractionContext, role: Role) -> None:
|
||||||
if role.id == ctx.guild.id:
|
if role.id == ctx.guild.id:
|
||||||
|
@ -117,9 +113,7 @@ class SettingsCog(Extension):
|
||||||
await ctx.send(f"Settings applied. New verified role is `{role.name}`")
|
await ctx.send(f"Settings applied. New verified role is `{role.name}`")
|
||||||
|
|
||||||
@set_.subcommand(sub_cmd_name="unverified", sub_cmd_description="Set unverified role")
|
@set_.subcommand(sub_cmd_name="unverified", sub_cmd_description="Set unverified role")
|
||||||
@slash_option(
|
@slash_option(name="role", description="Unverified role", opt_type=OptionTypes.ROLE, required=True)
|
||||||
name="role", description="Unverified role", opt_type=OptionTypes.ROLE, required=True
|
|
||||||
)
|
|
||||||
@check(admin_or_permissions(Permissions.MANAGE_GUILD))
|
@check(admin_or_permissions(Permissions.MANAGE_GUILD))
|
||||||
async def _set_unverified(self, ctx: InteractionContext, role: Role) -> None:
|
async def _set_unverified(self, ctx: InteractionContext, role: Role) -> None:
|
||||||
if role.id == ctx.guild.id:
|
if role.id == ctx.guild.id:
|
||||||
|
@ -135,9 +129,7 @@ class SettingsCog(Extension):
|
||||||
await self.update_settings("unverified", role.id, ctx.guild.id)
|
await self.update_settings("unverified", role.id, ctx.guild.id)
|
||||||
await ctx.send(f"Settings applied. New unverified role is `{role.name}`")
|
await ctx.send(f"Settings applied. New unverified role is `{role.name}`")
|
||||||
|
|
||||||
@set_.subcommand(
|
@set_.subcommand(sub_cmd_name="noinvite", sub_cmd_description="Set if invite deletion should happen")
|
||||||
sub_cmd_name="noinvite", sub_cmd_description="Set if invite deletion should happen"
|
|
||||||
)
|
|
||||||
@slash_option(name="active", description="Active?", opt_type=OptionTypes.BOOLEAN, required=True)
|
@slash_option(name="active", description="Active?", opt_type=OptionTypes.BOOLEAN, required=True)
|
||||||
@check(admin_or_permissions(Permissions.MANAGE_GUILD))
|
@check(admin_or_permissions(Permissions.MANAGE_GUILD))
|
||||||
async def _set_invitedel(self, ctx: InteractionContext, active: bool) -> None:
|
async def _set_invitedel(self, ctx: InteractionContext, active: bool) -> None:
|
||||||
|
@ -153,12 +145,8 @@ class SettingsCog(Extension):
|
||||||
await self.update_settings("notify", active, ctx.guild.id)
|
await self.update_settings("notify", active, ctx.guild.id)
|
||||||
await ctx.send(f"Settings applied. Notifications active: {active}")
|
await ctx.send(f"Settings applied. Notifications active: {active}")
|
||||||
|
|
||||||
@set_.subcommand(
|
@set_.subcommand(sub_cmd_name="log_ignore", sub_cmd_description="Ignore a channel for ActivityLog")
|
||||||
sub_cmd_name="log_ignore", sub_cmd_description="Ignore a channel for ActivityLog"
|
@slash_option(name="channel", description="Channel to ignore", opt_type=OptionTypes.CHANNEL, required=True)
|
||||||
)
|
|
||||||
@slash_option(
|
|
||||||
name="channel", description="Channel to ignore", opt_type=OptionTypes.CHANNEL, required=True
|
|
||||||
)
|
|
||||||
@check(admin_or_permissions(Permissions.MANAGE_GUILD))
|
@check(admin_or_permissions(Permissions.MANAGE_GUILD))
|
||||||
async def _add_log_ignore(self, ctx: InteractionContext, channel: GuildText) -> None:
|
async def _add_log_ignore(self, ctx: InteractionContext, channel: GuildText) -> None:
|
||||||
if not isinstance(channel, GuildText):
|
if not isinstance(channel, GuildText):
|
||||||
|
@ -218,9 +206,7 @@ class SettingsCog(Extension):
|
||||||
await self.delete_settings("unverified", ctx.guild.id)
|
await self.delete_settings("unverified", ctx.guild.id)
|
||||||
await ctx.send("Setting `unverified` unset")
|
await ctx.send("Setting `unverified` unset")
|
||||||
|
|
||||||
@unset.subcommand(
|
@unset.subcommand(sub_cmd_name="noinvite", sub_cmd_description="Unset if invite deletion should happen")
|
||||||
sub_cmd_name="noinvite", sub_cmd_description="Unset if invite deletion should happen"
|
|
||||||
)
|
|
||||||
@check(admin_or_permissions(Permissions.MANAGE_GUILD))
|
@check(admin_or_permissions(Permissions.MANAGE_GUILD))
|
||||||
async def _unset_invitedel(self, ctx: InteractionContext, active: bool) -> None:
|
async def _unset_invitedel(self, ctx: InteractionContext, active: bool) -> None:
|
||||||
await ctx.defer()
|
await ctx.defer()
|
||||||
|
@ -234,9 +220,7 @@ class SettingsCog(Extension):
|
||||||
await self.delete_settings("notify", ctx.guild.id)
|
await self.delete_settings("notify", ctx.guild.id)
|
||||||
await ctx.send("Setting `notify` unset")
|
await ctx.send("Setting `notify` unset")
|
||||||
|
|
||||||
@unset.subcommand(
|
@unset.subcommand(sub_cmd_name="log_ignore", sub_cmd_description="Add a channel for ActivityLog")
|
||||||
sub_cmd_name="log_ignore", sub_cmd_description="Add a channel for ActivityLog"
|
|
||||||
)
|
|
||||||
@slash_option(
|
@slash_option(
|
||||||
name="channel",
|
name="channel",
|
||||||
description="Channel to stop ignoring",
|
description="Channel to stop ignoring",
|
||||||
|
@ -282,21 +266,15 @@ class SettingsCog(Extension):
|
||||||
if value:
|
if value:
|
||||||
value = value.mention
|
value = value.mention
|
||||||
else:
|
else:
|
||||||
value = "||`[redacted]`||"
|
await setting.delete()
|
||||||
|
continue
|
||||||
elif setting.setting in ["activitylog", "modlog"]:
|
elif setting.setting in ["activitylog", "modlog"]:
|
||||||
value = await ctx.guild.fetch_channel(value)
|
value = await ctx.guild.fetch_channel(value)
|
||||||
if value:
|
if value:
|
||||||
value = value.mention
|
value = value.mention
|
||||||
else:
|
else:
|
||||||
value = "||`[redacted]`||"
|
await setting.delete()
|
||||||
elif setting.setting == "rolegiver":
|
continue
|
||||||
value = ""
|
|
||||||
for _role in setting.value:
|
|
||||||
nvalue = await ctx.guild.fetch_role(_role)
|
|
||||||
if nvalue:
|
|
||||||
value += "\n" + nvalue.mention
|
|
||||||
else:
|
|
||||||
value += "\n||`[redacted]`||"
|
|
||||||
elif setting.setting == "log_ignore":
|
elif setting.setting == "log_ignore":
|
||||||
names = []
|
names = []
|
||||||
for v in setting.value:
|
for v in setting.value:
|
||||||
|
@ -315,19 +293,18 @@ class SettingsCog(Extension):
|
||||||
async def _clear(self, ctx: InteractionContext) -> None:
|
async def _clear(self, ctx: InteractionContext) -> None:
|
||||||
components = [
|
components = [
|
||||||
ActionRow(
|
ActionRow(
|
||||||
Button(style=ButtonStyles.RED, emoji="✖️", custom_id="no"),
|
Button(style=ButtonStyles.RED, emoji="✖️", custom_id=f"{ctx.guild.id}|set_clear|no"),
|
||||||
Button(style=ButtonStyles.GREEN, emoji="✔️", custom_id="yes"),
|
Button(style=ButtonStyles.GREEN, emoji="✔️", custom_id=f"{ctx.guild.id}|set_clear|yes"),
|
||||||
)
|
)
|
||||||
]
|
]
|
||||||
message = await ctx.send("***Are you sure?***", components=components)
|
message = await ctx.send("***Are you sure?***", components=components)
|
||||||
try:
|
try:
|
||||||
context = await self.bot.wait_for_component(
|
context = await self.bot.wait_for_component(
|
||||||
check=lambda x: ctx.author.id == x.context.author.id,
|
check=lambda x: ctx.author.id == x.ctx.author.id,
|
||||||
messages=message,
|
messages=message,
|
||||||
timeout=60 * 5,
|
timeout=60 * 5,
|
||||||
)
|
)
|
||||||
content = "***Are you sure?***"
|
if context.ctx.custom_id == f"{ctx.guild.id}|set_clear|yes":
|
||||||
if context.context.custom_id == "yes":
|
|
||||||
async for setting in Setting.find(q(guild=ctx.guild.id)):
|
async for setting in Setting.find(q(guild=ctx.guild.id)):
|
||||||
await setting.delete()
|
await setting.delete()
|
||||||
content = "Guild settings cleared"
|
content = "Guild settings cleared"
|
||||||
|
@ -336,7 +313,7 @@ class SettingsCog(Extension):
|
||||||
for row in components:
|
for row in components:
|
||||||
for component in row.components:
|
for component in row.components:
|
||||||
component.disabled = True
|
component.disabled = True
|
||||||
await context.context.edit_origin(content=content, components=components)
|
await context.ctx.edit_origin(content=content, components=components)
|
||||||
except asyncio.TimeoutError:
|
except asyncio.TimeoutError:
|
||||||
for row in components:
|
for row in components:
|
||||||
for component in row.components:
|
for component in row.components:
|
||||||
|
|
|
@ -136,11 +136,11 @@ class TwitterCog(Extension):
|
||||||
|
|
||||||
try:
|
try:
|
||||||
context = await self.bot.wait_for_component(
|
context = await self.bot.wait_for_component(
|
||||||
check=lambda x: ctx.author.id == x.context.author.id,
|
check=lambda x: ctx.author.id == x.ctx.author.id,
|
||||||
messages=message,
|
messages=message,
|
||||||
timeout=60 * 5,
|
timeout=60 * 5,
|
||||||
)
|
)
|
||||||
for to_delete in context.context.values:
|
for to_delete in context.ctx.values:
|
||||||
follow = get(twitters, guild=ctx.guild.id, twitter_id=int(to_delete))
|
follow = get(twitters, guild=ctx.guild.id, twitter_id=int(to_delete))
|
||||||
try:
|
try:
|
||||||
await follow.delete()
|
await follow.delete()
|
||||||
|
@ -150,8 +150,8 @@ class TwitterCog(Extension):
|
||||||
for component in row.components:
|
for component in row.components:
|
||||||
component.disabled = True
|
component.disabled = True
|
||||||
|
|
||||||
block = "\n".join(handlemap[x] for x in context.context.values)
|
block = "\n".join(handlemap[x] for x in context.ctx.values)
|
||||||
await context.context.edit_origin(
|
await context.ctx.edit_origin(
|
||||||
content=f"Unfollowed the following:\n```\n{block}\n```", components=components
|
content=f"Unfollowed the following:\n```\n{block}\n```", components=components
|
||||||
)
|
)
|
||||||
except asyncio.TimeoutError:
|
except asyncio.TimeoutError:
|
||||||
|
@ -200,13 +200,13 @@ class TwitterCog(Extension):
|
||||||
|
|
||||||
try:
|
try:
|
||||||
context = await self.bot.wait_for_component(
|
context = await self.bot.wait_for_component(
|
||||||
check=lambda x: ctx.author.id == x.author.id,
|
check=lambda x: ctx.author.id == x.ctx.author.id,
|
||||||
messages=message,
|
messages=message,
|
||||||
timeout=60 * 5,
|
timeout=60 * 5,
|
||||||
)
|
)
|
||||||
|
|
||||||
handlemap = {}
|
handlemap = {}
|
||||||
for to_update in context.context.values:
|
for to_update in context.ctx.values:
|
||||||
account = await TwitterAccount.find_one(q(twitter_id=int(to_update)))
|
account = await TwitterAccount.find_one(q(twitter_id=int(to_update)))
|
||||||
handlemap[str(twitter.twitter_id)] = account.handle
|
handlemap[str(twitter.twitter_id)] = account.handle
|
||||||
t = get(twitters, guild=ctx.guild.id, twitter_id=int(to_update))
|
t = get(twitters, guild=ctx.guild.id, twitter_id=int(to_update))
|
||||||
|
@ -217,8 +217,8 @@ class TwitterCog(Extension):
|
||||||
for component in row.components:
|
for component in row.components:
|
||||||
component.disabled = True
|
component.disabled = True
|
||||||
|
|
||||||
block = "\n".join(handlemap[x] for x in context.context.values)
|
block = "\n".join(handlemap[x] for x in context.ctx.values)
|
||||||
await context.context.edit_origin(
|
await context.ctx.edit_origin(
|
||||||
content=(
|
content=(
|
||||||
f"{'Unfollowed' if not retweets else 'Followed'} "
|
f"{'Unfollowed' if not retweets else 'Followed'} "
|
||||||
"retweets from the following:"
|
"retweets from the following:"
|
||||||
|
|
|
@ -17,6 +17,7 @@ class JarvisConfig(Config):
|
||||||
"twitter": None,
|
"twitter": None,
|
||||||
"reddit": None,
|
"reddit": None,
|
||||||
"rook_token": None,
|
"rook_token": None,
|
||||||
|
"jurigged": False,
|
||||||
}
|
}
|
||||||
ENV_REQUIRED = [
|
ENV_REQUIRED = [
|
||||||
"TOKEN",
|
"TOKEN",
|
||||||
|
@ -42,6 +43,7 @@ class JarvisConfig(Config):
|
||||||
"TWITTER_ACCESS_TOKEN": None,
|
"TWITTER_ACCESS_TOKEN": None,
|
||||||
"TWITTER_ACCESS_SECRET": None,
|
"TWITTER_ACCESS_SECRET": None,
|
||||||
"URLS_DBRAND_SHIPPING": None,
|
"URLS_DBRAND_SHIPPING": None,
|
||||||
|
"JURIGGED": False,
|
||||||
}
|
}
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
|
|
24
poetry.lock
generated
24
poetry.lock
generated
|
@ -1475,19 +1475,19 @@ tests = ["check-manifest", "coverage", "defusedxml", "markdown2", "olefile", "pa
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "platformdirs"
|
name = "platformdirs"
|
||||||
version = "2.6.0"
|
version = "2.6.2"
|
||||||
description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"."
|
description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"."
|
||||||
category = "dev"
|
category = "dev"
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.7"
|
python-versions = ">=3.7"
|
||||||
files = [
|
files = [
|
||||||
{file = "platformdirs-2.6.0-py3-none-any.whl", hash = "sha256:1a89a12377800c81983db6be069ec068eee989748799b946cce2a6e80dcc54ca"},
|
{file = "platformdirs-2.6.2-py3-none-any.whl", hash = "sha256:83c8f6d04389165de7c9b6f0c682439697887bca0aa2f1c87ef1826be3584490"},
|
||||||
{file = "platformdirs-2.6.0.tar.gz", hash = "sha256:b46ffafa316e6b83b47489d240ce17173f123a9b9c83282141c3daf26ad9ac2e"},
|
{file = "platformdirs-2.6.2.tar.gz", hash = "sha256:e1fea1fe471b9ff8332e229df3cb7de4f53eeea4998d3b6bfff542115e998bd2"},
|
||||||
]
|
]
|
||||||
|
|
||||||
[package.extras]
|
[package.extras]
|
||||||
docs = ["furo (>=2022.9.29)", "proselint (>=0.13)", "sphinx (>=5.3)", "sphinx-autodoc-typehints (>=1.19.4)"]
|
docs = ["furo (>=2022.12.7)", "proselint (>=0.13)", "sphinx (>=5.3)", "sphinx-autodoc-typehints (>=1.19.5)"]
|
||||||
test = ["appdirs (==1.4.4)", "pytest (>=7.2)", "pytest-cov (>=4)", "pytest-mock (>=3.10)"]
|
test = ["appdirs (==1.4.4)", "covdefaults (>=2.2.2)", "pytest (>=7.2)", "pytest-cov (>=4)", "pytest-mock (>=3.10)"]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "pre-commit"
|
name = "pre-commit"
|
||||||
|
@ -2225,10 +2225,8 @@ description = "Fuzzy string matching in python"
|
||||||
category = "main"
|
category = "main"
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = "*"
|
python-versions = "*"
|
||||||
files = [
|
files = []
|
||||||
{file = "thefuzz-0.19.0-py2.py3-none-any.whl", hash = "sha256:4fcdde8e40f5ca5e8106bc7665181f9598a9c8b18b0a4d38c41a095ba6788972"},
|
develop = false
|
||||||
{file = "thefuzz-0.19.0.tar.gz", hash = "sha256:6f7126db2f2c8a54212b05e3a740e45f4291c497d75d20751728f635bb74aa3d"},
|
|
||||||
]
|
|
||||||
|
|
||||||
[package.dependencies]
|
[package.dependencies]
|
||||||
python-levenshtein = {version = ">=0.12", optional = true, markers = "extra == \"speedup\""}
|
python-levenshtein = {version = ">=0.12", optional = true, markers = "extra == \"speedup\""}
|
||||||
|
@ -2236,6 +2234,12 @@ python-levenshtein = {version = ">=0.12", optional = true, markers = "extra == \
|
||||||
[package.extras]
|
[package.extras]
|
||||||
speedup = ["python-levenshtein (>=0.12)"]
|
speedup = ["python-levenshtein (>=0.12)"]
|
||||||
|
|
||||||
|
[package.source]
|
||||||
|
type = "git"
|
||||||
|
url = "https://github.com/zevaryx/thefuzz.git"
|
||||||
|
reference = "master"
|
||||||
|
resolved_reference = "e4ab69d3d44cc3dd67221cba53e6a614786b0d7c"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "tomli"
|
name = "tomli"
|
||||||
version = "2.0.1"
|
version = "2.0.1"
|
||||||
|
@ -2686,4 +2690,4 @@ testing = ["flake8 (<5)", "func-timeout", "jaraco.functools", "jaraco.itertools"
|
||||||
[metadata]
|
[metadata]
|
||||||
lock-version = "2.0"
|
lock-version = "2.0"
|
||||||
python-versions = ">=3.10,<4"
|
python-versions = ">=3.10,<4"
|
||||||
content-hash = "9b727b6dcd39bfdbe5adbf2c1ab9a2846142f93c4214d72a30c81780c8e9c2b8"
|
content-hash = "89f766c3bacf47f7b955a812a695020dbae9c4f301816e94c943151af2696a19"
|
||||||
|
|
|
@ -14,21 +14,21 @@ psutil = "^5.9.0"
|
||||||
python-gitlab = "^3.1.1"
|
python-gitlab = "^3.1.1"
|
||||||
ulid-py = "^1.1.0"
|
ulid-py = "^1.1.0"
|
||||||
tweepy = "^4.5.0"
|
tweepy = "^4.5.0"
|
||||||
jarvis-core = {git = "https://git.zevaryx.com/stark-industries/jarvis/jarvis-core.git", rev = "main"}
|
jarvis-core = {git = "https://git.zevaryx.com/stark-industries/jarvis/jarvis-core.git", rev = "main"} # Mine
|
||||||
aiohttp = "^3.8.3"
|
aiohttp = "^3.8.3"
|
||||||
pastypy = "^1.0.3.post1"
|
pastypy = "^1.0.3.post1" # Mine
|
||||||
dateparser = "^1.1.1"
|
dateparser = "^1.1.1"
|
||||||
aiofile = "^3.8.1"
|
aiofile = "^3.8.1"
|
||||||
asyncpraw = "^7.5.0"
|
asyncpraw = "^7.5.0"
|
||||||
rich = "^12.3.0"
|
rich = "^12.3.0"
|
||||||
jurigged = "^0.5.3"
|
jurigged = "^0.5.3" # Contributed
|
||||||
naff = { version = "^2.0.0", extras = ["orjson"] }
|
naff = { version = "^2.0.0", extras = ["orjson"] } # Contributed
|
||||||
ansitoimg = "^2022.1"
|
ansitoimg = "^2022.1"
|
||||||
nest-asyncio = "^1.5.5"
|
nest-asyncio = "^1.5.5"
|
||||||
thefuzz = {extras = ["speedup"], git = "https://github.com/zevaryx/thefuzz.git", rev = "master"}
|
thefuzz = {extras = ["speedup"], git = "https://github.com/zevaryx/thefuzz.git", rev = "master"} # Forked
|
||||||
beautifulsoup4 = "^4.11.1"
|
beautifulsoup4 = "^4.11.1"
|
||||||
calculator = {git = "https://git.zevaryx.com/zevaryx/calculator.git"}
|
calculator = {git = "https://git.zevaryx.com/zevaryx/calculator.git"} # Mine
|
||||||
nafftrack = {git = "https://github.com/zevaryx/nafftrack.git"}
|
nafftrack = {git = "https://github.com/zevaryx/nafftrack.git"} # Contributed
|
||||||
redis = "^4.4.0"
|
redis = "^4.4.0"
|
||||||
|
|
||||||
[tool.poetry.dev-dependencies]
|
[tool.poetry.dev-dependencies]
|
||||||
|
|
Loading…
Add table
Reference in a new issue