def clear(ctx): if not functions.has_permission(ctx): return handler.error_handler(ctx, "nopermission", ctx.command) try: ctx.args[0] = int(ctx.args[0]) + 1 except: return handler.error_handler(ctx, "arguments", "clear (ilość wiadomości 1-99) [osoba]") if not len(ctx.args) <= 1 and int(ctx.args[0]) > 100: return handler.error_handler(ctx, "arguments", "clear (ilość wiadomości 1-99) [osoba]") messages = list(map(lambda x: x["id"], discord.get_messages(ctx.data["channel_id"], ctx.args[0]))) if len(ctx.data["mentions"]) == 1: x = [] ctx.args[0] = int(ctx.args[0]) - 1 for message in messages: message = discord.get_message(ctx.data["channel_id"], message) if "author" in message and message["author"]["id"] == ctx.data["mentions"][0]["id"]: x.append(message["id"]) messages = x message = f"Usunięto `{ctx.args[0]}` wiadomości użytkownika `{ctx.data['mentions'][0]['username']}`" else: message = f"Usunięto `{ctx.args[0]}` wiadomości" bulk_delete = discord.bulk_delete_messages(ctx.data["channel_id"], { "messages": messages }) if not bulk_delete.status_code == 204: return handler.error_handler(ctx, 8) ctx.send(message)
def decode(ctx): if not functions.has_permission(ctx): return handler.error_handler(ctx, "nopermission", ctx.command) ctx.args = " ".join(ctx.args) if not ctx.args: return handler.error_handler( ctx, "arguments", "encode (tekst wyświetlany) | (tekst ukryty)") text = "" letter = "" chars = {value: key for key, value in arrays._characters.items()} for char in ctx.args: if char in chars or char == "\u200f": if char == "\u200f": text += chars[letter] letter = "" else: letter += char if not text: return ctx.send("W tej wiadomości nie ma ukrytego tekstu") ctx.send("`" + text + "`")
def encode(ctx): if not functions.has_permission(ctx): return handler.error_handler(ctx, "nopermission", ctx.command) ctx.args = " ".join(ctx.args).lower().split(" | ") if not len(ctx.args) == 2: return handler.error_handler( ctx, "arguments", "encode (tekst wyświetlany) | (tekst ukryty)") text = ctx.args[0][0] other = { "ą": "a", "ś": "s", "ó": "o", "ł": "l", "ę": "e", "ń": "n", "ź": "z", "ż": "z", "ć": "c" } for char in ctx.args[1]: if char in other: ctx.args[1] = ctx.args[1].replace(char, other[char]) for char in ctx.args[1]: if char in arrays._characters: text += arrays._characters[char] + "\u200f" text += ctx.args[0][1:] ctx.send("`" + text + "`")
def todo(ctx): if not ctx.args: return ctx.send( embed={ "title": "Komendy todo:", "description": "> `todo add (tekst)`, `todo view [osoba]`, `todo remove (id)`, `todo clear`", "color": 0xe74c3c }) user = ctx.data["author"]["id"] users = functions.read_json("users") if not user in users: users[user] = {} if not "todo" in users[user]: users[user]["todo"] = [] if ctx.args[0] == "add": ctx.args = " ".join(ctx.args[1:]) if len(ctx.args) > 100: return handler.error_handler(ctx, "toolongtext", 100) users[user]["todo"].append(ctx.args) ctx.send("Dodano do todo") elif ctx.args[0] == "view": if len(ctx.data["mentions"]) == 1: user = ctx.data["mentions"][0]["id"] user = discord.get_user(user) ctx.send( embed={ "title": f"Todo użytkownika {user['username']}:", "description": "\n".join([ f"{users[user['id']]['todo'].index(i)}. {i}" for i in users[user["id"]]["todo"] ]), "color": 0xe74c3c }) elif ctx.args[0] == "remove": if not len(ctx.args) == 2: return handler.error_handler(ctx, "arguments", "todo remove (id)") del users[user]["todo"][int(ctx.args[1])] ctx.send("Usunięto z todo") elif ctx.args[0] == "clear": del users[user]["todo"] ctx.send("Wyczyszczono todo") functions.write_json("users", users)
def _ascii(ctx): if not functions.has_permission(ctx): return handler.error_handler(ctx, "nopermission", ctx.command) if not ctx.args: return handler.error_handler(ctx, "arguments", "ascii (tekst)") ctx.send("```" + pyfiglet.Figlet().renderText(" ".join(ctx.args)) + "```")
def rnumber(ctx): if not functions.has_permission(ctx): return handler.error_handler(ctx, "nopermission", ctx.command) if not len(ctx.args) == 2: return handler.error_handler(ctx, "arguments", "rnumber (od) (do)") ctx.args = list(map(lambda x: int(x), ctx.args)) ctx.send(random.randint(ctx.args[0], ctx.args[1]))
def meme(ctx): if not functions.has_permission(ctx): return handler.error_handler(ctx, "nopermission", ctx.command) channel = discord.get_channel(ctx.data["channel_id"]) if not channel["nsfw"]: return handler.error_handler(ctx, "nsfw") url = ctx.requests.get("https://cenzurabot.pl/api/memes/jbzd").json() ctx.send(url["meme"])
def pm(ctx): permission = "ADMINISTRATOR" if not (permissions.has_permission(ctx, ctx.data["author"]["id"], permission) or (ctx.data["author"]["id"] == ctx.guilds[ctx.data["guild_id"]]["owner_id"])): return handler.error_handler(ctx, "nopermission", permission) if not (ctx.args and ctx.data["mention_roles"]): return ctx.send(embed = { "title": "Komendy pm:", "description": "> `pm add (rola) (komenda)`, `pm remove (rola) (komenda)`, `pm delete (rola)`", "color": 0xe74c3c }) blacklist = ["help", "botstats", "profile", "todo", "eval", "reload"] guild = ctx.data["guild_id"] guilds = functions.read_json("guilds") if ctx.args[0] == "add": if not ctx.args[2] in ctx.commands: return handler.error_handler(ctx, "notfound") elif ctx.args[2] in blacklist: return ctx.send("Tej komendy nie można dodać/odebrać!") if not ctx.data["mention_roles"][0] in guilds[guild]["permissions"]: guilds[guild]["permissions"][ctx.data["mention_roles"][0]] = {} guilds[guild]["permissions"][ctx.data["mention_roles"][0]][ctx.args[2]] = True ctx.send("Dodano permisje") elif ctx.args[0] == "remove": if not ctx.args[2] in ctx.commands: return handler.error_handler(ctx, "notfound") elif ctx.args[2] in blacklist: return ctx.send("Tej komendy nie można dodać/odebrać!") if not ctx.data["mention_roles"][0] in guilds[guild]["permissions"]: guilds[guild]["permissions"][ctx.data["mention_roles"][0]] = {} guilds[guild]["permissions"][ctx.data["mention_roles"][0]][ctx.args[2]] = False ctx.send("Usunięto permisje") elif ctx.args[0] == "delete": del guilds[guild]["permissions"][ctx.data["mention_roles"][0]] ctx.send("Usunięto role") else: return ctx.send(embed = { "title": "Komendy pm:", "description": "> `pm add (rola) (komenda)`, `pm remove (rola) (komenda)`, `pm delete (rola)`", "color": 0xe74c3c }) functions.write_json("guilds", guilds)
def google(ctx): if not functions.has_permission(ctx): return handler.error_handler(ctx, "nopermission", ctx.command) ctx.args = " ".join(ctx.args) if not ctx.args: return handler.error_handler(ctx, "arguments", "google (zapytanie)") ctx.send( f"https://google.com/search?q={urllib.parse.quote_plus(ctx.args)}")
def rchoice(ctx): if not functions.has_permission(ctx): return handler.error_handler(ctx, "nopermission", ctx.command) ctx.args = " ".join(ctx.args) ctx.args = ctx.args.split(" | ") if not len(ctx.args) >= 2: return handler.error_handler(ctx, "arguments", "rchoice (a) | (b) | [c] itd.") ctx.send(random.choice(ctx.args))
def hug(ctx): if not functions.has_permission(ctx): return handler.error_handler(ctx, "nopermission", ctx.command) if not len(ctx.data["mentions"]) == 1: return handler.error_handler(ctx, "arguments", "hug (osoba)") image_url = ctx.requests.get( "https://nekos.life/api/hug").json()["url"] image = ctx.requests.get(image_url).content ctx.send( f"**{ctx.data['author']['username']}** przytulił **{ctx.data['mentions'][0]['username']}**!", files=[("hug.gif", image)])
def removewarnsevent(ctx): if not functions.has_permission(ctx): return handler.error_handler(ctx, "nopermission", ctx.command) if not len(ctx.args) == 1 or ctx.args[0] not in ["kick", "ban", "mute"]: return handler.error_handler(ctx, "arguments", "warnsevent (kick/ban/mute)") guild = ctx.data["guild_id"] guilds = functions.read_json("guilds") del guilds[guild]["warnsevent"][ctx.args[0]] ctx.send("Usunięto event") functions.write_json("guilds", guilds)
def gay(ctx): if not functions.has_permission(ctx): return handler.error_handler(ctx, "nopermission", ctx.command) if not ctx.data["mentions"]: user = ctx.data["author"]["id"], ctx.data["author"]["avatar"] else: user = ctx.data["mentions"][0]["id"], ctx.data["mentions"][0][ "avatar"] content = ctx.requests.get( f"https://cdn.discordapp.com/avatars/{user[0]}/{user[1]}.png?size=2048" ).content open("images/image.png", "wb").write(content) image = Image.open("images/image.png").convert("RGBA") lgbt = Image.open("images/lgbt.png").convert("RGBA") image = ImageOps.fit(image, (512, 512)) lgbt = ImageOps.fit(lgbt, (512, 512)) mask = Image.new("L", (512, 512), 128) avatar = Image.composite(image, lgbt, mask) avatar.save("images/gay.png") ctx.send(files=[("gay.png", open("images/gay.png", "rb"))])
def _eval(ctx): if not ctx.data["author"]["id"] in config.owners: return handler.error_handler(ctx, "nopermission", ctx.command) ctx.args = " ".join(ctx.args) code = "\n".join(f" {x}" for x in ctx.args.splitlines()) body = f"def elo():\n{code}" parsed = ast.parse(body) body = parsed.body[0].body insert_returns(body) env2 = {"ctx": ctx, "bot": bot, "discord": discord} env.update(env2) exec(compile(parsed, filename="siema", mode="exec"), env) try: result = eval("elo()", env) except Exception: result = traceback.format_exc().splitlines()[-1] response = ctx.send(result) if not response.status_code == 200: ctx.send(f"```{response.json()}```")
def panda(ctx): if not functions.has_permission(ctx): return handler.error_handler(ctx, "nopermission", ctx.command) image_url = ctx.requests.get( "https://some-random-api.ml/img/panda").json()["link"] image = ctx.requests.get(image_url).content ctx.send(files=[("panda.png", image)])
def warns(ctx): if not functions.has_permission(ctx): return handler.error_handler(ctx, "nopermission", ctx.command) if not len(ctx.data["mentions"]) == 1: return handler.error_handler(ctx, "arguments", "warns (osoba)") guild = ctx.data["guild_id"] guilds = functions.read_json("guilds") if not "warns" in guilds[guild] or not ctx.data["mentions"][0]["id"] in guilds[guild]["warns"]: return handler.error_handler(ctx, "notfound") ctx.send(embed = { "title": f"Warny użytkownika {ctx.data['mentions'][0]['username']}:", "description": "\n".join([f"{guilds[guild]['warns'][ctx.data['mentions'][0]['id']].index(i)}. {i}" for i in guilds[guild]["warns"][ctx.data["mentions"][0]["id"]]]), "color": 0xe74c3c })
def removewarn(ctx): if not functions.has_permission(ctx): return handler.error_handler(ctx, "nopermission", ctx.command) if not len(ctx.args) == 2: return handler.error_handler(ctx, "arguments", "removewarn (osoba) (id)") guild = ctx.data["guild_id"] guilds = functions.read_json("guilds") if not "warns" in guilds[guild] or not ctx.data["mentions"][0]["id"] in guilds[guild]["warns"]: return handler.error_handler(ctx, "notfound") del guilds[guild]["warns"][ctx.data["mentions"][0]["id"]][int(ctx.args[1])] ctx.send("Usunięto ostrzeżenie") functions.write_json("guilds", guilds)
def clearwarns(ctx): if not functions.has_permission(ctx): return handler.error_handler(ctx, "nopermission", ctx.command) if not len(ctx.args) == 1: return handler.error_handler(ctx, "arguments", "clearwarns (osoba)") guild = ctx.data["guild_id"] guilds = functions.read_json("guilds") if not "warns" in guilds[guild] or not ctx.data["mentions"][0]["id"] in guilds[guild]["warns"]: return handler.error_handler(ctx, "notfound") del guilds[guild]["warns"][ctx.data["mentions"][0]["id"]] ctx.send("Wyczyszczono ostrzeżenia") functions.write_json("guilds", guilds)
def warnsevent(ctx): if not functions.has_permission(ctx): return handler.error_handler(ctx, "nopermission", ctx.command) if not len(ctx.args) == 2 or ctx.args[0] not in ["kick", "ban", "mute"]: return handler.error_handler(ctx, "arguments", "warnsevent (kick/ban/mute) (ilość warnów)") guild = ctx.data["guild_id"] guilds = functions.read_json("guilds") if not "warnsevent" in guilds[guild]: guilds[guild]["warnsevent"] = {} guilds[guild]["warnsevent"][ctx.args[0]] = str(ctx.args[1]) ctx.send("Dodano event") functions.write_json("guilds", guilds)
def help(ctx): if len(ctx.args) == 1: if not ctx.args[0] in ctx.commands: return handler.error_handler(ctx, "commandnotfound") return ctx.send(embed = { "title": "POMOC:", "description": f"Opis: `{ctx.commands[ctx.args[0]]['description']}`\nUżycie: `{ctx.commands[ctx.args[0]]['usage']}`", "color": 0xe74c3c, "thumbnail": { "url": f"http://cdn.discordapp.com/avatars/{ctx.bot['id']}/{ctx.bot['avatar']}.png?size=2048" }, "footer": { "text": "() - obowiązkowe, [] - opcjonalne" } }) guild = ctx.data["guild_id"] guilds = functions.read_json("guilds") if guild in guilds and "prefix" in guilds[guild]: prefix = guilds[guild]["prefix"] else: prefix = config.prefix blacklist = ["help", "dev"] categories = {} for command in ctx.commands: if not ctx.commands[command]["category"] in categories: categories[ctx.commands[command]["category"]] = [] for command in ctx.commands: categories[ctx.commands[command]["category"]].append("`" + command + "`") fields = [] for category in categories: if not category in blacklist: fields.append({ "name": category + ":", "value": "> " + ", ".join(categories[category]), "inline": False }) fields.append({ "name": "\u200b", "value": f"\[ [Dodaj bota](https://discord.com/api/oauth2/authorize?client_id={ctx.bot['id']}&permissions=268561494&scope=bot) \] \[ [Support](https://discord.gg/tDQURnVtGC) \] \[ [Kod bota](https://github.com/CZUBIX/cenzura) \] \[ [Strona](https://cenzurabot.pl) \]", "inline": False }) ctx.send(embed = { "title": "POMOC:", "description": f"Prefix na tym serwerze to: `{prefix}`\nWpisz `pomoc [komenda]` by sprawdzić użycie danej komendy", "color": 0xe74c3c, "fields": fields })
def unmute(ctx): if not functions.has_permission(ctx): return handler.error_handler(ctx, "nopermission", ctx.command) if not len(ctx.args) == 1: return handler.error_handler(ctx, "arguments", "unmute (osoba)") guild = ctx.data["guild_id"] guilds = functions.read_json("guilds") if not "mute_role" in guilds[guild]: return handler.error_handler(ctx, "notfound") status = discord.remove_guild_member_role(guild, ctx.data["mentions"][0]["id"], guilds[guild]["mute_role"]) if not status.status_code == 204: return handler.error_handler(ctx, 6) ctx.send("Odmutowano użytkownika")
def servericon(ctx): if not functions.has_permission(ctx): return handler.error_handler(ctx, "nopermission", ctx.command) guild = discord.get_guild(ctx.data["guild_id"]) image = ctx.requests.get( f"https://cdn.discordapp.com/icons/{ctx.data['guild_id']}/{guild['icon']}.png?size=2048" ).content ctx.send(files=[("servericon.png", image)])
def kick(ctx): if not functions.has_permission(ctx): return handler.error_handler(ctx, "nopermission", ctx.command) if not len(ctx.data["mentions"]) == 1: return handler.error_handler(ctx, "arguments", "kick (osoba) [powód]") if len(ctx.args) >= 2: ctx.args = " ".join(ctx.args[1:]) reason = ctx.args else: reason = "nie podano powodu" status = discord.remove_guild_member(ctx.data["guild_id"], ctx.data["mentions"][0]["id"]) if not status.status_code == 204: return handler.error_handler(ctx, 6) ctx.send(f"Wyrzucono użytkownika `{ctx.data['mentions'][0]['username']}` z powodu `{reason}`")
def howgay(ctx): if not functions.has_permission(ctx): return handler.error_handler(ctx, "nopermission", ctx.command) if not ctx.data["mentions"]: user = ctx.data["author"]["username"] else: user = ctx.data["mentions"][0]["username"] ctx.send(f"{user} jest gejem w {random.randint(0, 100)}%!")
def serverinfo(ctx): if not functions.has_permission(ctx): return handler.error_handler(ctx, "nopermission", ctx.command) guild = ctx.guilds[ctx.data["guild_id"]] ctx.send(embed = { "title": f"Informacje o {guild['name']}:", "color": 0xe74c3c, "fields": [ { "name": "Właściciel:", "value": f"<@{guild['owner_id']}> ({guild['owner_id']})", "inline": False }, { "name": "ID:", "value": ctx.data["guild_id"], "inline": False }, { "name": "Ilość osób:", "value": guild["member_count"], "inline": False }, { "name": "Ilość kanałów:", "value": len(guild["channels"]), "inline": False }, { "name": "Ilość ról:", "value": len(guild["roles"]), "inline": False }, { "name": "Ilość emotek:", "value": len(guild["emojis"]), "inline": False }, { "name": "Został stworzony:", "value": str(datetime.fromtimestamp(((int(ctx.data["guild_id"]) >> 22) + 1420070400000) / 1000)).split(".")[0], "inline": False }, { "name": "Boosty:", "value": f"{guild['premium_subscription_count']} boosty / {guild['premium_tier']} poziom", "inline": False } ], "thumbnail": { "url": f"https://cdn.discordapp.com/icons/{ctx.data['guild_id']}/{guild['icon']}.png?size=2048" } })
def ship(ctx): if not functions.has_permission(ctx): return handler.error_handler(ctx, "nopermission", ctx.command) if len(ctx.data["mentions"]) == 1: me = ctx.data["author"]["id"], ctx.data["author"][ "avatar"], ctx.data["author"]["username"] me_avatar = f"https://cdn.discordapp.com/avatars/{me[0]}/{me[1]}.png?size=2048" m = ctx.data["mentions"][0]["id"], ctx.data["mentions"][0][ "avatar"], ctx.data["mentions"][0]["username"] m_avatar = f"https://cdn.discordapp.com/avatars/{m[0]}/{m[1]}.png?size=2048" elif len(ctx.data["mentions"]) == 2: me = ctx.data["mentions"][1]["id"], ctx.data["mentions"][1][ "avatar"], ctx.data["mentions"][1]["username"] me_avatar = f"https://cdn.discordapp.com/avatars/{me[0]}/{me[1]}.png?size=2048" m = ctx.data["mentions"][0]["id"], ctx.data["mentions"][0][ "avatar"], ctx.data["mentions"][0]["username"] m_avatar = f"https://cdn.discordapp.com/avatars/{m[0]}/{m[1]}.png?size=2048" else: return handler.error_handler(ctx, "arguments", "ship (osoba) [osoba]") open("images/member1.png", "wb").write(ctx.requests.get(m_avatar).content) open("images/member2.png", "wb").write(ctx.requests.get(me_avatar).content) para = Image.open("images/para.png").convert("RGBA") member1 = Image.open("images/member1.png").convert("RGBA") member2 = Image.open("images/member2.png").convert("RGBA") member1 = ImageOps.fit(member1, (300, 300)) member2 = ImageOps.fit(member2, (300, 300)) para.paste(member1, (360, 250), member1) para.paste(member2, (890, 180), member2) para.save("images/ship.png") ctx.send( f"**{m[2]}** + **{me[2]}** = **{m[2][:round(len(m[2]) / 2)].lower()}{me[2][round(len(me[2]) / 2):].lower()}**\nIch miłość jest równa **{random.randint(0, 100)}%**!", files=[("ship.png", open("images/ship.png", "rb"))])
def reload(ctx): if not ctx.data["author"]["id"] in config.owners: return handler.error_handler(ctx, "nopermission", ctx.command) try: bot.register_module(ctx.args[0], bot, discord) result = f"Przeładowano `{ctx.args[0]}`" except: result = "```" + traceback.format_exc().splitlines()[-1] + "```" ctx.send(result)
def mute(ctx): if not functions.has_permission(ctx): return handler.error_handler(ctx, "nopermission", ctx.command) if not len(ctx.args) == 1: return handler.error_handler(ctx, "arguments", "mute (osoba)") guild = ctx.data["guild_id"] guilds = functions.read_json("guilds") if not "mute_role" in guilds[guild]: role = discord.create_guild_role(guild, {"name": "muted"}).json() guilds[guild]["mute_role"] = role["id"] channels = discord.get_guild_channels(guild) for channel in channels: if channel["type"] == 0: a = discord.edit_channel_permissions(channel["id"], role["id"], { "deny": permissions.permissions["SEND_MESSAGES"], "allow": permissions.permissions["ADD_REACTIONS"], "type": 0 }) elif channel["type"] == 2: discord.edit_channel_permissions(channel["id"], role["id"], { "deny": permissions.permissions["SPEAK"], "allow": permissions.permissions["VIEW_CHANNEL"], "type": 0 }) functions.write_json("guilds", guilds) status = discord.add_guild_member_role(guild, ctx.data["mentions"][0]["id"], guilds[guild]["mute_role"]) if not status.status_code == 204: return handler.error_handler(ctx, 6) ctx.send("Zmutowano użytkownika")
def garfield(ctx): if not functions.has_permission(ctx): return handler.error_handler(ctx, "nopermission", ctx.command) ctx.args = (" ".join(ctx.args)).lower() if not ctx.args: return handler.error_handler(ctx, "arguments", "garfield (tekst)") elif len(ctx.args) > 100: return handler.error_handler(ctx, "toolongtext", 100) other = { "ą": "a", "ś": "s", "ó": "o", "ł": "l", "ę": "e", "ń": "n", "ź": "z", "ż": "z", "ć": "c" } text = "" for letter in ctx.args: if ("garfield_" + letter in arrays.emotes) or (letter in other): if letter in other: letter = other[letter] letter = "garfield_" + letter text += f"<:{letter}:{arrays.emotes[letter]}>" elif letter in ["`", "\\"]: text += "" elif letter == " ": text += f"<:space:{arrays.emotes[' ']}>" else: text += letter ctx.send(text)
def avatar(ctx): if not functions.has_permission(ctx): return handler.error_handler(ctx, "nopermission", ctx.command) if not ctx.data["mentions"]: user = ctx.data["author"]["id"], ctx.data["author"]["avatar"] else: user = ctx.data["mentions"][0]["id"], ctx.data["mentions"][0][ "avatar"] image = ctx.requests.get( f"https://cdn.discordapp.com/avatars/{user[0]}/{user[1]}.png?size=2048" ).content ctx.send(files=[("avatar.png", image)])