# -*- coding: utf-8 -*-
# Friendly Telegram (telegram userbot)
# Copyright (C) 2018-2020 The Authors
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see .
from .. import loader, utils # pylint: disable=relative-beyond-top-level
import io
from PIL import Image, ImageOps
from telethon.tl.types import DocumentAttributeFilename
import logging
import random
logger = logging.getLogger(__name__)
def register(cb):
cb(SpinnerMod())
@loader.tds
class SpinnerMod(loader.Module):
"""Гавно залупное"""
strings = {
"name": "Spinner"
}
async def client_ready(self, client, db):
self.client = client
@loader.sudo
async def spincmd(self, message):
"""you spin me round..."""
args = utils.get_args(message)
if message.is_reply:
reply_message = await message.get_reply_message()
data = await check_media(reply_message)
if isinstance(data, bool):
await utils.answer(message, "Реплай на пикчу или стикер блять!")
return
else:
await utils.answer(message, "`Реплай на пикчу или стикер блять`")
return
image = io.BytesIO()
await self.client.download_media(data, image)
image = Image.open(image)
image.thumbnail((512, 512), Image.ANTIALIAS)
img = Image.new("RGB", (512, 512), "black")
img.paste(image, ((512-image.width)//2, (512-image.height)//2))
image = img
way = random.choice([1, -1])
frames = []
for i in range(1, 60):
im = image.rotate(i*6*way)
frames.append(im)
frames.remove(im)
image_stream = io.BytesIO()
image_stream.name = "spin.gif"
im.save(image_stream, "GIF", save_all=True, append_images=frames, duration = 10)
image_stream.seek(0)
await utils.answer(message, image_stream)
@loader.sudo
async def epilepsycmd(self, message):
"""ПРИВЕТ ЭПИЛЕТИКИ АХАХАХХА"""
args = utils.get_args(message)
if message.is_reply:
reply_message = await message.get_reply_message()
data = await check_media(reply_message)
if isinstance(data, bool):
await utils.answer(message, "Реплай на пикчу или стикер блять!")
return
else:
await utils.answer(message, "`Реплай на пикчу или стикер блять`")
return
image = io.BytesIO()
await self.client.download_media(data, image)
image = Image.open(image).convert("RGB")
invert = ImageOps.invert(image)
image_stream = io.BytesIO()
image_stream.name = "epilepsy.gif"
image.save(image_stream, "GIF", save_all=True, append_images=[invert], duration = 1)
image_stream.seek(0)
await utils.answer(message, image_stream)
async def check_media(reply_message):
if reply_message and reply_message.media:
if reply_message.photo:
data = reply_message.photo
elif reply_message.document:
if DocumentAttributeFilename(file_name='AnimatedSticker.tgs') in reply_message.media.document.attributes:
return False
if reply_message.gif or reply_message.video or reply_message.audio or reply_message.voice:
return False
data = reply_message.media.document
else:
return False
else:
return False
if not data or data is None:
return False
else:
return data