Added MatchWordCondition
This commit is contained in:
86
bot.py
86
bot.py
@@ -17,16 +17,33 @@ class RandomCondition(MessageCondition):
|
|||||||
return True
|
return True
|
||||||
|
|
||||||
class TextCondition(MessageCondition):
|
class TextCondition(MessageCondition):
|
||||||
def __init__(self, text:str):
|
def __init__(self, text:str, filter_whitespace:bool = True, filter_case:bool = True, filter_punctuation:bool = True):
|
||||||
self.text = text
|
self.text = text
|
||||||
|
self.filter_whitespace = filter_whitespace
|
||||||
|
self.filter_case = filter_case
|
||||||
|
self.filter_punctuation = filter_punctuation
|
||||||
|
|
||||||
def check_condition(self, message):
|
def check_condition(self, message):
|
||||||
processed = process_string(message.content)
|
processed = process_string(message.content, self.filter_whitespace, self.filter_case, self.filter_punctuation)
|
||||||
if self.text in processed:
|
if self.text in processed:
|
||||||
return True
|
return True
|
||||||
|
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
class MatchWordCondition(MessageCondition):
|
||||||
|
def __init__(self, text:str, filter_case:bool = True, filter_punctuation:bool = True):
|
||||||
|
self.text = text
|
||||||
|
self.filter_case = filter_case
|
||||||
|
self.filter_punctuation = filter_punctuation
|
||||||
|
|
||||||
|
def check_condition(self, message):
|
||||||
|
processed = process_string(message.content, False, self.filter_case, self.filter_punctuation)
|
||||||
|
for word in processed.split():
|
||||||
|
if word == self.text:
|
||||||
|
return True
|
||||||
|
|
||||||
|
return False
|
||||||
|
|
||||||
class AndCondition(MessageCondition):
|
class AndCondition(MessageCondition):
|
||||||
def __init__(self, conditions:list[MessageCondition]):
|
def __init__(self, conditions:list[MessageCondition]):
|
||||||
self.conditions = conditions
|
self.conditions = conditions
|
||||||
@@ -74,12 +91,15 @@ class MessageHandler:
|
|||||||
self.conditions = conditions
|
self.conditions = conditions
|
||||||
self.responses = responses
|
self.responses = responses
|
||||||
|
|
||||||
def handle_message(self, message:discord.Message):
|
def handle_message(self, message:discord.Message) -> bool:
|
||||||
|
handled = False
|
||||||
for condition in self.conditions:
|
for condition in self.conditions:
|
||||||
if condition.check_condition(message):
|
if condition.check_condition(message):
|
||||||
for response in self.responses:
|
for response in self.responses:
|
||||||
response.respond(message)
|
response.respond(message)
|
||||||
return
|
handled = True
|
||||||
|
|
||||||
|
return handled
|
||||||
|
|
||||||
less_than_conditions = [
|
less_than_conditions = [
|
||||||
TextCondition("lessthan"),
|
TextCondition("lessthan"),
|
||||||
@@ -160,49 +180,13 @@ handlers:list[MessageHandler] = [
|
|||||||
),
|
),
|
||||||
MessageHandler(
|
MessageHandler(
|
||||||
[
|
[
|
||||||
TextCondition("late")
|
MatchWordCondition("late")
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
TextResponse("https://tenor.com/view/warframe-whispers-in-the-wall-tenno-entrati-1999-gif-16943765476869672917"),
|
TextResponse("https://tenor.com/view/warframe-whispers-in-the-wall-tenno-entrati-1999-gif-16943765476869672917"),
|
||||||
EmojiResponse("albrecht_entrati")
|
EmojiResponse("albrecht_entrati")
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
# RandomTrigger(0.5,
|
|
||||||
# TextTrigger([
|
|
||||||
# "lessthan",
|
|
||||||
# "focus",
|
|
||||||
# "hypnosis",
|
|
||||||
# "didntnotice",
|
|
||||||
# "evennotice",
|
|
||||||
# "oblivion",
|
|
||||||
# "barelyrecognize",
|
|
||||||
# "justify"
|
|
||||||
# ], "WHAT ARE YOU WAITING FOR?")
|
|
||||||
# ),
|
|
||||||
# EmojiTrigger([
|
|
||||||
# "lessthan",
|
|
||||||
# "focus",
|
|
||||||
# "hypnosis",
|
|
||||||
# "didntnotice",
|
|
||||||
# "evennotice",
|
|
||||||
# "oblivion",
|
|
||||||
# "recognize",
|
|
||||||
# "justify"
|
|
||||||
# ], "lessthan"),
|
|
||||||
# TextTrigger([
|
|
||||||
# "pieces",
|
|
||||||
# "peices"
|
|
||||||
# ], "Put. It. Together."),
|
|
||||||
# RandomTrigger(0.25,
|
|
||||||
# TextTrigger([
|
|
||||||
# "annoy"
|
|
||||||
# ], "Stop annoying yourself.")
|
|
||||||
# ),
|
|
||||||
# RandomTrigger(0.15,
|
|
||||||
# TextTrigger([
|
|
||||||
# "bot"
|
|
||||||
# ], "I'm not a bot.")
|
|
||||||
# ),
|
|
||||||
]
|
]
|
||||||
|
|
||||||
dotenv.load_dotenv(".env")
|
dotenv.load_dotenv(".env")
|
||||||
@@ -225,13 +209,21 @@ async def on_message(message):
|
|||||||
print(f"Message from {message.author}: {message.content}")
|
print(f"Message from {message.author}: {message.content}")
|
||||||
|
|
||||||
for handler in handlers:
|
for handler in handlers:
|
||||||
handler.handle_message(message)
|
if handler.handle_message(message):
|
||||||
|
return
|
||||||
|
|
||||||
|
def process_string(string:str, filter_whitespace:bool = True, filter_case:bool = True, filter_punctuation:bool = True) -> str:
|
||||||
|
if filter_whitespace:
|
||||||
|
string = "".join(string.split())
|
||||||
|
|
||||||
|
if filter_case:
|
||||||
|
string = string.lower()
|
||||||
|
|
||||||
|
if filter_punctuation:
|
||||||
|
characters_to_remove = ",.-_;:'\"?\\/|()*&^%$#@!"
|
||||||
|
for char in characters_to_remove:
|
||||||
|
string = string.replace(char, "")
|
||||||
|
|
||||||
def process_string(string:str) -> str:
|
|
||||||
characters_to_remove = ",.-_;:'\"?\\/|()*&^%$#@!"
|
|
||||||
string = "".join(string.lower().split())
|
|
||||||
for char in characters_to_remove:
|
|
||||||
string = string.replace(char, "")
|
|
||||||
return string
|
return string
|
||||||
|
|
||||||
client.run(api_key)
|
client.run(api_key)
|
||||||
Reference in New Issue
Block a user