Discord 机器人帮助 (python)

时间:2021-02-17 18:21:17

标签: python discord discord.py

我正在处理的代码(正在寻找工作版本,底部有完整代码):

def a(number):
  while number > 0:
    @client.event
    async def send_message(): 
        channel.send("j")
        number = number - 1
        time.sleep(2)

试图让机器人发送垃圾邮件 j。原来我有:

def a(number):
  while number > 0:
    @client.event
    async def on_message(message): 
        await message.channel.send("j")
        number = number - 1
        time.sleep(2)

但是在输入另一个命令之前它不会开始发送垃圾邮件 j。示例(不一致) !垃圾邮件-j (什么都没发生) !helloworld(只是一个测试命令,与 j 垃圾邮件代码无关) 机器人:(开始垃圾邮件 j) 我认为这是因为 await 部分,但我不知道如何摆脱它。

import discord
import os
import time
import threading

client = discord.Client()
def b():
  while True:
    @client.event
    async def on_message(message):
        message.channel.send("j")
        if message.content.startswith('!stop'):
          a(0)
          print("did")
        
def a(number):
  while number > 0:
    @client.event
    async def send_message(): 
        channel.send("j")
        number = number - 1
        time.sleep(2)

@client.event
async def on_ready():
    print('We have logged in as {0.user}'.format(client))

@client.event
async def on_message(message):  
    if message.author == client.user:
        return

    if message.content.startswith('!helloworld'):
        await message.channel.send('working!')
    
    if message.content.startswith('!spam-jprep'):
      await message.channel.send("ready")
      threading.Thread(target=a(10)).start()
      #threading.Thread(target=b).start()  

        #while x > 0:
          #if message.content.startswith('!stop'):
           # x = 0
           # print ("seen")
       

client.run(os.getenv('TOKEN'))

1 个答案:

答案 0 :(得分:0)

我仍然不完全确定您在这里尝试做什么。如果您正在尝试创建一个简单的命令来发送垃圾邮件,则可以轻松完成,

@client.command()
async def spam(ctx):
    while True:
        await ctx.send("j")

有了这个,您还应该添加睡眠事件 await asyncio.sleep(10),这样它就不会受到速率限制。但这是一个使用 while True 的简单示例。

这是一个更好的例子,当您可以控制它时,它会简单地将垃圾邮件变量设置为 True,这将设置 while true 循环来向您的信件或邮件发送垃圾邮件。

spam_j = True

@client.command()
async def spam(ctx):
    global spam_j
    spam_j= True

    while true:
        if not spam_j:
            break

        await ctx.send("j")

@client.command()
async def stop(ctx):
    global spam_j
    spam_j= False
    await ctx.send('Stopped spamming')