Skip to content

Commit 512ed7e

Browse files
committed
Show closest distance in #mod-alert message
1 parent 5fdef66 commit 512ed7e

1 file changed

Lines changed: 15 additions & 5 deletions

File tree

bot/exts/filtering/_filter_lists/image_hash.py

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -70,13 +70,23 @@ async def actions_for(
7070
if not image_hashes:
7171
return None, [], {}
7272

73-
triggers = await self[ListType.DENY].filter_list_result(ctx.replace(content=image_hashes))
73+
trigger_ctx = ctx.replace(content=image_hashes)
74+
triggers = await self[ListType.DENY].filter_list_result(trigger_ctx)
7475
if not triggers:
7576
return None, [], {ListType.DENY: triggers}
7677

7778
actions = self[ListType.DENY].merge_actions(triggers)
78-
messages = [
79-
f"{filter_.id} (`{filter_.content}`) - {filter_.description or '*No description*'}"
80-
for filter_ in triggers
81-
]
79+
messages = []
80+
for filter_ in triggers:
81+
distance = self._closest_distance(filter_, image_hashes)
82+
messages.append(
83+
f"{filter_.id} (`{filter_.content}` distance `{distance}`)"
84+
f" - {filter_.description or '*No description*'}"
85+
)
8286
return actions, messages, {ListType.DENY: triggers}
87+
88+
@staticmethod
89+
def _closest_distance(filter_: Filter, image_hashes: list[int]) -> int:
90+
"""Return the closest Hamming distance between a filter hash and any uploaded image hash."""
91+
candidate_hash = int(filter_.content, 16)
92+
return min(int.bit_count(image_hash ^ candidate_hash) for image_hash in image_hashes)

0 commit comments

Comments
 (0)