Files
sc_annoy_bot/bot.py
2025-11-24 15:39:11 -05:00

121 lines
3.3 KiB
Python

import discord
import dotenv
import os
import asyncio
import random
# text_triggers = {
# "lessthan": "WHAT ARE YOU WAITING FOR?",
# "didn'tnotice": "WHAT ARE YOU WAITING FOR?",
# "didntnotice": "WHAT ARE YOU WAITING FOR?",
# "didn'tevennotice": "WHAT ARE YOU WAITING FOR?",
# "didntevennotice": "WHAT ARE YOU WAITING FOR?",
# "oblivion": "WHAT ARE YOU WAITING FOR?",
# "pieces": "Put. It. Together."
# }
class MessageTrigger:
def handle_message(self, message:discord.Message):
pass
class TextTrigger(MessageTrigger):
def __init__(self, triggers:list[str], response:str):
self.triggers = triggers
self.response = response
def handle_message(self, message:discord.Message):
processed_string = process_string(message.content)
for trigger in self.triggers:
if trigger in processed_string:
asyncio.create_task(message.reply(self.response))
return
class RandomTrigger(MessageTrigger):
def __init__(self, chance:float, trigger:MessageTrigger):
self.chance = chance
self.trigger = trigger
def handle_message(self, message):
if random.random() > self.chance:
return
self.trigger.handle_message(message)
class EmojiTrigger(MessageTrigger):
def __init__(self, triggers:list[str], emoji_names:list[str]):
self.triggers = triggers
self.emoji_names = emoji_names
def handle_message(self, message:discord.Message):
processed_string = process_string(message.content)
for trigger in self.triggers:
if trigger in processed_string:
for emoji in message.guild.emojis:
if emoji.name in self.emoji_names:
asyncio.create_task(message.add_reaction(emoji))
return
triggers:list[MessageTrigger] = [
RandomTrigger(0.5,
TextTrigger([
"lessthan",
"focus",
"hypnosis",
"didntnotice",
"didntevennotice",
"oblivion"
], "WHAT ARE YOU WAITING FOR?")
),
EmojiTrigger([
"lessthan",
"focus",
"hypnosis",
"didntnotice",
"didntevennotice",
"oblivion"
], "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")
api_key = os.getenv("DISCORD_BOT_TOKEN")
intents = discord.Intents.default()
intents.message_content = True
client = discord.Client(intents=intents)
@client.event
async def on_ready():
print(f"Logged in as: {client.user}")
@client.event
async def on_message(message):
if message.author == client.user:
return
print(f"Message from {message.author}: {message.content}")
for trigger in triggers:
trigger.handle_message(message)
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
client.run(api_key)