Profanity stuff is working-ish
This commit is contained in:
3
.gitignore
vendored
3
.gitignore
vendored
@@ -6,4 +6,5 @@ breadbot.db
|
|||||||
tools/profanity_filter/bin/Words.json
|
tools/profanity_filter/bin/Words.json
|
||||||
tools/profanity_filter/src/Words.json
|
tools/profanity_filter/src/Words.json
|
||||||
bin/config.json
|
bin/config.json
|
||||||
bin/Words.json
|
bin/Words.json
|
||||||
|
bin/__pycache__
|
||||||
@@ -23,7 +23,7 @@ class Database():
|
|||||||
where = self.__generate_basic_where_clause(where) if not where is None else ""
|
where = self.__generate_basic_where_clause(where) if not where is None else ""
|
||||||
)
|
)
|
||||||
|
|
||||||
return self.query(query_string, [element["value"] for element in where] if not where is None else None, values)[1]
|
return self.query(query_string, values)[1]
|
||||||
|
|
||||||
def insert(self, table: str, columns: list[str], values: list) -> int:
|
def insert(self, table: str, columns: list[str], values: list) -> int:
|
||||||
query_string = "INSERT INTO {table} ({columns}) VALUES ({values})".format(
|
query_string = "INSERT INTO {table} ({columns}) VALUES ({values})".format(
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ print(db.select("db_server", ["server_snowflake"]))
|
|||||||
|
|
||||||
for element in db.select("db_server", ["server_snowflake"]):
|
for element in db.select("db_server", ["server_snowflake"]):
|
||||||
for word in words_list:
|
for word in words_list:
|
||||||
regex_string = "(^|\\\\W|\\\\b)"
|
regex_string = "(^|\\W|\\b)"
|
||||||
|
|
||||||
for i in range(len(word)):
|
for i in range(len(word)):
|
||||||
if word[i] in config_json["profanity"]["replacers"].keys():
|
if word[i] in config_json["profanity"]["replacers"].keys():
|
||||||
@@ -37,7 +37,7 @@ for element in db.select("db_server", ["server_snowflake"]):
|
|||||||
else:
|
else:
|
||||||
regex_string = regex_string + word[i] + "{1,}"
|
regex_string = regex_string + word[i] + "{1,}"
|
||||||
|
|
||||||
regex_string = regex_string + "($|\\\\W|\\\\b)"
|
regex_string = regex_string + "($|\\W|\\b)"
|
||||||
|
|
||||||
db.insert("db_message_regex", ["regex", "word", "serverServerSnowflake"], [regex_string, word, element[0]])
|
db.insert("db_message_regex", ["regex", "word", "serverServerSnowflake"], [regex_string, word, element[0]])
|
||||||
|
|
||||||
|
|||||||
@@ -66,6 +66,8 @@ client.once(Events.ClientReady, async () => {
|
|||||||
const messageRepo = dataSource.getRepository(DBMessage)
|
const messageRepo = dataSource.getRepository(DBMessage)
|
||||||
const mccRepo = dataSource.getRepository(DBMessageContentChanges)
|
const mccRepo = dataSource.getRepository(DBMessageContentChanges)
|
||||||
const maRepo = dataSource.getRepository(DBMessageAttachments)
|
const maRepo = dataSource.getRepository(DBMessageAttachments)
|
||||||
|
const regexesRepo = dataSource.getRepository(DBMessageRegex)
|
||||||
|
const matchesRepo = dataSource.getRepository(DBMessageRegexMatches)
|
||||||
|
|
||||||
client.guilds.cache.forEach(async (guild: Guild) => {
|
client.guilds.cache.forEach(async (guild: Guild) => {
|
||||||
const server: DBServer | null = await insertGuild(serverRepo, guild)
|
const server: DBServer | null = await insertGuild(serverRepo, guild)
|
||||||
@@ -113,7 +115,7 @@ client.once(Events.ClientReady, async () => {
|
|||||||
})
|
})
|
||||||
|
|
||||||
setupRoleCapture(client, serverRepo, roleRepo)
|
setupRoleCapture(client, serverRepo, roleRepo)
|
||||||
setupMessageCapture(client, channelRepo, userRepo, messageRepo, mccRepo, maRepo)
|
setupMessageCapture(client, serverRepo, channelRepo, userRepo, messageRepo, mccRepo, maRepo, regexesRepo, matchesRepo)
|
||||||
|
|
||||||
console.log("Breadbot is Ready")
|
console.log("Breadbot is Ready")
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -100,8 +100,4 @@ export async function markMessageDeleted(db: Repository<DBMessage>, message: Omi
|
|||||||
console.log(err)
|
console.log(err)
|
||||||
return null
|
return null
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
export async function checkYourProfanity(messageDB: Repository<DBMessage>, regexDB: Repository<DBMessageRegex>, message: OmitPartialGroupDMChannel<Message<boolean>> | PartialMessage) : Promise<DBMessage | null> {
|
|
||||||
return null
|
|
||||||
}
|
}
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
import { Guild, Message, OmitPartialGroupDMChannel, PartialMessage } from "discord.js";
|
import { Client, Guild, Message, OmitPartialGroupDMChannel, PartialMessage, TextChannel } from "discord.js";
|
||||||
import { DBMessageRegex } from "../storage/entities/DBMessageRegex";
|
import { DBMessageRegex } from "../storage/entities/DBMessageRegex";
|
||||||
import { Repository } from "typeorm";
|
import { Repository } from "typeorm";
|
||||||
import { DBServer } from "../storage/entities/DBServer";
|
import { DBServer } from "../storage/entities/DBServer";
|
||||||
@@ -23,6 +23,7 @@ export async function checkMatchingRegexes(regexes: DBMessageRegex[], testString
|
|||||||
let matchedRegexes: DBMessageRegex[] = []
|
let matchedRegexes: DBMessageRegex[] = []
|
||||||
|
|
||||||
regexes.forEach((regex) => {
|
regexes.forEach((regex) => {
|
||||||
|
console.log(regex.regex)
|
||||||
const regexObj = new RegExp(regex.regex, 'gmi')
|
const regexObj = new RegExp(regex.regex, 'gmi')
|
||||||
|
|
||||||
if(regexObj.test(testString)) {
|
if(regexObj.test(testString)) {
|
||||||
@@ -50,4 +51,30 @@ export async function insertAnyRegexMatches(regexes: DBMessageRegex[], db: Repos
|
|||||||
})
|
})
|
||||||
|
|
||||||
await db.save(matches)
|
await db.save(matches)
|
||||||
|
}
|
||||||
|
|
||||||
|
export async function checkYourProfanity(client: Client, serverDB: Repository<DBServer>, matchDB: Repository<DBMessageRegexMatches>, regexDB: Repository<DBMessageRegex>, message: OmitPartialGroupDMChannel<Message<boolean>> | PartialMessage) {
|
||||||
|
if(message.guild != null && message.content != null) {
|
||||||
|
const regexes : DBMessageRegex[] | null | undefined = await getRegexesForGuild(serverDB, message.guild)
|
||||||
|
console.log(regexes?.length)
|
||||||
|
console.log(message.content)
|
||||||
|
if(regexes != null && regexes != undefined && regexes.length != 0) {
|
||||||
|
const matchingRegexes : DBMessageRegex[] | null = await checkMatchingRegexes(regexes, message.content)
|
||||||
|
|
||||||
|
matchingRegexes?.forEach((regex) => {
|
||||||
|
console.log(`${regex.word}`)
|
||||||
|
})
|
||||||
|
|
||||||
|
if(matchingRegexes != null && matchingRegexes.length != 0) {
|
||||||
|
const channel: TextChannel | null = (await client.channels.fetch(message.channelId)) as TextChannel
|
||||||
|
|
||||||
|
if(channel) {
|
||||||
|
await channel.send(`${message.author} watch your language! Your message has been deleted and this incident has been logged!`)
|
||||||
|
}
|
||||||
|
|
||||||
|
await insertAnyRegexMatches(matchingRegexes, matchDB, message)
|
||||||
|
await message.delete()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -13,17 +13,25 @@ import { config } from "../../config";
|
|||||||
import path from "path";
|
import path from "path";
|
||||||
import { Readable } from "stream"
|
import { Readable } from "stream"
|
||||||
import { finished } from "stream/promises";
|
import { finished } from "stream/promises";
|
||||||
|
import { checkYourProfanity } from "../discord/regex_matching";
|
||||||
|
import { DBServer } from "../storage/entities/DBServer";
|
||||||
|
import { DBMessageRegex } from "../storage/entities/DBMessageRegex";
|
||||||
|
import { DBMessageRegexMatches } from "../storage/entities/DBMessageRegexMatches";
|
||||||
|
|
||||||
export function setupMessageCapture(client: Client,
|
export function setupMessageCapture(client: Client,
|
||||||
|
serverDB: Repository<DBServer>,
|
||||||
channelDB: Repository<DBChannel>,
|
channelDB: Repository<DBChannel>,
|
||||||
userDB: Repository<DBUser>,
|
userDB: Repository<DBUser>,
|
||||||
messageDB: Repository<DBMessage>,
|
messageDB: Repository<DBMessage>,
|
||||||
mccDB: Repository<DBMessageContentChanges>,
|
mccDB: Repository<DBMessageContentChanges>,
|
||||||
maDB: Repository<DBMessageAttachments>
|
maDB: Repository<DBMessageAttachments>,
|
||||||
|
regexesDB: Repository<DBMessageRegex>,
|
||||||
|
matchesDB: Repository<DBMessageRegexMatches>
|
||||||
) {
|
) {
|
||||||
client.on(Events.MessageCreate, async (message) => {
|
client.on(Events.MessageCreate, async (message) => {
|
||||||
console.log("MESSAGE CREATE")
|
console.log("MESSAGE CREATE")
|
||||||
await processMessageCreate(channelDB, userDB, messageDB, maDB, message)
|
await processMessageCreate(channelDB, userDB, messageDB, maDB, message)
|
||||||
|
await checkYourProfanity(client, serverDB, matchesDB, regexesDB, message)
|
||||||
})
|
})
|
||||||
|
|
||||||
client.on(Events.MessageUpdate, async (oldMessage, newMessage) => {
|
client.on(Events.MessageUpdate, async (oldMessage, newMessage) => {
|
||||||
@@ -31,6 +39,7 @@ export function setupMessageCapture(client: Client,
|
|||||||
console.log(`Old Message ID: ${oldMessage.id}`)
|
console.log(`Old Message ID: ${oldMessage.id}`)
|
||||||
console.log(`New Message ID: ${newMessage.id}`)
|
console.log(`New Message ID: ${newMessage.id}`)
|
||||||
await processMessageModify(messageDB, mccDB, maDB, newMessage)
|
await processMessageModify(messageDB, mccDB, maDB, newMessage)
|
||||||
|
await checkYourProfanity(client, serverDB, matchesDB, regexesDB, newMessage)
|
||||||
})
|
})
|
||||||
|
|
||||||
client.on(Events.MessageDelete, async (deletedMessage) => {
|
client.on(Events.MessageDelete, async (deletedMessage) => {
|
||||||
|
|||||||
@@ -31,6 +31,6 @@ export class DBMessage {
|
|||||||
@OneToMany(() => DBMessageAttachments, (ma: DBMessageAttachments) => ma.attachment_snowflake, {nullable: true, cascade: true})
|
@OneToMany(() => DBMessageAttachments, (ma: DBMessageAttachments) => ma.attachment_snowflake, {nullable: true, cascade: true})
|
||||||
attachments: DBMessageAttachments[] | null
|
attachments: DBMessageAttachments[] | null
|
||||||
|
|
||||||
@OneToOne(() => DBMessageRegexMatches, (mrm: DBMessageRegexMatches) => mrm.message, {nullable: true})
|
@OneToMany(() => DBMessageRegexMatches, (mrm: DBMessageRegexMatches) => mrm.message, {nullable: true})
|
||||||
violation_regex: DBMessageRegexMatches | null
|
violation_regex: DBMessageRegexMatches[] | null
|
||||||
}
|
}
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
import { Entity, ManyToOne, OneToOne, PrimaryGeneratedColumn } from "typeorm";
|
import { Entity, ManyToMany, ManyToOne, OneToOne, PrimaryGeneratedColumn } from "typeorm";
|
||||||
import { DBMessage } from "./DBMessage";
|
import { DBMessage } from "./DBMessage";
|
||||||
import { DBMessageRegex } from "./DBMessageRegex";
|
import { DBMessageRegex } from "./DBMessageRegex";
|
||||||
|
|
||||||
@@ -7,7 +7,7 @@ export class DBMessageRegexMatches {
|
|||||||
@PrimaryGeneratedColumn()
|
@PrimaryGeneratedColumn()
|
||||||
message_regex_match_id: number
|
message_regex_match_id: number
|
||||||
|
|
||||||
@OneToOne(() => DBMessage, (message: DBMessage) => message.violation_regex)
|
@ManyToMany(() => DBMessage, (message: DBMessage) => message.violation_regex)
|
||||||
message: DBMessage
|
message: DBMessage
|
||||||
|
|
||||||
@ManyToOne(() => DBMessageRegex, (regex: DBMessageRegex) => regex.matches)
|
@ManyToOne(() => DBMessageRegex, (regex: DBMessageRegex) => regex.matches)
|
||||||
|
|||||||
Reference in New Issue
Block a user