【问题标题】:Discord bot sends 2 messages instead of 1Discord 机器人发送 2 条消息而不是 1 条
【发布时间】:2020-08-16 12:49:38
【问题描述】:

我的机器人发送了两次相同的消息,以响应我的命令。

请帮帮我,我不知道如何处理这个问题

import discord 
from discord.ext import commands
from discord.ext.commands import Bot
import youtube_dl

Bot = commands.Bot(command_prefix= '$')
Bot.remove_command('help')

@Bot.command()
async def hello(ctx):
    author = ctx.message.author
    await ctx.send(f"Hello {author.mention}")

@Bot.command()
@commands.has_permissions(administrator= True)
async def mute(ctx, member: discord.Member):
    mute_role = discord.utils.get(ctx.message.guild.roles, name= "Muted")
    await member.add_roles(mute_role)
    await ctx.send("Пользователь успешно замьючен")

@Bot.command()
@commands.has_permissions(administrator= True)
async def unmute(ctx, member: discord.Member):
    mute_role = discord.utils.get(ctx.message.guild.roles, name= "Muted")
    await member.remove_roles(mute_role)
    await ctx.send("Пользователь успешно размьючен")

@Bot.command()
@commands.has_permissions(administrator= True)
async def kick(ctx, member : discord.Member, *, reason=None):
    await member.kick(reason=reason)
    await ctx.send

@Bot.command()
@commands.has_permissions(administrator= True)
async def ban(ctx, member : discord.Member, *, reason="Вы нарушили правила сервера или же админ просто решил вас забанить :)"):
    await member.ban(reason=reason)
    await ctx.send('Пользователь получил БАН')

@Bot.command()
@commands.has_permissions(administrator= True)
async def unban(ctx, *, member):
    banned_users = await ctx.guild.bans()
    member_name, member_discriminator = member.split('#')
    for ban_entry in banned_users:
        user = ban_entry.user
        if (user.name, user.discriminator) == (member_name, member_discriminator):
            await ctx.guild.unban(user)
            await ctx.send('Пользователь успешно разбанен')
            return

@Bot.event
async def on_message( message ):
    filter = ['!leave', '!play','!skip']
    for word in filter:

            if message.content.count(word) > 0:
                print('%s bad word' % (message.author.id))
                await message.channel.purge(limit=1)
                await message.author.send('Просьба писать команды для бота в #music')
            await Bot.process_commands(message)

@Bot.event
async def on_message( message ):
    filter = ['!leave', '!play','!skip']
    for word in filter:

            if message.content.count(word) > 0:
                print('%s bad word' % (message.author.id))
                await message.channel.purge(limit=1)
                await message.author.send('Просьба писать команды для бота в #music')
            await Bot.process_commands(message)

@Bot.event
async def on_member_join(member):
    await member.create_dm()
    await member.dm_channel.send(f'Привет, {member.name}, добро пожаловать на наш сервер!')
    return

@Bot.event
async def on_ready():
    await Bot.change_presence(status=None, activity=discord.Game("Steins;Gate 0"))
    print("Bot is ready!")

@Bot.command()
@commands.has_permissions(administrator= True)
async def clear(ctx, amount=None):
    await ctx.channel.purge(limit=int(amount))
    await ctx.channel.send('Сообщения успешно удалены')

Bot.run("Token")

【问题讨论】:

  • 你真的没有 on_message 2x 吗?
  • 我没有得到你问题的最新部分?是拉丁语吗?你能用英语提供给我们吗,这样每个人都可以从这个问题和 evt 中受益。答案?
  • @dboy - 结束文本是 Lorem ipsum - 虚拟文本。
  • @DaveStSomeWhere 是的。不知道它是如何结束的,但我实际上无法编辑问题以将其删除,因为没有它系统会抱怨代码过多且解释不足。
  • 看起来您创建了一个新问题。我会把我的答案移到新的。

标签: python discord discord.py


【解决方案1】:

我很确定你运行了两次程序,以确保不会发生这种情况,我建议实施一个终止开关,这样每次重新运行程序时,你首先在 Discord 上激活终止开关,然后再次运行程序. 我制作的 killswitch 示例如下:

@client.command()
async def quit(ctx):
    await ctx.send("Shutting down the bot")
    return await client.logout() # this just shuts down the bot.

【讨论】:

    猜你喜欢
    • 2019-09-12
    • 2021-08-19
    • 2020-08-17
    • 2022-11-02
    • 2021-04-19
    • 2021-01-08
    • 2020-11-23
    • 1970-01-01
    • 2021-01-12
    相关资源
    最近更新 更多