diff --git a/marsey_bot.py b/marsey_bot.py index 62ff3a5..f1455d4 100644 --- a/marsey_bot.py +++ b/marsey_bot.py @@ -1,90 +1,90 @@ - -#!/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 - -def webm2gif(abs_media_path): #convert webp to gif - media = Image.open(abs_media_path) #path of webm file - 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: - abs_marsey_path = webm2gif(abs_marsey_path) - 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) + +#!/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 + +def webm2gif(abs_media_path): #convert webp to gif + media = Image.open(abs_media_path) #path of webm file + 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: + abs_marsey_path = webm2gif(abs_marsey_path) + 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)