add lowercase matching of terms of interest, add listing of terms of interest

This commit is contained in:
HAV0X 2025-01-31 07:48:46 +08:00
parent d7d371a999
commit a04fe9e7a7
1 changed files with 38 additions and 13 deletions

51
bot.py
View File

@ -7,16 +7,19 @@ from bs4 import BeautifulSoup
import nextcord
from nextcord.ext import tasks, commands
def load_config(config_name):
if not os.path.exists(config_name):
return None
with open(config_name, "rt", encoding="utf-8") as f:
return json.load(f)
def save_config(config_name, config):
with open(config_name, 'wt', encoding="utf-8") as f:
json.dump(config, f, indent=1, ensure_ascii=False)
# dictionary of urls and time they were added
processed_urls = {}
@ -30,10 +33,12 @@ if not config.get("deepl_key") or not config.get("discord_bot_token"):
intents = nextcord.Intents.default()
bot = commands.Bot(command_prefix=".", intents=intents)
headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36'}
headers = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36'}
deepl_headers = {'Authorization': f'DeepL-Auth-Key {config["deepl_key"]}', 'User-Agent': 'YahooScraper/1.0.0'}
search_term = 'けものフレンズ'
ping_terms : dict = config["ping_terms"]
ping_terms: dict = config["ping_terms"]
def add_ping(term, user_id):
if term not in ping_terms:
@ -43,11 +48,12 @@ def add_ping(term, user_id):
else:
print(f"{user_id} is already being pinged for {term}")
return False
config["ping_terms"] = ping_terms
save_config("config.json", config)
return True
def remove_ping(term, user_id):
if term not in ping_terms:
return False
@ -58,30 +64,36 @@ def remove_ping(term, user_id):
config["ping_terms"] = ping_terms
save_config("config.json", config)
return True
def get_user_pings(user_id):
return [term for term in ping_terms.keys() if user_id in ping_terms[term]]
async def ping_users(auction_name_jp, auction_name_en):
"""If the name of the listing is particularly interesting, ping some people
- HAV0X"""
users_to_ping = []
interested_terms = []
for term in ping_terms.keys():
if term in auction_name_jp or term in auction_name_en:
if term.lower() in auction_name_jp.lower() or term.lower() in auction_name_en.lower():
interested_terms.append(term)
for user in ping_terms[term]:
if user not in users_to_ping:
users_to_ping.append(user)
if len(users_to_ping) > 0:
ping_message = "Interesting listing, pinging: " + ", ".join([f"<@{user}>" for user in users_to_ping])
ping_message = "Interesting listing, pinging: " + ", ".join([f"<@{user}>" for user in users_to_ping]) + "\nTerms of interest: " + ', '.join([f'"{s}"' for s in interested_terms])
await send_message_text("Japari Modding", "yahoo-auctions", ping_message)
def translate(text: str):
text = requests.post("https://api-free.deepl.com/v2/translate",
json={"text": [text], "target_lang": "EN", 'source_lang': 'JA'}, headers=deepl_headers).json()[
'translations'][0]['text']
return text.replace("Beast Friends", "Kemono Friends")
def embed_auction(service: str, url: str, name: str, name_en: str, thumbnail: str, price=None):
desc = name
if price is not None:
@ -91,6 +103,7 @@ def embed_auction(service: str, url: str, name: str, name_en: str, thumbnail: st
embed.set_image(url=thumbnail)
return embed
async def send_message(server_name: str, channel_name: str, embed: nextcord.Embed):
for guild in bot.guilds:
if guild.name == server_name:
@ -99,6 +112,7 @@ async def send_message(server_name: str, channel_name: str, embed: nextcord.Embe
await channel.send(embed=embed)
break
async def send_message_text(server_name: str, channel_name: str, text: str):
for guild in bot.guilds:
if guild.name == server_name:
@ -107,6 +121,7 @@ async def send_message_text(server_name: str, channel_name: str, text: str):
await channel.send(content=text)
break
async def check_yahoo_fleamarket(search_term: str, page: int, notify: bool):
url = f'https://buyee.jp/paypayfleamarket/search?keyword={search_term}&order-sort=created_time&page={page}'
@ -142,6 +157,7 @@ async def check_yahoo_fleamarket(search_term: str, page: int, notify: bool):
except Exception as e:
print(url, e)
async def check_yahoo_auction(search_term: str, page: int, notify: bool):
url = f'https://buyee.jp/item/search/query/{search_term}?sort=end&order=d&page={page}'
@ -174,6 +190,7 @@ async def check_yahoo_auction(search_term: str, page: int, notify: bool):
except Exception as e:
print(url, e)
@bot.event
async def on_ready():
for i in range(1, 4):
@ -182,6 +199,7 @@ async def on_ready():
await asyncio.sleep(10)
myLoop.start()
@tasks.loop(minutes=30)
async def myLoop():
fulldate = datetime.now()
@ -203,26 +221,33 @@ async def myLoop():
if onlydate - processed_urls[key] > timedelta(weeks=3):
del processed_urls[key]
@bot.slash_command(description="Pings you when auction name contains the given term")
async def ping_me(interaction: nextcord.Interaction, term : str):
async def ping_me(interaction: nextcord.Interaction, term: str):
if add_ping(term, interaction.user.id):
await interaction.response.send_message(f"Success! You will be pinged for {term}", ephemeral=False)
else:
pings = get_user_pings(interaction.user.id)
if len(pings) > 0:
await interaction.response.send_message(f"Failed to add {term}. You are pinged for {', '.join(pings)}", ephemeral=True)
await interaction.response.send_message(f"Failed to add {term}. You are pinged for {', '.join(pings)}",
ephemeral=True)
else:
await interaction.response.send_message(f"Failed to add {term}. You are not pinged for anything", ephemeral=True)
await interaction.response.send_message(f"Failed to add {term}. You are not pinged for anything",
ephemeral=True)
@bot.slash_command(description="No longer pings you when auction name contains the given term")
async def unping_me(interaction: nextcord.Interaction, term : str):
async def unping_me(interaction: nextcord.Interaction, term: str):
if remove_ping(term, interaction.user.id):
await interaction.response.send_message(f"Success! You will no longer be pinged for {term}", ephemeral=False)
else:
pings = get_user_pings(interaction.user.id)
if len(pings) > 0:
await interaction.response.send_message(f"Failed to remove {term}. You are pinged for {', '.join(pings)}", ephemeral=True)
await interaction.response.send_message(f"Failed to remove {term}. You are pinged for {', '.join(pings)}",
ephemeral=True)
else:
await interaction.response.send_message(f"Failed to remove {term}. You are not pinged for anything", ephemeral=True)
await interaction.response.send_message(f"Failed to remove {term}. You are not pinged for anything",
ephemeral=True)
bot.run(config["discord_bot_token"], reconnect=True)