mirror of
https://github.com/Cog-Creators/Red-DiscordBot.git
synced 2025-11-08 04:08:56 -05:00
[Core] Added [p]contact and [p]dm (#875)
* [Core] Added [p]contact and a way to DM users through Red * Turned reply feature into [p]dm command * Better docstring
This commit is contained in:
parent
d4da9edb3e
commit
9a1064c81d
@ -2,6 +2,7 @@ from discord.ext import commands
|
||||
from core import checks
|
||||
from string import ascii_letters, digits
|
||||
from random import SystemRandom
|
||||
from collections import namedtuple
|
||||
import logging
|
||||
import importlib
|
||||
import os
|
||||
@ -281,3 +282,88 @@ class Core:
|
||||
await ctx.send("You have been set as owner.")
|
||||
else:
|
||||
await ctx.send("Invalid token.")
|
||||
|
||||
@commands.command()
|
||||
@commands.cooldown(1, 60, commands.BucketType.user)
|
||||
async def contact(self, ctx, *, message: str):
|
||||
"""Sends a message to the owner"""
|
||||
guild = ctx.message.guild
|
||||
owner = discord.utils.get(ctx.bot.get_all_members(),
|
||||
id=ctx.bot.owner_id)
|
||||
author = ctx.message.author
|
||||
footer = "User ID: %s" % author.id
|
||||
|
||||
if ctx.guild is None:
|
||||
source = "through DM"
|
||||
else:
|
||||
source = "from {}".format(guild)
|
||||
footer += " | Server ID: %s" % guild.id
|
||||
|
||||
# We need to grab the DM command prefix (global)
|
||||
# Since it can also be set through cli flags, bot.db is not a reliable
|
||||
# source. So we'll just mock a DM message instead.
|
||||
fake_message = namedtuple('Message', 'guild')
|
||||
prefix = ctx.bot.command_prefix(ctx.bot, fake_message(guild=None))[0]
|
||||
|
||||
content = ("Use `{}dm {} <text>` to reply to this user"
|
||||
"".format(prefix, author.id))
|
||||
|
||||
if isinstance(author, discord.Member):
|
||||
colour = author.colour
|
||||
else:
|
||||
colour = discord.Colour.red()
|
||||
|
||||
description = "Sent by {} {}".format(author, source)
|
||||
|
||||
e = discord.Embed(colour=colour, description=message)
|
||||
if author.avatar_url:
|
||||
e.set_author(name=description, icon_url=author.avatar_url)
|
||||
else:
|
||||
e.set_author(name=description)
|
||||
e.set_footer(text=footer)
|
||||
|
||||
try:
|
||||
await owner.send(content, embed=e)
|
||||
except discord.InvalidArgument:
|
||||
await ctx.send("I cannot send your message, I'm unable to find "
|
||||
"my owner... *sigh*")
|
||||
except:
|
||||
await ctx.send("I'm unable to deliver your message. Sorry.")
|
||||
else:
|
||||
await ctx.send("Your message has been sent.")
|
||||
|
||||
@commands.command()
|
||||
@checks.is_owner()
|
||||
async def dm(self, ctx, user_id: int, *, message: str):
|
||||
"""Sends a DM to a user
|
||||
|
||||
This command needs a user id to work.
|
||||
To get a user id enable 'developer mode' in Discord's
|
||||
settings, 'appearance' tab. Then right click a user
|
||||
and copy their id"""
|
||||
destination = discord.utils.get(ctx.bot.get_all_members(),
|
||||
id=user_id)
|
||||
if destination is None:
|
||||
await ctx.send("Invalid ID or user not found. You can only "
|
||||
"send messages to people I share a server "
|
||||
"with.")
|
||||
return
|
||||
|
||||
e = discord.Embed(colour=discord.Colour.red(), description=message)
|
||||
description = "Owner of %s" % ctx.bot.user
|
||||
fake_message = namedtuple('Message', 'guild')
|
||||
prefix = ctx.bot.command_prefix(ctx.bot, fake_message(guild=None))[0]
|
||||
e.set_footer(text=("You can reply to this message with %scontact"
|
||||
"" % prefix))
|
||||
if ctx.bot.user.avatar_url:
|
||||
e.set_author(name=description, icon_url=ctx.bot.user.avatar_url)
|
||||
else:
|
||||
e.set_author(name=description)
|
||||
|
||||
try:
|
||||
await destination.send(embed=e)
|
||||
except:
|
||||
await ctx.send("Sorry, I couldn't deliver your message "
|
||||
"to %s" % destination)
|
||||
else:
|
||||
await ctx.send("Message delivered to %s" % destination)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user