aboutsummaryrefslogtreecommitdiffstats
path: root/cogs/trigger.py
diff options
context:
space:
mode:
authorsalmonik <salmonik@noreply.codeberg.org>2026-04-19 18:10:09 +0200
committersalmonik <salmonik@noreply.codeberg.org>2026-04-19 18:10:09 +0200
commitf8e1cf36e1efa0602bf2e450835f2a67654762a6 (patch)
treefe6b12226d7eebe2a0dc6525de3414d0c3718cc8 /cogs/trigger.py
parentadd support for x^2+y^2=0,4 and alike (diff)
parentfix: proper aiohttp async context manager mocking in test (diff)
downloadsenator-sperma-f8e1cf36e1efa0602bf2e450835f2a67654762a6.tar.gz
senator-sperma-f8e1cf36e1efa0602bf2e450835f2a67654762a6.zip
Merge pull request 'massive changes' (#3) from dev into main
Reviewed-on: https://codeberg.org/salmonik/senator-sperma/pulls/3 stable enough
Diffstat (limited to '')
-rw-r--r--cogs/trigger.py44
1 files changed, 25 insertions, 19 deletions
diff --git a/cogs/trigger.py b/cogs/trigger.py
index 0e76cef..02e5573 100644
--- a/cogs/trigger.py
+++ b/cogs/trigger.py
@@ -15,6 +15,12 @@ logger = logging.getLogger(__name__)
15 15
16DB_PATH = 'data/triggers.db' 16DB_PATH = 'data/triggers.db'
17 17
18_SELECT_KEYWORD_SQL = "SELECT keyword FROM trigger_keywords WHERE trigger_id=?"
19_SELECT_RESPONSE_SQL = "SELECT response_text FROM trigger_responses WHERE trigger_id=?"
20_SELECT_TRIGGER_ID_SQL = "SELECT id FROM triggers WHERE name=?"
21_TRIGGER_NOT_FOUND_MSG = "Trigger not found."
22_TRIGGER_NAME_OPTION = "the name of the trigger"
23
18 24
19def get_connection(): 25def get_connection():
20 return sqlite3.connect(DB_PATH) 26 return sqlite3.connect(DB_PATH)
@@ -112,10 +118,10 @@ class Trigger(commands.Cog):
112 c = conn.cursor() 118 c = conn.cursor()
113 c.execute("SELECT id, name FROM triggers") 119 c.execute("SELECT id, name FROM triggers")
114 for trigger_id, name in c.fetchall(): 120 for trigger_id, name in c.fetchall():
115 c.execute("SELECT keyword FROM trigger_keywords WHERE trigger_id=?", (trigger_id,)) 121 c.execute(_SELECT_KEYWORD_SQL, (trigger_id,))
116 keywords = [row[0] for row in c.fetchall()] 122 keywords = [row[0] for row in c.fetchall()]
117 if any(keyword in content for keyword in keywords): 123 if any(keyword in content for keyword in keywords):
118 c.execute("SELECT response_text FROM trigger_responses WHERE trigger_id=?", (trigger_id,)) 124 c.execute(_SELECT_RESPONSE_SQL, (trigger_id,))
119 responses = [row[0] for row in c.fetchall()] 125 responses = [row[0] for row in c.fetchall()]
120 if responses: 126 if responses:
121 await message.channel.send(random.choice(responses).replace('\\n', '\n')) 127 await message.channel.send(random.choice(responses).replace('\\n', '\n'))
@@ -137,7 +143,7 @@ class Trigger(commands.Cog):
137 ctx: discord.ApplicationContext, 143 ctx: discord.ApplicationContext,
138 name = discord.Option( 144 name = discord.Option(
139 str, 145 str,
140 "the name of the trigger", 146 _TRIGGER_NAME_OPTION,
141 autocomplete= discord.utils.basic_autocomplete(get_type), 147 autocomplete= discord.utils.basic_autocomplete(get_type),
142 required=True 148 required=True
143 ) 149 )
@@ -157,7 +163,7 @@ class Trigger(commands.Cog):
157 ctx: discord.ApplicationContext, 163 ctx: discord.ApplicationContext,
158 name = discord.Option( 164 name = discord.Option(
159 str, 165 str,
160 "the name of the trigger", 166 _TRIGGER_NAME_OPTION,
161 autocomplete= discord.utils.basic_autocomplete(get_type), 167 autocomplete= discord.utils.basic_autocomplete(get_type),
162 required=True 168 required=True
163 ), 169 ),
@@ -174,10 +180,10 @@ class Trigger(commands.Cog):
174 ): 180 ):
175 with get_connection() as conn: 181 with get_connection() as conn:
176 c = conn.cursor() 182 c = conn.cursor()
177 c.execute("SELECT id FROM triggers WHERE name=?", (name,)) 183 c.execute(_SELECT_TRIGGER_ID_SQL, (name,))
178 row = c.fetchone() 184 row = c.fetchone()
179 if not row: 185 if not row:
180 await ctx.respond("Trigger not found.") 186 await ctx.respond(_TRIGGER_NOT_FOUND_MSG)
181 logger.warning(f"Trigger not found: {name}") 187 logger.warning(f"Trigger not found: {name}")
182 return 188 return
183 trigger_id = row[0] 189 trigger_id = row[0]
@@ -204,7 +210,7 @@ class Trigger(commands.Cog):
204 ctx: discord.ApplicationContext, 210 ctx: discord.ApplicationContext,
205 name = discord.Option( 211 name = discord.Option(
206 str, 212 str,
207 "the name of the trigger", 213 _TRIGGER_NAME_OPTION,
208 autocomplete= discord.utils.basic_autocomplete(get_type), 214 autocomplete= discord.utils.basic_autocomplete(get_type),
209 required=True 215 required=True
210 ), 216 ),
@@ -221,10 +227,10 @@ class Trigger(commands.Cog):
221 ): 227 ):
222 with get_connection() as conn: 228 with get_connection() as conn:
223 c = conn.cursor() 229 c = conn.cursor()
224 c.execute("SELECT id FROM triggers WHERE name=?", (name,)) 230 c.execute(_SELECT_TRIGGER_ID_SQL, (name,))
225 row = c.fetchone() 231 row = c.fetchone()
226 if not row: 232 if not row:
227 await ctx.respond("Trigger not found.") 233 await ctx.respond(_TRIGGER_NOT_FOUND_MSG)
228 logger.warning(f"Trigger not found: {name}") 234 logger.warning(f"Trigger not found: {name}")
229 return 235 return
230 trigger_id = row[0] 236 trigger_id = row[0]
@@ -245,17 +251,17 @@ class Trigger(commands.Cog):
245 ctx: discord.ApplicationContext, 251 ctx: discord.ApplicationContext,
246 name = discord.Option( 252 name = discord.Option(
247 str, 253 str,
248 "the name of the trigger", 254 _TRIGGER_NAME_OPTION,
249 autocomplete= discord.utils.basic_autocomplete(get_type), 255 autocomplete= discord.utils.basic_autocomplete(get_type),
250 required=True 256 required=True
251 ) 257 )
252 ): 258 ):
253 with get_connection() as conn: 259 with get_connection() as conn:
254 c = conn.cursor() 260 c = conn.cursor()
255 c.execute("SELECT id FROM triggers WHERE name=?", (name,)) 261 c.execute(_SELECT_TRIGGER_ID_SQL, (name,))
256 row = c.fetchone() 262 row = c.fetchone()
257 if not row: 263 if not row:
258 await ctx.respond("Trigger not found.") 264 await ctx.respond(_TRIGGER_NOT_FOUND_MSG)
259 return 265 return
260 trigger_id = row[0] 266 trigger_id = row[0]
261 c.execute("DELETE FROM trigger_keywords WHERE trigger_id=?", (trigger_id,)) 267 c.execute("DELETE FROM trigger_keywords WHERE trigger_id=?", (trigger_id,))
@@ -275,7 +281,7 @@ class Trigger(commands.Cog):
275 ctx: discord.ApplicationContext, 281 ctx: discord.ApplicationContext,
276 name = discord.Option( 282 name = discord.Option(
277 str, 283 str,
278 "the name of the trigger", 284 _TRIGGER_NAME_OPTION,
279 autocomplete=discord.utils.basic_autocomplete(get_type), 285 autocomplete=discord.utils.basic_autocomplete(get_type),
280 required=True 286 required=True
281 ) 287 )
@@ -286,13 +292,13 @@ class Trigger(commands.Cog):
286 c.execute("SELECT id FROM triggers WHERE name=?", (name,)) 292 c.execute("SELECT id FROM triggers WHERE name=?", (name,))
287 row = c.fetchone() 293 row = c.fetchone()
288 if not row: 294 if not row:
289 await ctx.respond("Trigger not found.") 295 await ctx.respond(_TRIGGER_NOT_FOUND_MSG)
290 logger.warning(f"Trigger not found: {name}") 296 logger.warning(f"Trigger not found: {name}")
291 return 297 return
292 trigger_id = row[0] 298 trigger_id = row[0]
293 c.execute("SELECT keyword FROM trigger_keywords WHERE trigger_id=?", (trigger_id,)) 299 c.execute(_SELECT_KEYWORD_SQL, (trigger_id,))
294 triggers = [row[0] for row in c.fetchall()] 300 triggers = [row[0] for row in c.fetchall()]
295 c.execute("SELECT response_text FROM trigger_responses WHERE trigger_id=?", (trigger_id,)) 301 c.execute(_SELECT_RESPONSE_SQL, (trigger_id,))
296 responses = [row[0] for row in c.fetchall()] 302 responses = [row[0] for row in c.fetchall()]
297 trigger_list = "\n".join(triggers) 303 trigger_list = "\n".join(triggers)
298 response_list = "\n".join(responses) 304 response_list = "\n".join(responses)
@@ -303,13 +309,13 @@ class Trigger(commands.Cog):
303 c.execute("SELECT id, name FROM triggers") 309 c.execute("SELECT id, name FROM triggers")
304 messages = [] 310 messages = []
305 for trigger_id, name in c.fetchall(): 311 for trigger_id, name in c.fetchall():
306 c.execute("SELECT keyword FROM trigger_keywords WHERE trigger_id=?", (trigger_id,)) 312 c.execute(_SELECT_KEYWORD_SQL, (trigger_id,))
307 triggers = ", ".join([row[0] for row in c.fetchall()]) 313 triggers = ", ".join([row[0] for row in c.fetchall()])
308 c.execute("SELECT response_text FROM trigger_responses WHERE trigger_id=?", (trigger_id,)) 314 c.execute(_SELECT_RESPONSE_SQL, (trigger_id,))
309 responses = ", ".join([row[0] for row in c.fetchall()]) 315 responses = ", ".join([row[0] for row in c.fetchall()])
310 messages.append(f"**{name}**\nTriggers: {triggers}\nResponses: {responses}") 316 messages.append(f"**{name}**\nTriggers: {triggers}\nResponses: {responses}")
311 await ctx.respond("\n\n".join(messages)) 317 await ctx.respond("\n\n".join(messages))
312 logger.info(f"Triggers listed") 318 logger.info("Triggers listed")
313 319
314 @trigger_group.command( 320 @trigger_group.command(
315 description="how to use trigger group?" 321 description="how to use trigger group?"