From ff47c8778860933bdac56d1a90127a1e077eaf54 Mon Sep 17 00:00:00 2001 From: hinuiiik Date: Sun, 16 Jun 2024 23:48:22 -0400 Subject: [PATCH] initial commit --- main.py | 192 +++++++++++++++++++++++++++++++++++++++++++++++ requirements.txt | 2 + 2 files changed, 194 insertions(+) create mode 100644 main.py create mode 100644 requirements.txt diff --git a/main.py b/main.py new file mode 100644 index 0000000..38eaae0 --- /dev/null +++ b/main.py @@ -0,0 +1,192 @@ +import random +import discord +import sys +import os +from discord.ext import commands +from discord.utils import get +from discord import SyncWebhook +import json + +admins = [00000000000000] # User IDs of Admins +guild_id = 0000000000000000 # Discord Server ID +category_id = "DMs" # Discord Channel Category Name + +# global replies + +# if not os.path.isfile("replies.json"): +# with open("replies.json", "w+") as g: +# json.dump({}, g, indent=1) +# g.close() + +if not os.path.isfile("dm_ids.json"): + with open("dm_ids.json", "w+") as g: + json.dump({'': {'webhook_url': '', 'channel_id': ''}}, g, indent=1) + g.close() + + +# def file_update(): +# global replies +# with open("replies.json", "r") as g: +# replies = json.load(g) +# +# # json.dump(ids, f, indent=1) +# g.close() + + +def attachment_list(message): + dm_attach = message.content + for x in message.attachments: + dm_attach = dm_attach + " " + x.url + return dm_attach + + +# file_update() + +intents = discord.Intents.default() +intents.message_content = True + +client = commands.Bot(command_prefix='.', description="test", intents=intents) + +with open("dm_ids.json", "r") as f: + ids = json.load(f) +f.close() + + +@client.event +async def on_ready(): + print(f'We have logged in as {client.user}') + + +@client.event +async def on_message(message): + global ids + guild = client.get_guild(guild_id) + channelcategory = get(guild.channels, name=category_id) + if message.author == client.user or message.author.bot: + return + + for userid in ids: + if str(message.channel.id) == ids[userid]["channel_id"]: + user = await client.fetch_user(userid) + await user.send(attachment_list(message)) + + if isinstance(message.channel, discord.DMChannel): + try: # If user has already messaged the bot once + SyncWebhook.from_url(ids[str(message.author.id)]["webhook_url"]).send(attachment_list(message), + username=message.author.name, + avatar_url=message.author.avatar) + except KeyError: # If user has not messaged the bot at least once + user = await client.fetch_user(message.author.id) + await user.send("Warning: All messages sent to this bot are logged and readable by this bot's owners. By " + "continuing, you accept this. Your first message has not been logged. Your subsequent " + "messages will be logged.") + dm_channel = await guild.create_text_channel(str(message.author).replace("#", "-"), overwrites={}, + category=channelcategory) + webhook = await dm_channel.create_webhook(name="user") + # SyncWebhook.from_url(webhook.url).send(attachment_list(message), + # username=message.author.name, avatar_url=message.author.avatar) + ids[str(message.author.id)] = {"webhook_url": str(webhook.url), "channel_id": str(dm_channel.id)} + with open("dm_ids.json", "w") as f: + json.dump(ids, f, indent=1) + # ids = json.load(f) + f.close() + + # if not message.content.startswith("."): + # for i in replies: + # if i in message.content.strip().lower(): + # await message.reply(replies[i]) + # return + + await client.process_commands(message) + + + +# @client.command() +# async def upload(ctx): +# if ctx.author.id in admins: +# await ctx.reply(file=discord.File(r'replies.json')) + + +# @client.command() +# async def update(ctx): +# if ctx.author.id in admins: +# file_update() +# await ctx.reply("updated!") + + +# @client.command() +# async def add(ctx, args, args2: str = None): +# if ctx.author.id in admins: +# global replies +# if args in replies: +# await ctx.reply(args + " is already added") +# else: +# if args2 is None: +# replies[args] = args +# else: +# replies[args] = args2 +# with open("replies.json", "w") as g: +# json.dump(replies, g, indent=1) +# g.close() +# +# await ctx.reply("added " + args) +# file_update() + + +# @client.command() +# async def remove(ctx, args): +# if ctx.author.id in admins: +# try: +# del replies[args] +# with open("replies.json", "w") as g: +# json.dump(replies, g, indent=1) +# g.close() +# await ctx.reply(f"{args} has been removed") +# file_update() +# except KeyError: +# await ctx.reply("command borke :( key no existo") + + +@client.group(pass_context=True) +async def send(ctx): + if ctx.author.id in admins: + if ctx.invoked_subcommand is None: + await ctx.send('Parameters: `.send (channel/dm) ID "message contents"`') + + +@send.group(pass_context=True) +async def channel(ctx, uid: int, message): + if ctx.author.id in admins: + channelsend = await ctx.bot.fetch_channel(uid) + await channelsend.send(message) + + +@channel.error +async def test_error(ctx): + await ctx.send('Parameters: `.send channel ID "message contents"`') + + +@send.group(pass_context=True) +async def dm(ctx, uid: int, message): + if ctx.author.id in admins: + dmuser = await ctx.bot.fetch_user(uid) + await dmuser.send(message) + + +@dm.error +async def test_error(ctx): + await ctx.send('Parameters: `.send dm ID "message contents"`') + + +@client.command() +async def react(ctx): # msg: discord.Message + if ctx.author.id in admins: + await ctx.message.add_reaction(":thumbs_up:") + + +# @react.error +# async def test_error(ctx): +# await ctx.send('''Parameters: `.react Channel_ID "emoji"` +# Emoji example: `<:>`''') + +client.run(sys.argv[1]) diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..f94f589 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,2 @@ +discord.py +requests