|
| 1 | +# Copyright (C) 2025 by MrGhostsx@Github, < https://github.com/TechyShreyansh>. |
| 2 | +# |
| 3 | +# This file is part of < https://github.com/TechyShreyansh > project, |
| 4 | +# and is released under the MIT License. |
| 5 | +# Please see < https://github.com/TechyShreyansh/blob/master/LICENSE > |
| 6 | +# |
| 7 | +# All rights reserved. |
| 8 | +import json |
| 9 | + |
| 10 | +import requests |
| 11 | +from pyrogram import Client, filters |
| 12 | +from pyrogram.types import Message |
| 13 | + |
| 14 | +from utils.misc import modules_help, prefix |
| 15 | + |
| 16 | + |
| 17 | +HEADERS = { |
| 18 | + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.104 Safari/537.36", |
| 19 | + "content-type": "application/json", |
| 20 | +} |
| 21 | + |
| 22 | + |
| 23 | +async def p_paste(message, extension=None): |
| 24 | + siteurl = "https://pasty.lus.pm/api/v1/pastes" |
| 25 | + data = {"content": message} |
| 26 | + try: |
| 27 | + response = requests.post(url=siteurl, data=json.dumps(data), headers=HEADERS) |
| 28 | + except Exception as e: |
| 29 | + return {"error": str(e)} |
| 30 | + if response.ok: |
| 31 | + response = response.json() |
| 32 | + purl = ( |
| 33 | + f"https://pasty.lus.pm/{response['id']}.{extension}" |
| 34 | + if extension |
| 35 | + else f"https://pasty.lus.pm/{response['id']}.txt" |
| 36 | + ) |
| 37 | + return { |
| 38 | + "url": purl, |
| 39 | + "raw": f"https://pasty.lus.pm/{response['id']}/raw", |
| 40 | + "bin": "Pasty", |
| 41 | + } |
| 42 | + return {"error": "Unable to reach pasty.lus.pm"} |
| 43 | + |
| 44 | + |
| 45 | +async def s_paste(message, extension="txt"): |
| 46 | + siteurl = "https://spaceb.in/api/v1/documents/" |
| 47 | + try: |
| 48 | + response = requests.post( |
| 49 | + siteurl, data={"content": message, "extension": extension} |
| 50 | + ) |
| 51 | + except Exception as e: |
| 52 | + return {"error": str(e)} |
| 53 | + if response.ok: |
| 54 | + response = response.json() |
| 55 | + if response["error"] != "" and response["status"] < 400: |
| 56 | + return {"error": response["error"]} |
| 57 | + return { |
| 58 | + "url": f"https://spaceb.in/{response['payload']['id']}", |
| 59 | + "raw": f"{siteurl}{response['payload']['id']}/raw", |
| 60 | + "bin": "Spacebin", |
| 61 | + } |
| 62 | + return {"error": "Unable to reach spacebin."} |
| 63 | + |
| 64 | + |
| 65 | +async def n_paste(message, extension=None): |
| 66 | + siteurl = "https://nekobin.com/api/documents" |
| 67 | + data = {"content": message} |
| 68 | + try: |
| 69 | + response = requests.post(url=siteurl, data=json.dumps(data), headers=HEADERS) |
| 70 | + except Exception as e: |
| 71 | + return {"error": str(e)} |
| 72 | + if response.ok: |
| 73 | + response = response.json() |
| 74 | + purl = ( |
| 75 | + f"nekobin.com/{response['result']['key']}.{extension}" |
| 76 | + if extension |
| 77 | + else f"nekobin.com/{response['result']['key']}" |
| 78 | + ) |
| 79 | + return { |
| 80 | + "url": purl, |
| 81 | + "raw": f"nekobin.com/raw/{response['result']['key']}", |
| 82 | + "bin": "Neko", |
| 83 | + } |
| 84 | + return {"error": "Unable to reach nekobin."} |
| 85 | + |
| 86 | + |
| 87 | +async def d_paste(message, extension=None): |
| 88 | + siteurl = "http://catbin.up.railway.app/documents" |
| 89 | + data = {"content": message} |
| 90 | + try: |
| 91 | + response = requests.post(url=siteurl, data=json.dumps(data), headers=HEADERS) |
| 92 | + except Exception as e: |
| 93 | + return {"error": str(e)} |
| 94 | + if response.ok: |
| 95 | + response = response.json() |
| 96 | + purl = ( |
| 97 | + f"http://catbin.up.railway.app/{response['key']}.{extension}" |
| 98 | + if extension |
| 99 | + else f"http://catbin.up.railway.app/{response['key']}" |
| 100 | + ) |
| 101 | + return { |
| 102 | + "url": purl, |
| 103 | + "raw": f"http://catbin.up.railway.app/raw/{response['key']}", |
| 104 | + "bin": "Dog", |
| 105 | + } |
| 106 | + return {"error": "Unable to reach dogbin."} |
| 107 | + |
| 108 | + |
| 109 | +async def pastetext(text_to_print, pastetype=None, extension=None): |
| 110 | + response = {"error": "something went wrong"} |
| 111 | + if pastetype is not None: |
| 112 | + if pastetype == "p": |
| 113 | + response = await p_paste(text_to_print, extension) |
| 114 | + elif pastetype == "s" and extension: |
| 115 | + response = await s_paste(text_to_print, extension) |
| 116 | + elif pastetype == "s": |
| 117 | + response = await s_paste(text_to_print) |
| 118 | + elif pastetype == "d": |
| 119 | + response = await d_paste(text_to_print, extension) |
| 120 | + elif pastetype == "n": |
| 121 | + response = await n_paste(text_to_print, extension) |
| 122 | + if "error" in response: |
| 123 | + response = await p_paste(text_to_print, extension) |
| 124 | + if "error" in response: |
| 125 | + response = await n_paste(text_to_print, extension) |
| 126 | + if "error" in response: |
| 127 | + if extension: |
| 128 | + response = await s_paste(text_to_print, extension) |
| 129 | + else: |
| 130 | + response = await s_paste(text_to_print) |
| 131 | + if "error" in response: |
| 132 | + response = await d_paste(text_to_print, extension) |
| 133 | + return response |
| 134 | + |
| 135 | + |
| 136 | +@Client.on_message(filters.command("pasty", prefix) & filters.me) |
| 137 | +async def pasty_cmd(_, message: Message): |
| 138 | + """Paste text to various pastebin services""" |
| 139 | + reply = message.reply_to_message |
| 140 | + args = message.text.split(maxsplit=2) |
| 141 | + |
| 142 | + if len(args) < 2 and not reply: |
| 143 | + await message.edit("<b>Please provide text or reply to a message</b>") |
| 144 | + return |
| 145 | + |
| 146 | + pastetype = None |
| 147 | + extension = None |
| 148 | + |
| 149 | + if len(args) >= 2: |
| 150 | + if args[1].startswith(("p", "s", "n", "d")): |
| 151 | + pastetype = args[1][0] |
| 152 | + if "." in args[1]: |
| 153 | + extension = args[1].split(".", 1)[1] |
| 154 | + |
| 155 | + text = "" |
| 156 | + if reply: |
| 157 | + if reply.text: |
| 158 | + text = reply.text |
| 159 | + elif reply.caption: |
| 160 | + text = reply.caption |
| 161 | + elif reply.document: |
| 162 | + try: |
| 163 | + doc = await reply.download() |
| 164 | + with open(doc, "r") as f: |
| 165 | + text = f.read() |
| 166 | + except Exception as e: |
| 167 | + await message.edit(f"<b>Error reading document: {e}</b>") |
| 168 | + return |
| 169 | + else: |
| 170 | + text = args[-1] |
| 171 | + |
| 172 | + if not text: |
| 173 | + await message.edit("<b>No text found to paste</b>") |
| 174 | + return |
| 175 | + |
| 176 | + result = await pastetext(text, pastetype, extension) |
| 177 | + |
| 178 | + if "error" in result: |
| 179 | + await message.edit(f"<b>Error: {result['error']}</b>") |
| 180 | + else: |
| 181 | + await message.edit( |
| 182 | + f"<b>Pasted to {result['bin']}:\n" |
| 183 | + f"• <a href='{result['url']}'>Link</a>\n" |
| 184 | + f"• <a href='{result['raw']}'>Raw</a></b>", |
| 185 | + disable_web_page_preview=True, |
| 186 | + ) |
| 187 | + |
| 188 | + |
| 189 | +modules_help["pasty"] = { |
| 190 | + "pasty [p/s/n/d][.ext] [text/reply]": "Paste text to various pastebin services\n" |
| 191 | + "p = pasty, s = spacebin, n = nekobin, d = dogbin\n" |
| 192 | + "Example: .pasty p.py (for python syntax highlighting)" |
| 193 | +} |
0 commit comments