mirror of
https://github.com/wlinator/luminara.git
synced 2024-10-02 20:23:12 +00:00
Refactor custom_reactions table column names for triggers and emojis
This commit is contained in:
parent
e9a7603a19
commit
26db690687
3 changed files with 49 additions and 22 deletions
|
@ -3,12 +3,12 @@ CREATE TABLE custom_reactions (
|
||||||
id SERIAL PRIMARY KEY, -- Unique identifier for each custom reaction
|
id SERIAL PRIMARY KEY, -- Unique identifier for each custom reaction
|
||||||
trigger_text TEXT NOT NULL, -- The text that triggers the custom reaction
|
trigger_text TEXT NOT NULL, -- The text that triggers the custom reaction
|
||||||
response TEXT, -- The response text for the custom reaction (nullable for emoji reactions)
|
response TEXT, -- The response text for the custom reaction (nullable for emoji reactions)
|
||||||
emoji TEXT, -- The emoji for the custom reaction (nullable for text responses)
|
emoji_id BIGINT UNSIGNED, -- The emoji for the custom reaction (nullable for text responses)
|
||||||
is_emoji BOOLEAN DEFAULT FALSE, -- Indicates if the reaction is a discord emoji reaction
|
is_emoji BOOLEAN DEFAULT FALSE, -- Indicates if the reaction is a discord emoji reaction
|
||||||
is_full_match BOOLEAN DEFAULT FALSE, -- Indicates if the trigger matches the full content of the message
|
is_full_match BOOLEAN DEFAULT FALSE, -- Indicates if the trigger matches the full content of the message
|
||||||
is_global BOOLEAN DEFAULT TRUE, -- Indicates if the reaction is global or specific to a guild
|
is_global BOOLEAN DEFAULT TRUE, -- Indicates if the reaction is global or specific to a guild
|
||||||
guild_id BIGINT, -- The ID of the guild where the custom reaction is used (nullable for global reactions)
|
guild_id BIGINT UNSIGNED, -- The ID of the guild where the custom reaction is used (nullable for global reactions)
|
||||||
creator_id BIGINT NOT NULL, -- The ID of the user who created the custom reaction
|
creator_id BIGINT UNSIGNED NOT NULL, -- The ID of the user who created the custom reaction
|
||||||
usage_count INT DEFAULT 0, -- The number of times a custom reaction has been used
|
usage_count INT DEFAULT 0, -- The number of times a custom reaction has been used
|
||||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, -- Timestamp when the custom reaction was created
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, -- Timestamp when the custom reaction was created
|
||||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, -- Timestamp when the custom reaction was last updated
|
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, -- Timestamp when the custom reaction was last updated
|
||||||
|
|
|
@ -17,30 +17,57 @@ class ReactionHandler:
|
||||||
self.content: str = self.message.content.lower()
|
self.content: str = self.message.content.lower()
|
||||||
self.reaction_service = CustomReactionsService()
|
self.reaction_service = CustomReactionsService()
|
||||||
|
|
||||||
async def run_all_checks(self) -> None:
|
async def run_checks(self) -> None:
|
||||||
"""
|
"""
|
||||||
Runs all checks for reactions and responses.
|
Runs checks for reactions and responses.
|
||||||
|
Guild triggers are prioritized over global triggers if they are identical.
|
||||||
"""
|
"""
|
||||||
guild_id = self.message.guild.id if self.message.guild else None
|
guild_id = self.message.guild.id if self.message.guild else None
|
||||||
|
|
||||||
if guild_id:
|
if guild_id:
|
||||||
reaction = await self.reaction_service.find_trigger(guild_id, self.content)
|
data = await self.reaction_service.find_trigger(guild_id, self.content)
|
||||||
if reaction:
|
if data:
|
||||||
processed = False
|
processed = False
|
||||||
try:
|
try:
|
||||||
if reaction["type"] == "text":
|
if data["type"] == "text":
|
||||||
await self.message.reply(reaction["response"])
|
processed = await self.try_respond(data)
|
||||||
processed = True
|
elif data["type"] == "emoji":
|
||||||
elif reaction["type"] == "emoji":
|
processed = await self.try_react(data)
|
||||||
await self.message.add_reaction(reaction["response"])
|
|
||||||
processed = True
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.warning(f"Failed to process reaction: {e}")
|
logger.warning(f"Failed to process reaction: {e}")
|
||||||
|
|
||||||
if processed:
|
if processed:
|
||||||
await self.reaction_service.increment_reaction_usage(
|
await self.reaction_service.increment_reaction_usage(
|
||||||
int(reaction["id"])
|
int(data["id"])
|
||||||
)
|
)
|
||||||
|
|
||||||
|
async def try_respond(self, data) -> bool:
|
||||||
|
"""
|
||||||
|
Tries to respond to the message.
|
||||||
|
"""
|
||||||
|
response = data.get("response")
|
||||||
|
if response:
|
||||||
|
try:
|
||||||
|
await self.message.reply(response)
|
||||||
|
return True
|
||||||
|
except Exception:
|
||||||
|
pass
|
||||||
|
return False
|
||||||
|
|
||||||
|
async def try_react(self, data) -> bool:
|
||||||
|
"""
|
||||||
|
Tries to react to the message.
|
||||||
|
"""
|
||||||
|
emoji_id = data.get("emoji_id")
|
||||||
|
if emoji_id:
|
||||||
|
try:
|
||||||
|
emoji = self.client.get_emoji(emoji_id)
|
||||||
|
if emoji:
|
||||||
|
await self.message.add_reaction(emoji)
|
||||||
|
return True
|
||||||
|
except Exception:
|
||||||
|
pass
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
||||||
class ReactionListener(Cog):
|
class ReactionListener(Cog):
|
||||||
|
@ -57,7 +84,7 @@ class ReactionListener(Cog):
|
||||||
if not message.author.bot and not BlacklistUserService.is_user_blacklisted(
|
if not message.author.bot and not BlacklistUserService.is_user_blacklisted(
|
||||||
message.author.id
|
message.author.id
|
||||||
):
|
):
|
||||||
await ReactionHandler(self.client, message).run_all_checks()
|
await ReactionHandler(self.client, message).run_checks()
|
||||||
|
|
||||||
|
|
||||||
def setup(client) -> None:
|
def setup(client) -> None:
|
||||||
|
|
|
@ -27,7 +27,7 @@ class CustomReactionsService:
|
||||||
"id": reaction[0],
|
"id": reaction[0],
|
||||||
"trigger_text": reaction[1],
|
"trigger_text": reaction[1],
|
||||||
"response": reaction[2],
|
"response": reaction[2],
|
||||||
"emoji": reaction[3],
|
"emoji_id": reaction[3],
|
||||||
"is_emoji": reaction[4],
|
"is_emoji": reaction[4],
|
||||||
"is_full_match": reaction[5],
|
"is_full_match": reaction[5],
|
||||||
"is_global": reaction[6],
|
"is_global": reaction[6],
|
||||||
|
@ -46,7 +46,7 @@ class CustomReactionsService:
|
||||||
creator_id: int,
|
creator_id: int,
|
||||||
trigger_text: str,
|
trigger_text: str,
|
||||||
response: Optional[str] = None,
|
response: Optional[str] = None,
|
||||||
emoji: Optional[str] = None,
|
emoji_id: Optional[int] = None,
|
||||||
is_emoji: bool = False,
|
is_emoji: bool = False,
|
||||||
is_full_match: bool = False,
|
is_full_match: bool = False,
|
||||||
is_global: bool = True,
|
is_global: bool = True,
|
||||||
|
@ -55,7 +55,7 @@ class CustomReactionsService:
|
||||||
return False
|
return False
|
||||||
|
|
||||||
query = """
|
query = """
|
||||||
INSERT INTO custom_reactions (trigger_text, response, emoji, is_emoji, is_full_match, is_global, guild_id, creator_id)
|
INSERT INTO custom_reactions (trigger_text, response, emoji_id, is_emoji, is_full_match, is_global, guild_id, creator_id)
|
||||||
VALUES (?, ?, ?, ?, ?, ?, ?, ?)
|
VALUES (?, ?, ?, ?, ?, ?, ?, ?)
|
||||||
ON DUPLICATE KEY UPDATE trigger_text=trigger_text
|
ON DUPLICATE KEY UPDATE trigger_text=trigger_text
|
||||||
"""
|
"""
|
||||||
|
@ -64,7 +64,7 @@ class CustomReactionsService:
|
||||||
(
|
(
|
||||||
trigger_text,
|
trigger_text,
|
||||||
response,
|
response,
|
||||||
emoji,
|
emoji_id,
|
||||||
is_emoji,
|
is_emoji,
|
||||||
is_full_match,
|
is_full_match,
|
||||||
is_global,
|
is_global,
|
||||||
|
@ -79,7 +79,7 @@ class CustomReactionsService:
|
||||||
guild_id: int,
|
guild_id: int,
|
||||||
trigger_text: str,
|
trigger_text: str,
|
||||||
new_response: Optional[str] = None,
|
new_response: Optional[str] = None,
|
||||||
new_emoji: Optional[str] = None,
|
new_emoji_id: Optional[int] = None,
|
||||||
is_emoji: Optional[bool] = None,
|
is_emoji: Optional[bool] = None,
|
||||||
is_full_match: Optional[bool] = None,
|
is_full_match: Optional[bool] = None,
|
||||||
is_global: Optional[bool] = None,
|
is_global: Optional[bool] = None,
|
||||||
|
@ -87,7 +87,7 @@ class CustomReactionsService:
|
||||||
query = """
|
query = """
|
||||||
UPDATE custom_reactions
|
UPDATE custom_reactions
|
||||||
SET response = COALESCE(?, response),
|
SET response = COALESCE(?, response),
|
||||||
emoji = COALESCE(?, emoji),
|
emoji_id = COALESCE(?, emoji_id),
|
||||||
is_emoji = COALESCE(?, is_emoji),
|
is_emoji = COALESCE(?, is_emoji),
|
||||||
is_full_match = COALESCE(?, is_full_match),
|
is_full_match = COALESCE(?, is_full_match),
|
||||||
is_global = COALESCE(?, is_global),
|
is_global = COALESCE(?, is_global),
|
||||||
|
@ -98,7 +98,7 @@ class CustomReactionsService:
|
||||||
query,
|
query,
|
||||||
(
|
(
|
||||||
new_response,
|
new_response,
|
||||||
new_emoji,
|
new_emoji_id,
|
||||||
is_emoji,
|
is_emoji,
|
||||||
is_full_match,
|
is_full_match,
|
||||||
is_global,
|
is_global,
|
||||||
|
|
Loading…
Reference in a new issue