This question already has an answer here:
Discord.py Banning members not in my server
(1 answer)
Closed 11 months ago.
When I try to use the command it says "user is a required argument"
#commands.command(aliases=['hban'])
#commands.has_permissions(ban_members=True)
#commands.cooldown(1, 3, BucketType.user)
async def hackban(self, ctx, user: discord.User):
if user in ctx.guild.members:
embed = discord.Embed(description=":oxmark: "+f"Unsuccessful, the user is in this guild. [-help ban]", color=discord.Color.orange())
await ctx.reply(embed=embed, mention_author=False)
else:
await ctx.guild.ban(user)
embed = discord.Embed(title=":ocheckmark: "+f"Successfully hack banned {user.name}", color=discord.Color.orange())
await ctx.reply(embed=embed, mention_author=False)
#client.command()
#check(check_if_user_has_premium)
#commands.has_permissions(ban_members=True)
async def hackban(ctx, user: discord.User = None):
guild = ctx.guild
if user == None:
await ctx.send("Please enter a member to ban")
return()
else:
await guild.ban(user)
embed = discord.Embed(title=":ocheckmark: "+f"Successfully hack banned {user.name}", color=discord.Color.orange())
await ctx.reply(embed=embed, mention_author=False)
Works
Related
I just switched to Discord.py v2 after switching using nextcord for 1 or 2 months.
Im having a issue where no commands work
like no commands at all
i changed everything from "nextcord" to "discord" and even changed the setups in the cogs to the new async versions
events work, but commands themselves dont
i tried everything i knew but still didnt fix it
i tried looking in the discord doc but still couldnt find a soloution
my current code:
import discord
from discord.ext import commands
from discord.ext.commands.core import has_permissions
import asyncio
import os
intents = discord.Intents.default()
intents.members = True
bot = commands.Bot(command_prefix='+', intents=intents)
##COGS
#bot.event
async def on_ready():
await asyncio.sleep(1)
print(f'We have logged in as {bot.user}')
await bot.change_presence(activity=discord.Game(name="in the Mountains"))
#bot.command()
#has_permissions(administrator = True)
async def load(ctx, arg, extension):
if ctx.author.id == 498839148904579092:
bot.load_extension(f"{arg}.{extension}")
embed = discord.Embed(description=f"{extension} module loaded!", colour=discord.Colour.dark_green())
await ctx.send(embed = embed)
print(f"{extension} loaded")
#bot.command()
#has_permissions(administrator = True)
async def unload(ctx, arg, extension):
if ctx.author.id == 498839148904579092:
bot.unload_extension(f"{arg}.{extension}")
embed = discord.Embed(description=f"{extension} module unloaded!", colour=discord.Colour.dark_green())
await ctx.send(embed = embed)
print(f"{extension} unloaded")
#bot.command()
#has_permissions(administrator = True)
async def reload(ctx, arg, extension):
if ctx.author.id == 498839148904579092:
bot.reload_extension(f"{arg}.{extension}")
embed = discord.Embed(description=f"{extension} module reloaded!", colour=discord.Colour.dark_green())
await ctx.send(embed = embed)
print(f"{extension} reloaded")
#load.error
async def alreadyloaded(ctx, error):
if isinstance(error, commands.CommandInvokeError):
embed = discord.Embed(colour=discord.Colour.dark_red())
embed.set_author(icon_url="https://cdn.discordapp.com/attachments/883349890921545748/927946906271887430/W0019f8UlvqD3dDC5.png", name="Command Invoke Error! [LOAD]")
embed.set_thumbnail(url="https://cdn.discordapp.com/attachments/883349890921545748/927946906271887430/W0019f8UlvqD3dDC5.png")
embed.add_field(name="commands.CommandInvokeError", value=error, inline=True)
embed.add_field(name="Maybe...", value="The Extension is Non-Exsistant or cannot be Loaded", inline=True)
embed.set_footer(text="get a list of Modules with [+modules]!")
await ctx.send(embed = embed, delete_after = 10)
elif isinstance(error, commands.MissingPermissions):
await ctx.message.delete()
await ctx.send(f"{ctx.author.mention}, that Command is Admin only!", delete_after = 3)
return
#unload.error
async def alreadyunloaded(ctx, error):
if isinstance(error, commands.CommandInvokeError):
embed = discord.Embed(colour=discord.Colour.dark_red())
embed.set_author(icon_url="https://cdn.discordapp.com/attachments/883349890921545748/927946906271887430/W0019f8UlvqD3dDC5.png", name="Command Invoke Error! [UNLOAD]")
embed.set_thumbnail(url="https://cdn.discordapp.com/attachments/883349890921545748/927946906271887430/W0019f8UlvqD3dDC5.png")
embed.add_field(name="commands.CommandInvokeError", value=error, inline=True)
embed.add_field(name="Maybe...", value="The Extension is Non-Exsistant or cannot be Unloaded", inline=True)
embed.set_footer(text="get a list of Modules with [+modules]!")
await ctx.send(embed = embed, delete_after = 10)
return
elif isinstance(error, commands.MissingPermissions):
await ctx.message.delete()
await ctx.send(f"{ctx.author.mention}, that Command is Admin only!", delete_after = 3)
return
#bot.command()
async def online(ctx):
print("1")
await ctx.channel.send("online")
print("hello")
async def main():
async with bot:
#await load_extensions()
await bot.start("bot auth code")
asyncio.run(main())
Discord.py v2.0 has migrated to api v10, and with this has come the introduction of Intents.message_content, which is disabled by default.
This means that you will need to explicitly enable it in code and in the panel, at https://discord.com/developers/applications.
intents = discord.Intents.default()
intents.members = True
intents.message_content = True
bot = commands.Bot(command_prefix='+', intents=intents)
I am trying to make a discord giveaway reroll command.
The problem is that when the command is run it is not responding/rerolling the giveaway.
I've looked on multiple sites with the same command and all of them did not work/have a fix for this.
I also tried without the embeds to see if that was the problem with the code.
Below is the reroll command code -
(if the giveaway command code is needed I can provide it)
#client.command()
#commands.has_permissions(kick_members=True)
async def reroll(ctx, channel : discord.TextChannel, id_ : int):
try:
new_msg = await channel.fetch_message(id_)
except:
embed = discord.Embed(title="Command Error ⛔ - GameBot", description=f"**The Id Of A Channel Was Entered Incorrectly!** 🎉", color=0x992d22)
await ctx.send(embed=embed)
return
users = await new_msg.reactions[0].users().flatten()
users.pop(users.index(client.user))
winner = random.choice(users)
embed = discord.Embed(title="Giveaways 🎉 - GameBot", description=f"**Giveaway Has Been Rerolled!** \n \n**Winner -** \n`{winner.mention}`", color=0xe74c3c)
await ctx.send(embed=embed)
Below is the giveaway command code -
#client.command()
#commands.has_permissions(kick_members=True)
async def giveaway(ctx):
embed = discord.Embed(title="Giveaway Setup 🎉 - GameBot", description=f'**{ctx.author.mention} Giveaway Setup Is Now Starting... Please Answer These Questions Within 30 Seconds!**', color=0xe74c3c)
await ctx.send(embed=embed)
questions = ["**What Channel Should The Giveaway Be Hosted In?** `EX : #general` 🎉",
"**What Is The Duration Of The Giveaway?** `EX : S/M/H/D` 🎉",
"**What Is The Giveaway Prize?** `EX : Gift Card` 🎉"]
answers = []
def check(m):
return m.author == ctx.author and m.channel == ctx.channel
for i in questions:
await ctx.send(i)
try:
msg = await client.wait_for('message', timeout=30.0, check=check)
except asyncio.TimeoutError:
embed = discord.Embed(title="Command Error ⛔ - GameBot", description=f"**Please Answer All Of The Questions In Time... Be Prepared!** 🎉", color=0x992d22)
await ctx.send(embed=embed)
else:
answers.append(msg.content)
try:
c_id = int(answers[0][2:-1])
except:
embed = discord.Embed(title="Command Error ⛔ - GameBot", description=f"**Please Provide A Valid Channel For Me To Host The Giveaway In!** `EX : #general` 🎉", color=0x992d22)
await ctx.send(embed=embed)
return
channel = client.get_channel(c_id)
time = convert(answers[1])
if time == -1:
embed = discord.Embed(title="Command Error ⛔ - GameBot", description=f"**The Time Constraint You Answered With Was Not A Valid Unit!** `EX : S/M/H/D` 🎉", color=0x992d22)
await ctx.send(embed=embed)
return
elif time == -2:
embed = discord.Embed(title="Command Error ⛔ - GameBot", description=f"**The Time Must Include An Integer!** `EX : 1S, 1M, 1H, 1D` 🎉", color=0x992d22)
await ctx.send(embed=embed)
return
prize = answers[2]
embed = discord.Embed(title="Giveaway Setup 🎉 - GameBot", description=f'**Giveaway Channel -** \n`{channel.mention}` \n**Duration -** \n`{answers[1]}`', color=0xe74c3c)
await ctx.send(embed=embed)
givembed = discord.Embed(title="Giveaways 🎉 - GameBot", description=f'**Giveaway Prize/Description -** \n`{prize}`', color=0x2ecc71)
givembed.add_field(name = "**Host -**", value=ctx.author.mention)
givembed.set_footer(text = f"Ending {answers[1]} From Now! 🎉")
my_msg = await channel.send(embed=givembed)
await my_msg.add_reaction("🎉")
await asyncio.sleep(time)
new_msg = await channel.fetch_message(my_msg.id)
users = await new_msg.reactions[0].users().flatten()
users.pop(users.index(client.user))
winner = random.choice(users)
embed = discord.Embed(title="Giveaways 🎉 - GameBot", description=f"**Giveaway Has Ended!** \n \n**Winner -** \n`{winner.mention}` \n**Prize -** \n`{prize}`", color=0xe74c3c)
await ctx.send(embed=embed)
Almost everything about the code is correct. However I guess you are requesting the users in a wrong/not working way. You can try to request the users in another way, this seems to be the source where the error comes from.
Try out the following:
users = [u for u in await new_msg.reactions[0].users().flatten() if u != client.user]
winner = random.choice(users)
The full code would be:
#client.command()
#commands.has_permissions(kick_members=True)
async def giveaway(ctx):
# Giveaway code
#client.command()
#commands.has_permissions(kick_members=True)
async def reroll(ctx, channel: discord.TextChannel, id_: int):
try:
new_msg = await channel.fetch_message(id_)
except:
embed = discord.Embed(title="Command Error ⛔ - GameBot",
description=f"**The Id Of A Channel Was Entered Incorrectly!** 🎉", color=0x992d22)
await ctx.send(embed=embed)
return
user_list = [u for u in await new_msg.reactions[0].users().flatten() if u != client.user]
winner = random.choice(user_list)
embed = discord.Embed(title="Giveaways 🎉 - GameBot",
description=f"**Giveaway Has Been Rerolled!** \n \n**Winner -** \n`{winner.mention}`",
color=0xe74c3c)
await ctx.send(embed=embed)
Hi i am making a Discord bot and i wanted to add a fun command that asks a emoji about a film and it wants you to answer properly. How am i suppossed to do that? Btw here is my code;
#client.command()
async def emoji(ctx):
filmemojis = [':woman_frowning: :sparkler: :woman_with_veil: :high_heel:',
':ocean: :fish: :mag:',
':nerd: :man_mage: :sparkler: :school:',
':tiger2: :person_wearing_turban: :man_rowing_boat:',
':ring: :crown: :volcano:',
':earth_americas: :rocket: :monkey_face:',
':rocket: :alien: :sunglasses: :sunglasses:',
':mouse2: :pizza: :turtle: :turtle: :turtle: :turtle:',
':mushroom: :grinning: :weary: :smirk: :triumph: :open_mouth: :innocent: :pensive:',
':ship: :couple_with_heart_woman_man:',
':blue_car: :watch: :arrow_right_hook: :hourglass_flowing_sand:']
await ctx.send(f'{random.choice(filmemojis)}\nWhat film is this?')
You are looking for Bot.wait_for
#client.command()
async def emoji(ctx):
filmemojis = [
':woman_frowning: :sparkler: :woman_with_veil: :high_heel:',
':ocean: :fish: :mag:',
':nerd: :man_mage: :sparkler: :school:',
':tiger2: :person_wearing_turban: :man_rowing_boat:',
':ring: :crown: :volcano:',
':earth_americas: :rocket: :monkey_face:',
':rocket: :alien: :sunglasses: :sunglasses:',
':mouse2: :pizza: :turtle: :turtle: :turtle: :turtle:',
':mushroom: :grinning: :weary: :smirk: :triumph: :open_mouth: :innocent: :pensive:',
':ship: :couple_with_heart_woman_man:',
':blue_car: :watch: :arrow_right_hook: :hourglass_flowing_sand:'
]
await ctx.send(f'{random.choice(filmemojis)}\nWhat film is this?')
def check(m):
"""Checks if the user that replied is the same as the one that invoked the command"""
return m.author == ctx.author
message = await client.wait_for('message', check=check) # You can also add a timeout
Adding a timeout
try:
message = await client.wait_for('message', check-check, timeout=60.0) # Change the timeout accordingly
except asyncio.TimeoutError: # You need to import asyncio for this
await ctx.send('whatever')
i was making a mute command, i want it to create the role if the role is not found. Here's my code
#client.command()
async def mute(ctx, member: discord.Member , time, *, reason):
guild = ctx.guild
for role in guild.roles:
if role.name == 'muted' or 'Muted':
await member.add_roles(role)
perms = channel.overwrites_for(member)
perms.send_messages=False
await channel.set_permissions(member, overwrite=perms, reason="Muted!")
mutedembed = discord.Embed(
title=f"Muted {member.name}",
description="For the reason {}".format(reason),
timestamp=datetime.datetime.now()
)
await ctx.send(embed=mutembed)
else:
perms = discord.Permissions(send_messages=False, read_messages=True)
newRole = await guild.create_role(name="Muted", permissions=perms)
await member.add_roles(newRole)
mutedembed = discord.Embed(
title=f"Muted {member.name}",
description="For the reason {}".format(reason),
timestamp=datetime.datetime.now()
)
await ctx.send(embed=mutembed)
await asyncio.sleep(to_seconds(time))
await member.role_remove(newRole)
return
i want it to make the role if it's not on the role list, how to do that?
Use discord.utils.get(guild.roles, name='Muted') to find if there is a muted role in the guild, and run your "else" case if not
I'm setting up a discord bot, and I want to have the bot send a confirmation or error message after the commands "ban" and "kick", can anyone help?
I have tried creating another separate command with the same arguments, except just having it send the expected message.
#client.event
async def on_ready():
print('Bot is ready!')
#client.event
async def on_member_join(ctx, member):
print(f'{member} has joined {ctx.guild.name}.')
#client.event
async def on_member_remove(ctx, member):
print(f'{member} has left {ctx.guild.name}.')
#client.event
async def on_member_join(member):
role = discord.utils.get(member.server.roles, name="Member")
await client.add_roles(member, role)
#client.command()
async def ping(ctx):
await ctx.send(f'Pong! :ping_pong: **{round(client.latency * 1000)}ms** ')
#client.command()
async def purge(ctx, amount):
await ctx.channel.purge(limit=amount)
await ctx.send(f'{member.display_name} has been kicked.')
#client.command()
async def kick(ctx, member : discord.Member, *, reason=None):
await member.kick(reason=reason)
await ctx.send(f'{member.display_name} has been kicked.'')
#client.command()
async def ban(ctx, member : discord.Member, *, reason=None):
await member.ban(reason=reason)
await ctx.send(f'The Ban Hammer has Spoken! {member.display_name} has been banned!')
#client.command()
async def pardon(ctx, *, member):
banned_users = await ctx.guild.bans()
member_name, member_discriminator = member.split('#')
for ban_entry in banned_users:
user = ban_entry.banned_users
if (user.name, user.discriminator) == (member_name, member_discriminator):
await ctx.guild.unban(user)
await ctx.send(f'Unbanned {member.display_name}')
In actuality, I think it would be great, because they clash with each other and probably will send a message, but it went wrong.
At the end of the kick command delete that last '. And also do {member.name} or {member}