Discord 机器人停止通过 Heroku 工作,离线工作正常
Discord bot stopped working through Heroku, works fine offline
解决了!在下面回答。
编辑:清理此 post 以保持一切清晰。
这是一个简单的 GIF 机器人的代码。
重要的是:这个机器人离线工作,当我发送 ! 命令时给出一个 gif。这个机器人 与 Heroku 联机 ,所以这也很好。 不 工作是在机器人在线时发送命令以接收 gif。所以代码有效,但我无法通过在线模式下的命令使其进入工作状态。
代码
import random
import discord
import giphy_client
from discord.ext.commands import Bot
from giphy_client.rest import ApiException
discord_token = *hidden for Whosebug*
giphy_token = *hidden for Whosebug*
api_instance = giphy_client.DefaultApi()
def search_gifs(query):
try:
return api_instance.gifs_search_get(giphy_token, query, limit=100, rating = 'PG13')
except ApiException as e:
return "Exception when calling DefaultApi->gifs_search_get: %s\n" % e
def gif_response(emotion):
gifs = search_gifs(emotion)
lst = list(gifs.data)
gif = random.choices(lst)
return gif[0].url
class DiscordClient(discord.Client):
async def on_ready(self):
print("Login as")
print(self.user)
print("-------")
async def on_message(self, message):
if message.author != self.user:
if message.content == '!vibe':
await message.channel.send(gif_response('vibing'))
if message.content == '!dragony':
await message.channel.send(gif_response('dragon'))
if message.content == '!gm':
await message.channel.send(gif_response('gm'))
intents = discord.Intents(messages=True, guilds=True, guild_messages=True)
client = DiscordClient(intents=intents)
# client = DiscordClient()
client.run(discord_token)
需求文件 (requirements.txt)
git+https://github.com/Rapptz/discord.py
PyNaCl==1.3.0
dnspython==1.16.0
async-timeout==3.0.1
pandas
giphy_client==1.0.0
Procfile
worker: python gif_bot.py
部署时的日志
2022-04-21T11:46:39.000000+00:00 app[api]: Build started by user
2022-04-21T11:47:14.667290+00:00 app[api]: Deploy x by user
2022-04-21T11:47:14.667290+00:00 app[api]: Release v11 created by user
2022-04-21T11:47:15.800842+00:00 heroku[worker.1]: State changed from crashed to starting
2022-04-21T11:47:21.019690+00:00 heroku[worker.1]: Starting process with command `python gif_bot.py`
2022-04-21T11:47:21.640978+00:00 heroku[worker.1]: State changed from starting to up
2022-04-21T11:47:25.392719+00:00 app[worker.1]: Login as
2022-04-21T11:47:25.392731+00:00 app[worker.1]: Gif Bot#8552
2022-04-21T11:47:25.392732+00:00 app[worker.1]: -------
2022-04-21T11:47:29.000000+00:00 app[api]: Build succeeded
对于较新版本的 discord,您需要传递您的意图。本质上告诉 discord 你将要使用什么事件和一些缓存内容。一个简单的思考方式就像你打算做什么或权限。
对于您的示例,请尝试以下操作
intents = discord.Intents.default()
intents.message_content = True
然后修复您的客户端以包含指定的意图
client = DiscordClient(intents=intents)
在这里阅读更多关于它们的信息:https://discordpy.readthedocs.io/en/stable/intents.html
注意:如果您打算做更复杂的事情,则必须添加更多意图。
@smerkd 帮我解答了!
在意图中添加“message_content = True”使其生效。
代码
intents = discord.Intents(messages=True, message_content=True, guilds=True, guild_messages=True)
解决了!在下面回答。
编辑:清理此 post 以保持一切清晰。
这是一个简单的 GIF 机器人的代码。 重要的是:这个机器人离线工作,当我发送 ! 命令时给出一个 gif。这个机器人 与 Heroku 联机 ,所以这也很好。 不 工作是在机器人在线时发送命令以接收 gif。所以代码有效,但我无法通过在线模式下的命令使其进入工作状态。
代码
import random
import discord
import giphy_client
from discord.ext.commands import Bot
from giphy_client.rest import ApiException
discord_token = *hidden for Whosebug*
giphy_token = *hidden for Whosebug*
api_instance = giphy_client.DefaultApi()
def search_gifs(query):
try:
return api_instance.gifs_search_get(giphy_token, query, limit=100, rating = 'PG13')
except ApiException as e:
return "Exception when calling DefaultApi->gifs_search_get: %s\n" % e
def gif_response(emotion):
gifs = search_gifs(emotion)
lst = list(gifs.data)
gif = random.choices(lst)
return gif[0].url
class DiscordClient(discord.Client):
async def on_ready(self):
print("Login as")
print(self.user)
print("-------")
async def on_message(self, message):
if message.author != self.user:
if message.content == '!vibe':
await message.channel.send(gif_response('vibing'))
if message.content == '!dragony':
await message.channel.send(gif_response('dragon'))
if message.content == '!gm':
await message.channel.send(gif_response('gm'))
intents = discord.Intents(messages=True, guilds=True, guild_messages=True)
client = DiscordClient(intents=intents)
# client = DiscordClient()
client.run(discord_token)
需求文件 (requirements.txt)
git+https://github.com/Rapptz/discord.py
PyNaCl==1.3.0
dnspython==1.16.0
async-timeout==3.0.1
pandas
giphy_client==1.0.0
Procfile
worker: python gif_bot.py
部署时的日志
2022-04-21T11:46:39.000000+00:00 app[api]: Build started by user
2022-04-21T11:47:14.667290+00:00 app[api]: Deploy x by user
2022-04-21T11:47:14.667290+00:00 app[api]: Release v11 created by user
2022-04-21T11:47:15.800842+00:00 heroku[worker.1]: State changed from crashed to starting
2022-04-21T11:47:21.019690+00:00 heroku[worker.1]: Starting process with command `python gif_bot.py`
2022-04-21T11:47:21.640978+00:00 heroku[worker.1]: State changed from starting to up
2022-04-21T11:47:25.392719+00:00 app[worker.1]: Login as
2022-04-21T11:47:25.392731+00:00 app[worker.1]: Gif Bot#8552
2022-04-21T11:47:25.392732+00:00 app[worker.1]: -------
2022-04-21T11:47:29.000000+00:00 app[api]: Build succeeded
对于较新版本的 discord,您需要传递您的意图。本质上告诉 discord 你将要使用什么事件和一些缓存内容。一个简单的思考方式就像你打算做什么或权限。
对于您的示例,请尝试以下操作
intents = discord.Intents.default()
intents.message_content = True
然后修复您的客户端以包含指定的意图
client = DiscordClient(intents=intents)
在这里阅读更多关于它们的信息:https://discordpy.readthedocs.io/en/stable/intents.html
注意:如果您打算做更复杂的事情,则必须添加更多意图。
@smerkd 帮我解答了!
在意图中添加“message_content = True”使其生效。
代码
intents = discord.Intents(messages=True, message_content=True, guilds=True, guild_messages=True)