2023-11-15 06:12:38 +00:00
|
|
|
|
|
|
|
#!/usr/bin/env python
|
|
|
|
# encoding: utf-8
|
|
|
|
|
|
|
|
import os
|
|
|
|
import discord
|
|
|
|
from discord.ext import commands
|
|
|
|
from discord.ext import tasks
|
|
|
|
from PIL import Image, ImageSequence
|
|
|
|
import string
|
|
|
|
|
|
|
|
|
|
|
|
def wheres_marsey(message_text): #returns list of potential marsey names
|
|
|
|
marsey_names = []
|
|
|
|
message_text = message_text.lower().split('!') #convert message to all lowercase and checks for "!"
|
|
|
|
for marsey_name in message_text:
|
|
|
|
marsey_name = marsey_name.translate(str.maketrans('', '', string.punctuation)) #strip punctuation
|
|
|
|
marsey_name = marsey_name.split(' ')
|
|
|
|
marsey_names.append(marsey_name[0]) #only look for first word afer "!"
|
|
|
|
return [x for x in marsey_names[1:] if x] #ignore empty strings
|
|
|
|
|
|
|
|
|
|
|
|
def is_animated(file_path): #check if webp is animated or static
|
|
|
|
try:
|
|
|
|
media = Image.open(file_path)
|
|
|
|
Index = 0
|
|
|
|
for Frame in ImageSequence.Iterator(media): #check number of frames
|
|
|
|
Index += 1
|
|
|
|
if Index > 1: #if more than one frame return True
|
|
|
|
return True
|
|
|
|
else:
|
|
|
|
return False
|
|
|
|
except:
|
|
|
|
return False
|
|
|
|
|
2023-11-15 09:37:48 +00:00
|
|
|
def webp2gif(abs_media_path): #convert webp to gif
|
|
|
|
media = Image.open(abs_media_path) #path of webp file
|
2023-11-15 06:12:38 +00:00
|
|
|
media.info.pop('background', None)
|
|
|
|
abs_media_path = abs_media_path[:-4]+'gif' #change the path from webp to gif
|
|
|
|
media.save(abs_media_path, 'gif', optimize=False, save_all=True, disposal=2) #temp save a gif file (there might be a better way but i lazy :marseyteehee:)
|
|
|
|
return abs_media_path #return gif path
|
|
|
|
|
|
|
|
|
|
|
|
client = commands.Bot(command_prefix = '!')
|
|
|
|
|
|
|
|
@client.event #print ready in command line to verify bot initiation
|
|
|
|
async def on_ready():
|
|
|
|
print('ready')
|
|
|
|
|
|
|
|
@client.event
|
|
|
|
async def on_message(message): #bot reads every message in server
|
|
|
|
|
|
|
|
message_text = message.content
|
|
|
|
|
|
|
|
marsey_names = wheres_marsey(message_text) #make list of called marseys
|
|
|
|
|
|
|
|
marsey_queue = [] #empty list of marseys to send
|
|
|
|
|
|
|
|
for marsey_name in marsey_names:
|
|
|
|
|
|
|
|
#find directory of marsey
|
|
|
|
bot_dir = os.path.dirname(__file__)
|
|
|
|
rel_marsey_path = "emojis/"+marsey_name+".webp"
|
|
|
|
abs_marsey_path = os.path.join(bot_dir, rel_marsey_path)
|
|
|
|
|
|
|
|
flag = 0 #flag used in webp to gif file conversion
|
|
|
|
|
|
|
|
if os.path.isfile(abs_marsey_path): #only continue if marsey exists
|
|
|
|
|
|
|
|
#if marsey is animated, turn it into a gif
|
|
|
|
if is_animated(abs_marsey_path) is True:
|
2023-11-15 09:37:48 +00:00
|
|
|
abs_marsey_path = webp2gif(abs_marsey_path)
|
2023-11-15 06:12:38 +00:00
|
|
|
flag = 1 #flag for deleting temp gif file after sent
|
|
|
|
|
|
|
|
#open file and add it to send queue
|
|
|
|
with open(abs_marsey_path, 'rb') as f:
|
|
|
|
marsey_queue.append(discord.File(f))
|
|
|
|
|
|
|
|
#delete temp file
|
|
|
|
if flag == 1:
|
|
|
|
os.remove(abs_marsey_path)
|
|
|
|
flag = 0 #reset flag
|
|
|
|
|
|
|
|
if marsey_queue: #only send marsey(s)
|
|
|
|
await message.channel.send(files=marsey_queue)
|
|
|
|
|
|
|
|
#token
|
|
|
|
with open('discord_token.txt') as f:
|
|
|
|
discord_token = f.readline()
|
|
|
|
client.run(discord_token)
|