1
0
mirror of https://github.com/osmarks/autobotrobot synced 2025-03-11 02:48:09 +00:00

Meme Search Engine frontend

This commit is contained in:
osmarks 2024-05-12 17:44:00 +01:00
parent feffff1a95
commit 6e30123e56
3 changed files with 30 additions and 6 deletions

View File

@ -1,9 +1,9 @@
# TODO # TODO
pytio==0.3.1 pytio==0.3.1
aiohttp==3.8.3 aiohttp==3.9.3
aiosqlite==0.17.0 aiosqlite==0.19.0
nextcord==2.3.2 nextcord==2.3.2
numpy==1.23 numpy==1.26
prometheus-async==19.2.0 prometheus-async==19.2.0
prometheus-client==0.15.0 prometheus-client==0.15.0
pydot==1.4.2 pydot==1.4.2

View File

@ -6,7 +6,9 @@ import re
import aiohttp import aiohttp
import subprocess import subprocess
import discord.ext.commands as commands import discord.ext.commands as commands
import discord
from datetime import datetime from datetime import datetime
from pathlib import Path
import tio import tio
import util import util
@ -225,5 +227,21 @@ AutoBotRobot is operated by gollark/osmarks.
generation = await util.generate(self.session, util.config["ai"]["prompt_start"] + "".join(prompt)) generation = await util.generate(self.session, util.config["ai"]["prompt_start"] + "".join(prompt))
if generation.strip(): await ctx.send(generation.strip()) if generation.strip(): await ctx.send(generation.strip())
@commands.command(help="Search meme library.", aliases=["memes"])
async def meme(self, ctx, *, query=None):
search_many = ctx.invoked_with == "memes"
raw_memes = await util.user_config_lookup(ctx, "enable_raw_memes") == "true"
async with self.session.post(util.config["memetics"]["meme_search_backend"], json={
"text": [[query, 1]],
"top_k": 4 if search_many else 1
}) as res:
results = await res.json()
files = [ x["file"] for x in results ]
if raw_memes:
o_files = [ discord.File(Path(util.config["memetics"]["memes_local"]) / Path(util.config["memetics"]["meme_base"]) / f) for f in files ]
else:
o_files = [ discord.File(Path(util.config["memetics"]["memes_local"]) / Path(util.config["memetics"]["thumb_base"]) / util.meme_thumbnail(f)) for f in files ]
await ctx.send(files=o_files)
def setup(bot): def setup(bot):
bot.add_cog(GeneralCommands(bot)) bot.add_cog(GeneralCommands(bot))

View File

@ -16,6 +16,7 @@ import math
import pytz import pytz
import collections import collections
import aiohttp import aiohttp
import string
config = {} config = {}
@ -36,7 +37,7 @@ prefixes = {
# highly dubiously useful unofficial prefixes # highly dubiously useful unofficial prefixes
"R": 27, "r": -27, "Q": 30, "q": -30, "X": 27, "x": -27, "W": 30, "w": -30 "R": 27, "r": -27, "Q": 30, "q": -30, "X": 27, "x": -27, "W": 30, "w": -30
} }
number = "(-?[0-9]+(?:\.[0-9]+)?)(" + "|".join(prefixes.keys()) + ")?" number = "(-?[0-9]+(?:\\.[0-9]+)?)(" + "|".join(prefixes.keys()) + ")?"
time_units = ( time_units = (
("galacticyears", "cosmicyears", "gy", "[Cc]y"), ("galacticyears", "cosmicyears", "gy", "[Cc]y"),
@ -140,7 +141,7 @@ def format_timedelta(from_, to):
if x != 0: out += str(x) + short if x != 0: out += str(x) + short
return "0s" if out == "" else out return "0s" if out == "" else out
CODEBLOCK_REGEX = "^[^`]*```[a-zA-Z0-9_\-+]*\n(.+)```$" CODEBLOCK_REGEX = "^[^`]*```[a-zA-Z0-9_\\-+]*\n(.+)```$"
CODELINE_REGEX = "^[^`]*`(.*)`$" CODELINE_REGEX = "^[^`]*`(.*)`$"
def extract_codeblock(s): def extract_codeblock(s):
match1 = re.match(CODEBLOCK_REGEX, s, flags=re.DOTALL) match1 = re.match(CODEBLOCK_REGEX, s, flags=re.DOTALL)
@ -343,4 +344,9 @@ async def generate(response: aiohttp.ClientSession, prompt):
"stop": ["\n"] "stop": ["\n"]
}) as res: }) as res:
data = await res.json() data = await res.json()
return data["choices"][0]["text"] return data["choices"][0]["text"]
filesafe_charset = string.ascii_letters + string.digits + "-"
def meme_thumbnail(original):
return ''.join([ i if i in filesafe_charset else '_' for i in (config["memetics"]["meme_base"] + "/" + original) ]) + "." + config["memetics"]["target_format"] + config["memetics"]["target_format_ext"]