initial commit
This commit is contained in:
192
main.py
Normal file
192
main.py
Normal file
@@ -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])
|
||||
2
requirements.txt
Normal file
2
requirements.txt
Normal file
@@ -0,0 +1,2 @@
|
||||
discord.py
|
||||
requests
|
||||
Reference in New Issue
Block a user