refactor(utils): split into separate files
This commit is contained in:
100
utils/discord.py
Normal file
100
utils/discord.py
Normal file
@@ -0,0 +1,100 @@
|
||||
import os
|
||||
import time
|
||||
from logging import error, info
|
||||
|
||||
import disnake
|
||||
|
||||
import commands
|
||||
from state import command_cooldowns, message_responses
|
||||
|
||||
|
||||
def cooldown(message, cooldown_time: int):
|
||||
possible_commands = commands.match(message.content)
|
||||
if not possible_commands or len(possible_commands) > 1:
|
||||
return
|
||||
command = possible_commands[0]
|
||||
|
||||
end_time = time.time() + cooldown_time
|
||||
if message.author.id in command_cooldowns:
|
||||
command_cooldowns[message.author.id][command] = end_time
|
||||
else:
|
||||
command_cooldowns[message.author.id] = {command: end_time}
|
||||
|
||||
|
||||
async def reply(message, *args, **kwargs):
|
||||
if message.id in message_responses:
|
||||
if len(args) == 0:
|
||||
kwargs["content"] = None
|
||||
elif len(kwargs) == 0:
|
||||
kwargs["embeds"] = []
|
||||
await message_responses[message.id].edit(
|
||||
*args, **kwargs, allowed_mentions=disnake.AllowedMentions.none()
|
||||
)
|
||||
else:
|
||||
response = await message.reply(
|
||||
*args, **kwargs, allowed_mentions=disnake.AllowedMentions.none()
|
||||
)
|
||||
message_responses[message.id] = response
|
||||
return message_responses[message.id]
|
||||
|
||||
|
||||
async def channel_send(message, *args, **kwargs):
|
||||
await message.channel.send(
|
||||
*args, **kwargs, allowed_mentions=disnake.AllowedMentions.none()
|
||||
)
|
||||
|
||||
|
||||
def load_opus():
|
||||
for path in filter(
|
||||
lambda p: os.path.exists(p),
|
||||
["/usr/lib64/libopus.so.0", "/usr/lib/libopus.so.0"],
|
||||
):
|
||||
try:
|
||||
disnake.opus.load_opus(path)
|
||||
info(f"successfully loaded opus from {path}")
|
||||
return
|
||||
except Exception as e:
|
||||
error(f"failed to load opus from {path}: {e}")
|
||||
raise Exception("could not locate working opus library")
|
||||
|
||||
|
||||
def parse_snowflake(id):
|
||||
return round(((id >> 22) + 1420070400000) / 1000)
|
||||
|
||||
|
||||
async def add_check_reaction(message):
|
||||
await message.add_reaction("✅")
|
||||
|
||||
|
||||
async def invalid_user_handler(interaction):
|
||||
await interaction.response.send_message(
|
||||
"you are not the intended receiver of this message!", ephemeral=True
|
||||
)
|
||||
|
||||
|
||||
class ChannelResponseWrapper:
|
||||
def __init__(self, message):
|
||||
self.message = message
|
||||
self.sent_message = None
|
||||
|
||||
async def send_message(self, **kwargs):
|
||||
if "ephemeral" in kwargs:
|
||||
del kwargs["ephemeral"]
|
||||
self.sent_message = await reply(self.message, **kwargs)
|
||||
|
||||
async def edit_message(self, content=None, embed=None, view=None):
|
||||
if self.sent_message:
|
||||
content = content or self.sent_message.content
|
||||
if not embed and len(self.sent_message.embeds) > 0:
|
||||
embed = self.sent_message.embeds[0]
|
||||
await self.sent_message.edit(content=content, embed=embed, view=view)
|
||||
|
||||
|
||||
class MessageInteractionWrapper:
|
||||
def __init__(self, message):
|
||||
self.message = message
|
||||
self.author = message.author
|
||||
self.response = ChannelResponseWrapper(message)
|
||||
|
||||
async def edit_original_message(self, content=None, embed=None, view=None):
|
||||
await self.response.edit_message(content=content, embed=embed, view=view)
|
||||
Reference in New Issue
Block a user