Skip to content

Commit 535d85d

Browse files
committed
Added image sensitivity feature
1 parent 5c50698 commit 535d85d

File tree

2 files changed

+44
-6
lines changed

2 files changed

+44
-6
lines changed

ai-discord-mod/ai_discord_functions.py

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,18 @@
66

77
vqa_pipeline = pipeline("visual-question-answering")
88

9-
async def image_is_safe():
9+
async def image_is_safe(sensitivity):
1010
image = Image.open("toModerate.jpeg")
11-
question = "Is the image safe for a public online community to view?"
12-
11+
question = "Does the image contain pornographic, adult, gore, sexual, or other NSFW content?"
12+
sensitivity = 1 - sensitivity
1313
result = vqa_pipeline(image, question, top_k=1)[0]
1414
answer = result["answer"].lower()
15-
15+
1616
print(result)
1717

18-
if result["score"] > 0.8 and answer.startswith("n"):
18+
if result["score"] > sensitivity and answer.startswith("y"):
19+
return False
20+
elif result["score"] < sensitivity and answer.startswith("n"):
1921
return False
2022
return True
2123

ai-discord-mod/discord_bot.py

Lines changed: 37 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
# Create a lock for each file
1414
servers_lock = asyncio.Lock()
1515
warnings_lock = asyncio.Lock()
16+
sensitivity_lock = asyncio.Lock()
1617

1718
# Save servers settings to file
1819
async def save_servers():
@@ -46,6 +47,21 @@ async def save_warnings():
4647
except FileNotFoundError:
4748
warning_list = {}
4849

50+
async def save_sensitivity():
51+
async with sensitivity_lock:
52+
try:
53+
with open("sensitivity.json", "w") as file:
54+
json.dump(sensitivity, file)
55+
except IOError as e:
56+
print(f"Error saving sensitivity: {e}")
57+
58+
# Load sensitivity settings from file
59+
try:
60+
with open("sensitivity.json", "r") as file:
61+
sensitivity = json.load(file)
62+
except FileNotFoundError:
63+
sensitivity = {}
64+
4965

5066
intents = discord.Intents.default()
5167
intents.message_content = True
@@ -63,13 +79,15 @@ async def aihelp(interaction: discord.Interaction):
6379
set_warnings <warnings>: Sets the number of warnings a user can have before muting them.
6480
set_mute_time <time>: Sets the amount of time a user is muted for after having too many warnings. Example: 1d, 3m, 5s, 6h
6581
use_warnings <boolean>: Whether to use warnings and mute the user, or just only delete the message.
82+
set_sensitivity <float from 0-1>: The image moderation sensitivity. As sensitivity increases, image moderation becomes more strict, and as sensitivity decreases, image moderation becomes less strict.
6683
```
6784
6885
Note the default presets:
6986
```
7087
set_warnings: 3
7188
set_mute_time: 10m
7289
use_warnings: False
90+
set_sensitivity: 0.5
7391
```
7492
7593
Also note that the Sven role should be **ABOVE** all other members, in order to create and enforce the muted role.
@@ -86,6 +104,23 @@ async def use_warnings(interaction: discord.Interaction, use_warnings: bool):
86104
await save_servers()
87105
await interaction.response.send_message(f"Successfully set use_warnings to **{use_warnings}**.", ephemeral=True)
88106

107+
@bot.tree.command(name="set_sensitivity", description="Set a server wide image moderation sensitivity.")
108+
@app_commands.describe(sensitivity = "Image Moderation Sensitivity")
109+
async def set_sensitivity(interaction: discord.Interaction, sensitivity: float):
110+
if not interaction.user.guild_permissions.administrator:
111+
await interaction.response.send_message(f"You do not have permission to use this command.", ephemeral=True)
112+
return
113+
if sensitivity > 1:
114+
await interaction.response.send_message("**Failed to parse sensitivity. Sensitivity must be a number from 0-1.**", ephemeral=True)
115+
return
116+
try:
117+
servers[str(interaction.guild.id)] = servers.get(str(interaction.guild.id), {})
118+
servers[str(interaction.guild.id)]['sensitivity'] = sensitivity
119+
await save_servers()
120+
await interaction.response.send_message(f"**Successfully set image moderation sensitivity to: {sensitivity}**", ephemeral=True)
121+
except:
122+
await interaction.response.send_message("**Failed to parse sensitivity. Sensitivity must be a number from 0-1.**", ephemeral=True)
123+
89124

90125
@bot.tree.command(name="set_warnings", description="Set a server wide warnings limit before muting a member.")
91126
@app_commands.describe(warning_count = "Warning Count")
@@ -225,7 +260,8 @@ async def on_message(message):
225260
for attachment in attachments:
226261
if attachment.content_type.startswith("image"):
227262
await attachment.save("toModerate.jpeg")
228-
result = await image_is_safe()
263+
sensitivity = servers[str(guild.id)].get('sensitivity', 0.5)
264+
result = await image_is_safe(sensitivity=sensitivity)
229265

230266
if not result:
231267
await sent_message.delete()

0 commit comments

Comments
 (0)