mirror of
https://github.com/Nick80835/microbot
synced 2025-08-22 18:19:16 +00:00
211 lines
6.4 KiB
Python
211 lines
6.4 KiB
Python
# SPDX-License-Identifier: GPL-2.0-or-later
|
|
|
|
import io
|
|
|
|
from PIL import Image, ImageOps
|
|
from speedtest import Speedtest
|
|
|
|
from ubot import ldr
|
|
|
|
|
|
@ldr.add("speed", owner=True, hide_help=True)
|
|
async def iamspeed(event):
|
|
speed_message = await event.reply("Running speed test…")
|
|
test = Speedtest()
|
|
|
|
test.get_best_server()
|
|
test.download()
|
|
test.upload()
|
|
test.results.share()
|
|
result = test.results.dict()
|
|
|
|
await speed_message.edit(
|
|
f"**Started at:** {result['timestamp']}\n"
|
|
f"**Download:** {speed_convert(result['download'])}\n"
|
|
f"**Upload:** {speed_convert(result['upload'])}\n"
|
|
f"**Ping:** {result['ping']} milliseconds\n"
|
|
f"**ISP:** {result['client']['isp']}"
|
|
)
|
|
|
|
|
|
def speed_convert(size):
|
|
power = 2**10
|
|
zero = 0
|
|
units = {0: '', 1: 'Kilobits/s', 2: 'Megabits/s', 3: 'Gigabits/s', 4: 'Terabits/s'}
|
|
while size > power:
|
|
size /= power
|
|
zero += 1
|
|
return f"{round(size, 2)} {units[zero]}"
|
|
|
|
|
|
@ldr.add("chatid")
|
|
async def chatidgetter(event):
|
|
if event.is_reply:
|
|
reply = await event.get_reply_message()
|
|
if reply.forward and reply.forward.channel_id:
|
|
await event.reply(f"**Channel ID:** {reply.forward.channel_id}")
|
|
return
|
|
chat_id = reply.chat_id
|
|
else:
|
|
chat_id = event.chat_id
|
|
|
|
await event.reply(f"**Chat ID:** {chat_id}")
|
|
|
|
|
|
@ldr.add("userid")
|
|
async def useridgetter(event):
|
|
if event.is_reply:
|
|
reply = await event.get_reply_message()
|
|
user_id = reply.sender_id
|
|
else:
|
|
user_id = event.sender_id
|
|
|
|
await event.reply(f"**User ID:** {user_id}")
|
|
|
|
|
|
@ldr.add("profile")
|
|
async def userprofilegetter(event):
|
|
if event.args:
|
|
try:
|
|
user_entity = await event.client.get_entity(event.args)
|
|
except (ValueError, TypeError):
|
|
await event.reply("The ID or username you provided was invalid!")
|
|
return
|
|
elif event.is_reply:
|
|
reply = await event.get_reply_message()
|
|
reply_id = reply.sender_id
|
|
if reply_id:
|
|
try:
|
|
user_entity = await event.client.get_entity(reply_id)
|
|
except (ValueError, TypeError):
|
|
await event.reply("There was an error getting the user!")
|
|
return
|
|
else:
|
|
await event.reply("The user may have super sneaky privacy settings enabled!")
|
|
return
|
|
else:
|
|
await event.reply("Give me a user ID, username or reply!")
|
|
return
|
|
|
|
userid = user_entity.id
|
|
username = user_entity.username
|
|
userfullname = f"{user_entity.first_name} {user_entity.last_name or ''}"
|
|
|
|
await event.reply(f"**Full Name:** {userfullname}\n**Username:** @{username}\n**User ID:** {userid}")
|
|
|
|
|
|
@ldr.add("stickpng", help="Converts stickers to PNG files.")
|
|
async def stickertopng(event):
|
|
reply = await event.get_reply_message()
|
|
|
|
if reply and reply.sticker:
|
|
sticker_webp_data = reply.sticker
|
|
else:
|
|
await event.reply("Reply to a sticker to get it as a PNG file!")
|
|
return
|
|
|
|
sticker_webp_io = io.BytesIO()
|
|
await event.client.download_media(sticker_webp_data, sticker_webp_io)
|
|
sticker_webp = Image.open(sticker_webp_io)
|
|
sticker_png_io = io.BytesIO()
|
|
sticker_webp.save(sticker_png_io, "PNG")
|
|
sticker_png_io.name = "sticker.png"
|
|
sticker_png_io.seek(0)
|
|
|
|
await event.reply(file=sticker_png_io, force_document=True)
|
|
|
|
|
|
@ldr.add("stickflip", help="Flips stickers horizontally.")
|
|
async def flipsticker(event):
|
|
reply = await event.get_reply_message()
|
|
|
|
if reply and reply.sticker:
|
|
sticker_webp_data = reply.sticker
|
|
else:
|
|
await event.reply("Reply to a sticker to flip that bitch!")
|
|
return
|
|
|
|
sticker_webp_io = io.BytesIO()
|
|
await event.client.download_media(sticker_webp_data, sticker_webp_io)
|
|
sticker_webp = Image.open(sticker_webp_io)
|
|
sticker_webp = ImageOps.mirror(sticker_webp)
|
|
sticker_flipped_io = io.BytesIO()
|
|
sticker_webp.save(sticker_flipped_io, "WebP")
|
|
sticker_flipped_io.name = "sticker.webp"
|
|
sticker_flipped_io.seek(0)
|
|
|
|
await event.reply(file=sticker_flipped_io)
|
|
|
|
|
|
@ldr.add("stickimg", help="Converts images to sticker sized PNG files.")
|
|
async def createsticker(event):
|
|
if event.is_reply:
|
|
reply_message = await event.get_reply_message()
|
|
data = await ldr.get_image(reply_message)
|
|
|
|
if not data:
|
|
await event.reply("Reply to or caption an image to make it sticker-sized!")
|
|
return
|
|
else:
|
|
data = await ldr.get_image(event)
|
|
|
|
if not data:
|
|
await event.reply("Reply to or caption an image to make it sticker-sized!")
|
|
return
|
|
|
|
image_io = io.BytesIO()
|
|
await event.client.download_media(data, image_io)
|
|
sticker_png = Image.open(image_io)
|
|
sticker_png = sticker_png.crop(sticker_png.getbbox())
|
|
|
|
final_width = 512
|
|
final_height = 512
|
|
|
|
if sticker_png.width > sticker_png.height:
|
|
final_height = 512 * (sticker_png.height / sticker_png.width)
|
|
elif sticker_png.width < sticker_png.height:
|
|
final_width = 512 * (sticker_png.width / sticker_png.height)
|
|
|
|
sticker_png = ImageOps.fit(sticker_png, (int(final_width), int(final_height)))
|
|
sticker_new_io = io.BytesIO()
|
|
sticker_png.save(sticker_new_io, "PNG")
|
|
sticker_new_io.name = "sticker.png"
|
|
sticker_new_io.seek(0)
|
|
|
|
await event.reply(file=sticker_new_io, force_document=True)
|
|
|
|
|
|
@ldr.add("compress")
|
|
async def compressor(event):
|
|
reply = await event.get_reply_message()
|
|
|
|
try:
|
|
compression_quality = int(event.args)
|
|
if compression_quality < 0:
|
|
compression_quality = 0
|
|
elif compression_quality > 100:
|
|
compression_quality = 100
|
|
except ValueError:
|
|
compression_quality = 15
|
|
|
|
if reply and reply.sticker:
|
|
sticker_webp_data = reply.sticker
|
|
else:
|
|
await event.reply("Reply to a sticker to compress that bitch!")
|
|
return
|
|
|
|
sticker_io = io.BytesIO()
|
|
await event.client.download_media(sticker_webp_data, sticker_io)
|
|
|
|
sticker_image = Image.open(sticker_io)
|
|
sticker_image = sticker_image.convert("RGB")
|
|
sticker_io = io.BytesIO()
|
|
sticker_image.save(sticker_io, "JPEG", quality=compression_quality)
|
|
sticker_image = Image.open(sticker_io)
|
|
sticker_io = io.BytesIO()
|
|
sticker_image.save(sticker_io, "WebP", quality=99)
|
|
sticker_io.seek(0)
|
|
sticker_io.name = "sticker.webp"
|
|
|
|
await event.reply(file=sticker_io)
|