Last active
April 25, 2024 10:01
-
-
Save woctezuma/c5259c3851c44bbbb6f2a4ce83c010e1 to your computer and use it in GitHub Desktop.
Look for words in Discord profiles (pronouns and bio)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import json | |
from pathlib import Path | |
BIO_FIELD = ["bio"] | |
PRONOUNS_FIELD = ["pronouns"] | |
fname = "profiles.json" | |
with Path(fname).open() as fn: | |
d = json.load(fn) | |
def check_word(word: str, data: dict, fields: list[str]) -> bool: | |
return any(data[f] and word in data[f].lower() for f in fields) | |
def check_altered_word(word: str, data: dict, fields: list[str]) -> bool: | |
word_sep = "/" | |
min_num_letters = 3 | |
if len(word) >= min_num_letters: | |
for i in range(len(word)): | |
altered_word_a = word[:i] + word_sep + word[(i + 1) :] | |
altered_word_b = word[:i] + word_sep + word[i:] | |
if check_word(altered_word_a, data, fields) or check_word( | |
altered_word_b, | |
data, | |
fields, | |
): | |
return True | |
return False | |
def has_problematic_pronouns(word: str, member_data: dict) -> bool: | |
return check_word(word, member_data, PRONOUNS_FIELD) or check_altered_word( | |
word, | |
member_data, | |
PRONOUNS_FIELD, | |
) | |
def has_problematic_bio(word: str, member_data: dict) -> bool: | |
return check_word(word, member_data, BIO_FIELD) | |
def display_results(data: dict, fields: list[str]) -> None: | |
s = "\t".join([data[f] for f in fields if data[f]]) | |
print(f'<@{data["id"]}>{s}\n') | |
def display_member_list(member_list: set[int], member_sep: str = "\n") -> None: | |
print(member_sep.join([f"<@{i}>" for i in sorted(member_list)])) | |
def run_workflow( | |
word: str, | |
member_list: set[int], | |
*, | |
verbose: bool, | |
) -> set[int]: | |
lower_word = word.lower() | |
for member_data in d.values(): | |
if has_problematic_pronouns(lower_word, member_data) or has_problematic_bio( | |
lower_word, | |
member_data, | |
): | |
member_list.add(member_data["id"]) | |
if verbose: | |
display_results(member_data, PRONOUNS_FIELD + BIO_FIELD) | |
return member_list | |
def main() -> None: | |
words = ["hitler", "hither", "nazi"] | |
member_list = set() | |
member_sep = ", " | |
verbose = True | |
print(words) | |
for word in words: | |
member_list = run_workflow(word, member_list, verbose=verbose) | |
if member_list: | |
display_member_list(member_list, member_sep) | |
if __name__ == "__main__": | |
main() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment