代码之家  ›  专栏  ›  技术社区  ›  Omar Mustafa

Discord Bot在线,但不会在我的Discord频道上回复

  •  0
  • Omar Mustafa  · 技术社区  · 2 年前

    我现在正在学习一个教程,我写的正是那个家伙所做的,而我的$inspire命令不起作用。

    机器人获得了所有权限

    import discord
    import os
    import requests
    import json
    
    intents = discord.Intents.default()
    client = discord.Client(intents=intents)
    
    
    def get_quote():
      response = requests.get("https://zenquotes.io/api/ranom")
      json_data = json.loads(response.text)
      quote = json_data[0]['q'] + " -" + json_data[0]['a']
      return (quote)
    
    
    @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('$inspire'):
        quote = get_quote()
        await message.channel.send(quote)
    
    
    client.run(os.environ['TOKEN'])
    

    代码在python中,我正在使用Replit来编写这个机器人程序的代码。

    我试图从zenquotes.io获得一条评论消息,每次我在我的discord频道中键入$inspire时,我都会收到一条随机报价。

    1 回复  |  直到 2 年前
        1
  •  0
  •   furas    2 年前

    我在本地计算机上测试了你的代码,当我给机器人写私人消息时,它对我有效,但要在我需要的频道上工作 intents.message_content = True

    intents = discord.Intents.default()
    intents.message_content = True
    
    client  = discord.Client(intents=intents)
    

    另请参阅 Warning 在文档中: Commands


    顺便提一下 你忘了char d 在word中 random 在url中。


    完整的工作代码(有一些小的更改)

    import os
    import discord
    import requests
    
    
    intents = discord.Intents.default()
    intents.message_content = True
    
    client  = discord.Client(intents=intents)
    
    
    def get_quote():
        response = requests.get("https://zenquotes.io/api/random")
        data = response.json()
        item = data[0]
        quote = f"{item['q']} - {item['a']}"
        return quote
    
    
    @client.event
    async def on_ready():
        print(f'We have logged in as {client.user}')
    
    
    @client.event
    async def on_message(message):
        #print(client.user, message.author, message.content) 
        
        if message.author == client.user:
            return
    
        if message.content.startswith('$inspire'):
            quote = get_quote()
            await message.channel.send(quote)
    
    
    client.run(os.environ['TOKEN'])
    

    与相同 commands

    import os
    import discord
    from discord.ext import commands
    import requests
    
    
    intents = discord.Intents.default()
    intents.message_content = True
    
    bot = commands.Bot(command_prefix='$', intents=intents)
    
    
    def get_quote():
        response = requests.get("https://zenquotes.io/api/random")
        data = response.json()
        item = data[0]
        quote = f"{item['q']} - {item['a']}"
        return quote
        
        
    @bot.command()
    async def inspire(ctx):
        #print(dir(ctx))
        #print(ctx.me, ctx.author, ctx.message.content) 
    
        quote = get_quote()
        await ctx.send(quote)
    
    
    bot.run(os.environ['TOKEN'])