- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我知道带着 200 多行代码来这里寻求帮助并不是一个好的做法,但不幸的是我已经使用了 GPT-4,但它目前没有帮助(可能是由于 2021 年的知识上限)。虽然我已经向它提供了文章试图解决这个问题,但我们都被难住了。这是我的代码:
your textrequire('dotenv').config();
const fs = require('fs');
const { Client, Intents, MessageEmbed, ReactionCollector } = require("discord.js");
const promptsFile = 'prompts.txt';
const cacheFile = 'conversationData.txt';
const BOT_CHANNEL_ID = '1089681927482658930';
let prompts = fs.readFileSync(promptsFile, 'utf-8');
const qaPrompt = `You are a CEO's assistant. Your goal is to help your CEO plan his or her day, create schedules, and stay on track. You also help develop new ideas, etc.\n`;
prompts += qaPrompt;
function getConversationData() {
let conversationData = {};
try {
const conversationDataStr = fs.readFileSync(cacheFile, 'utf-8');
if (conversationDataStr) {
conversationData = JSON.parse(conversationDataStr);
}
} catch (err) {
console.log('Error while reading conversation data:', err);
}
return conversationData;
}
if (!fs.existsSync(cacheFile)) {
fs.writeFileSync(cacheFile, '{}');
console.log(`Created ${cacheFile}`);
}
const client = new Client({
intents: [
"GUILDS",
"GUILD_MESSAGES"
]
})
client.once('ready', () => {
console.log(`Logged in as ${client.user.tag}`);
console.log(`Username: ${client.user.username}`);
console.log(`Discriminator: ${client.user.discriminator}`);
console.log(`Avatar: ${client.user.avatar}`);
console.log(`User ID: ${client.user.id}`);
console.log(`Bot: ${client.user.bot}`);
console.log(`System: ${client.user.system}`);
console.log(`Flags: ${client.user.flags}`);
});
client.login(process.env.BOT_TOKEN)
const PAST_MESSAGES = 8
const STATE_SPACE = 3
const THUMBS_UP = '👍'
const THUMBS_DOWN = '👎'
client.on('messageCreate', async (message) => {
if (message.author.bot) return;
if (message.channel.id !== BOT_CHANNEL_ID) return;
message.channel.sendTyping();
let messages = Array.from(await message.channel.messages.fetch({
limit: PAST_MESSAGES,
before: message.id
}))
messages = messages.map(m => m[1])
messages.unshift(message)
let users = [...new Set([...messages.map(m => m.member?.displayName), client.user.username])]
let lastUser = users.pop()
let conversationData = getConversationData();
const channelId = message.channel.id;
let stateSpace = '';
for (let i = 3; i < messages.length; i += 2) {
const userMsg = messages[i - 2];
const botMsg = messages[i - 1];
const prevBotMsg = messages[i - 3];
stateSpace += `${prevBotMsg.author.username}: ${prevBotMsg.content}\n`;
stateSpace += `${userMsg.author.username}: ${userMsg.content}\n`;
stateSpace += `${botMsg.author.username}: ${botMsg.content}\n`;
}
async function createCompletion(options) {
try {
const axios = require('axios');
const response = await axios({
method: 'post',
url: 'https://api.openai.com/v1/chat',
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${process.env.OPENAI_API_KEY}`
},
data: {
"model": "text-davinci-002",
"prompt": options.messages.map(msg => `${msg.role === "assistant" ? "Assistant" : "User"}: ${msg.content}`).join('\n') + '\n',
"temperature": 0.4,
"max_tokens": 300,
"top_p": 1,
"presence_penalty": 0,
"frequency_penalty": 0,
"stop": "\n"
}
});
return response.data.choices[0].text;
} catch (error) {
console.error(error);
return null;
}
}
// Define the options for the createCompletion function
const options = {
messages: messages.map(msg => ({
role: msg.author.bot ? "assistant" : "user",
content: msg.content
})),
temperature: 0.4,
max_tokens: 300,
top_p: 1,
presence_penalty: 0,
frequency_penalty: 0,
stop: "\n"
};
const response = await createCompletion(options);
if (!response) {
console.error('Error while creating completion');
return;
}
console.log("API response:", response);
const truncatedResponse = (response && response.choices && response.choices.length > 0) ? response.choices[0].text.slice(0, 2000) : 'No response';
console.log("response", response.choices?.[0]?.text || 'No response')
const embed = new MessageEmbed()
.setDescription(response.choices?.[0]?.text || 'No response');
const botMsg = await message.channel.send({ embeds: [embed] });
console.log("embed", embed);
// Add reactions for user feedback
await botMsg.react('👍');
await botMsg.react('👎');
// Create filter for collector
const filter = (reaction, user) => {
return ['👍', '👎'].includes(reaction.emoji.name) && user.id === message.author.id;
};
console.log("botMsg", botMsg);
// Create collector to wait for user feedback
const collector = botMsg.createReactionCollector({ filter, time: 60000, max: 1 });
collector.on('collect', async (reaction) => {
let userFeedback = '';
if (reaction.emoji.name === '👍') {
userFeedback = 'positive';
} else if (reaction.emoji.name === '👎') {
userFeedback = 'negative';
}
// Update conversation data with user feedback
if (!conversationData[channelId]) {
conversationData[channelId] = [];
}
conversationData[channelId].push({
author: message.author.username,
content: userFeedback
});
// Save conversation data to file
fs.writeFileSync(cacheFile, JSON.stringify(conversationData));
console.log(`The conversation data for channel ${channelId} has been cached.`);
// If user gives negative feedback, ask for clarification
if (userFeedback === 'negative') {
const followUpEmbed = new MessageEmbed()
.setDescription("I'm sorry to hear that. Could you please provide more information on what I can do better?");
await message.channel.send({ embeds: [followUpEmbed] });
}
});
collector.on('end', async (collected) => {
// If no feedback is collected, assume neutral feedback
if (collected.size === 0) {
// Update conversation data with neutral feedback
if (!conversationData[channelId]) {
conversationData[channelId] = [];
}
conversationData[channelId].push({
author: message.author.username,
content: message.content
});
// Save conversation data to file
fs.writeFileSync(cacheFile, JSON.stringify(conversationData));
console.log(`The conversation data for channel ${channelId} has been cached.`);
// Update conversation data with the latest message
if (!conversationData[channelId]) {
conversationData[channelId] = [];
}
conversationData[channelId].push({
author: message.author.username,
content: message.content
});
// Save conversation data to file
fs.writeFileSync(cacheFile, JSON.stringify(conversationData));
console.log(`The conversation data for channel ${channelId} has been cached.`);
}})});
这是我的错误:
PS C:\Users\AJBEATX\Desktop\GPT-3-discord-chatbot-backupmain> node index.js
Logged in as [SDO] Assistant#3551
Username: [SDO] Assistant
Discriminator: 3551
Avatar: 87ac387bc9fb8a963f90b4260f7e711d
User ID: 1077722654288658442
Bot: true
System: false
Flags: [object Object]
AxiosError: Request failed with status code 404
at settle (C:\Users\AJBEATX\Desktop\GPT-3-discord-chatbot-backupmain\node_modules\axios\dist\node\axios.cjs:1900:12)
at IncomingMessage.handleStreamEnd (C:\Users\AJBEATX\Desktop\GPT-3-discord-chatbot-backupmain\node_modules\axios\dist\node\axios.cjs:2952:11)
at IncomingMessage.emit (node:events:525:35)
at endReadableNT (node:internal/streams/readable:1359:12)
at process.processTicksAndRejections (node:internal/process/task_queues:82:21) {
code: 'ERR_BAD_REQUEST',
config: {
transitional: {
silentJSONParsing: true,
forcedJSONParsing: true,
clarifyTimeoutError: false
},
adapter: [ 'xhr', 'http' ],
transformRequest: [ [Function: transformRequest] ],
transformResponse: [ [Function: transformResponse] ],
timeout: 0,
xsrfCookieName: 'XSRF-TOKEN',
xsrfHeaderName: 'X-XSRF-TOKEN',
maxContentLength: -1,
maxBodyLength: -1,
env: { FormData: [Function], Blob: [class Blob] },
validateStatus: [Function: validateStatus],
headers: AxiosHeaders {
Accept: 'application/json, text/plain, */*',
'Content-Type': 'application/json',
Authorization: 'Bearer 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',
'User-Agent': 'axios/1.3.4',
'Content-Length': '342',
'Accept-Encoding': 'gzip, compress, deflate, br'
},
method: 'post',
url: 'https://api.openai.com/v1/chat',
data: '{"model":"text-davinci-002","prompt":"User: Hey there\\nUser: Hello assistant\\nUser: Hello?\\nUser: Hello assistant, how are you?\\nUser: Hello assist\\nUser: Good evening assistant. How are you today?\\nUser: Hello?\\nUser: Hello?\\nAssistant: \\n","temperature":0.4,"max_tokens":300,"top_p":1,"presence_penalty":0,"frequency_penalty":0,"stop":"\\n"}'
},
request: <ref *1> ClientRequest {
_events: [Object: null prototype] {
abort: [Function (anonymous)],
aborted: [Function (anonymous)],
connect: [Function (anonymous)],
error: [Function (anonymous)],
socket: [Function (anonymous)],
timeout: [Function (anonymous)],
finish: [Function: requestOnFinish]
},
_eventsCount: 7,
_maxListeners: undefined,
outputData: [],
outputSize: 0,
writable: true,
destroyed: false,
_last: true,
chunkedEncoding: false,
shouldKeepAlive: false,
maxRequestsOnConnectionReached: false,
_defaultKeepAlive: true,
useChunkedEncodingByDefault: true,
sendDate: false,
_removedConnection: false,
_removedContLen: false,
_removedTE: false,
strictContentLength: false,
_contentLength: '342',
_hasBody: true,
_trailer: '',
finished: true,
_headerSent: true,
_closed: false,
socket: TLSSocket {
_tlsOptions: [Object],
_secureEstablished: true,
_securePending: false,
_newSessionPending: false,
_controlReleased: true,
secureConnecting: false,
_SNICallback: null,
servername: 'api.openai.com',
alpnProtocol: false,
authorized: true,
authorizationError: null,
encrypted: true,
_events: [Object: null prototype],
_eventsCount: 10,
connecting: false,
_hadError: false,
_parent: null,
_host: 'api.openai.com',
_closeAfterHandlingError: false,
_readableState: [ReadableState],
_maxListeners: undefined,
_writableState: [WritableState],
allowHalfOpen: false,
_sockname: null,
_pendingData: null,
_pendingEncoding: '',
server: undefined,
_server: null,
ssl: [TLSWrap],
_requestCert: true,
_rejectUnauthorized: true,
parser: null,
_httpMessage: [Circular *1],
[Symbol(res)]: [TLSWrap],
[Symbol(verified)]: true,
[Symbol(pendingSession)]: null,
[Symbol(async_id_symbol)]: 188,
[Symbol(kHandle)]: [TLSWrap],
[Symbol(lastWriteQueueSize)]: 0,
[Symbol(timeout)]: null,
[Symbol(kBuffer)]: null,
[Symbol(kBufferCb)]: null,
[Symbol(kBufferGen)]: null,
[Symbol(kCapture)]: false,
[Symbol(kSetNoDelay)]: false,
[Symbol(kSetKeepAlive)]: true,
[Symbol(kSetKeepAliveInitialDelay)]: 60,
[Symbol(kBytesRead)]: 0,
[Symbol(kBytesWritten)]: 0,
[Symbol(connect-options)]: [Object]
},
_header: 'POST /v1/chat HTTP/1.1\r\n' +
'Accept: application/json, text/plain, */*\r\n' +
'Content-Type: application/json\r\n' +
'Authorization: Bearer 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\r\n' +
'User-Agent: axios/1.3.4\r\n' +
'Content-Length: 342\r\n' +
'Accept-Encoding: gzip, compress, deflate, br\r\n' +
'Host: api.openai.com\r\n' +
'Connection: close\r\n' +
'\r\n',
_keepAliveTimeout: 0,
_onPendingData: [Function: nop],
agent: Agent {
_events: [Object: null prototype],
_eventsCount: 2,
_maxListeners: undefined,
defaultPort: 443,
protocol: 'https:',
options: [Object: null prototype],
requests: [Object: null prototype] {},
sockets: [Object: null prototype],
freeSockets: [Object: null prototype] {},
keepAliveMsecs: 1000,
keepAlive: false,
maxSockets: Infinity,
maxFreeSockets: 256,
scheduling: 'lifo',
maxTotalSockets: Infinity,
totalSocketCount: 1,
maxCachedSessions: 100,
_sessionCache: [Object],
[Symbol(kCapture)]: false
},
socketPath: undefined,
method: 'POST',
maxHeaderSize: undefined,
insecureHTTPParser: undefined,
joinDuplicateHeaders: undefined,
path: '/v1/chat',
_ended: true,
res: IncomingMessage {
_readableState: [ReadableState],
_events: [Object: null prototype],
_eventsCount: 4,
_maxListeners: undefined,
socket: [TLSSocket],
httpVersionMajor: 1,
httpVersionMinor: 1,
httpVersion: '1.1',
complete: true,
rawHeaders: [Array],
rawTrailers: [],
joinDuplicateHeaders: undefined,
aborted: false,
upgrade: false,
url: '',
method: null,
statusCode: 404,
statusMessage: 'NOT FOUND',
client: [TLSSocket],
_consuming: false,
_dumped: false,
req: [Circular *1],
responseUrl: 'https://api.openai.com/v1/chat',
redirects: [],
[Symbol(kCapture)]: false,
[Symbol(kHeaders)]: [Object],
[Symbol(kHeadersCount)]: 18,
[Symbol(kTrailers)]: null,
[Symbol(kTrailersCount)]: 0
},
aborted: false,
timeoutCb: null,
upgradeOrConnect: false,
parser: null,
maxHeadersCount: null,
reusedSocket: false,
host: 'api.openai.com',
protocol: 'https:',
_redirectable: Writable {
_writableState: [WritableState],
_events: [Object: null prototype],
_eventsCount: 3,
_maxListeners: undefined,
_options: [Object],
_ended: true,
_ending: true,
_redirectCount: 0,
_redirects: [],
_requestBodyLength: 342,
_requestBodyBuffers: [],
_onNativeResponse: [Function (anonymous)],
_currentRequest: [Circular *1],
_currentUrl: 'https://api.openai.com/v1/chat',
[Symbol(kCapture)]: false
},
[Symbol(kCapture)]: false,
[Symbol(kBytesWritten)]: 0,
[Symbol(kEndCalled)]: true,
[Symbol(kNeedDrain)]: false,
[Symbol(corked)]: 0,
[Symbol(kOutHeaders)]: [Object: null prototype] {
accept: [Array],
'content-type': [Array],
authorization: [Array],
'user-agent': [Array],
'content-length': [Array],
'accept-encoding': [Array],
host: [Array]
},
[Symbol(errored)]: null,
[Symbol(kUniqueHeaders)]: null
},
response: {
status: 404,
statusText: 'NOT FOUND',
headers: AxiosHeaders {
date: 'Tue, 28 Mar 2023 18:00:05 GMT',
'content-type': 'application/json',
'content-length': '140',
connection: 'close',
'access-control-allow-origin': '*',
'openai-version': '2020-10-01',
'x-request-id': '1bde8165caa0c3e9cb191ef3b4d4db95',
'openai-processing-ms': '4',
'strict-transport-security': 'max-age=15724800; includeSubDomains'
},
config: {
transitional: [Object],
adapter: [Array],
transformRequest: [Array],
transformResponse: [Array],
timeout: 0,
xsrfCookieName: 'XSRF-TOKEN',
xsrfHeaderName: 'X-XSRF-TOKEN',
maxContentLength: -1,
maxBodyLength: -1,
env: [Object],
validateStatus: [Function: validateStatus],
headers: [AxiosHeaders],
method: 'post',
url: 'https://api.openai.com/v1/chat',
data: '{"model":"text-davinci-002","prompt":"User: Hey there\\nUser: Hello assistant\\nUser: Hello?\\nUser: Hello assistant, how are you?\\nUser: Hello assist\\nUser: Good evening assistant. How are you today?\\nUser: Hello?\\nUser: Hello?\\nAssistant: \\n","temperature":0.4,"max_tokens":300,"top_p":1,"presence_penalty":0,"frequency_penalty":0,"stop":"\\n"}'
},
request: <ref *1> ClientRequest {
_events: [Object: null prototype],
_eventsCount: 7,
_maxListeners: undefined,
outputData: [],
outputSize: 0,
writable: true,
destroyed: false,
_last: true,
chunkedEncoding: false,
shouldKeepAlive: false,
maxRequestsOnConnectionReached: false,
_defaultKeepAlive: true,
useChunkedEncodingByDefault: true,
sendDate: false,
_removedConnection: false,
_removedContLen: false,
_removedTE: false,
strictContentLength: false,
_contentLength: '342',
_hasBody: true,
_trailer: '',
finished: true,
_headerSent: true,
_closed: false,
socket: [TLSSocket],
_header: 'POST /v1/chat HTTP/1.1\r\n' +
'Accept: application/json, text/plain, */*\r\n' +
'Content-Type: application/json\r\n' +
'Authorization: Bearer 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\r\n' +
'User-Agent: axios/1.3.4\r\n' +
'Content-Length: 342\r\n' +
'Accept-Encoding: gzip, compress, deflate, br\r\n' +
'Host: api.openai.com\r\n' +
'Connection: close\r\n' +
'\r\n',
_keepAliveTimeout: 0,
_onPendingData: [Function: nop],
agent: [Agent],
socketPath: undefined,
method: 'POST',
maxHeaderSize: undefined,
insecureHTTPParser: undefined,
joinDuplicateHeaders: undefined,
path: '/v1/chat',
_ended: true,
res: [IncomingMessage],
aborted: false,
timeoutCb: null,
upgradeOrConnect: false,
parser: null,
maxHeadersCount: null,
reusedSocket: false,
host: 'api.openai.com',
protocol: 'https:',
_redirectable: [Writable],
[Symbol(kCapture)]: false,
[Symbol(kBytesWritten)]: 0,
[Symbol(kEndCalled)]: true,
[Symbol(kNeedDrain)]: false,
[Symbol(corked)]: 0,
[Symbol(kOutHeaders)]: [Object: null prototype],
[Symbol(errored)]: null,
[Symbol(kUniqueHeaders)]: null
},
data: { error: [Object] }
}
}
Error while creating completion
任何帮助将不胜感激!!!
我尝试了一些东西,主要是在 Axios 和 OpenAI 的 npm (节点?)之间切换(我是新人,抱歉)。不幸的是,GPT 告诉我此时必须使用 Axios 才能获得响应,因为我使用的是 gpt-3.5-turbo
目标显然只是制作一个使用 Turbo 响应用户的 Discord 机器人。我还想包括学习,因此对不和谐嵌入的 react 是“竖起大拇指”或“竖起大拇指”按钮。最终我将使用 GPT-4 来帮助完成该部分,但现在我只希望代码能够正常工作。
我的环境变量已正确存储在 .env 中,并且 key 和不和谐机器人 token 是正确的。
最佳答案
我建议阅读API reference但我发现这段代码存在一些主要问题:
{
"model": "text-davinci-002", // <-- this is an invalid model
"prompt": options.messages.map(msg => `${msg.role === "assistant" ? "Assistant" : "User"}: ${msg.content}`).join('\n') + '\n',
"temperature": 0.4,
"max_tokens": 300,
"top_p": 1,
"presence_penalty": 0,
"frequency_penalty": 0,
"stop": "\n"
}
您应该改用“gpt-3.5-turbo”
。
https://api.openai.com/v1/chat
应该是
https://api.openai.com/v1/chat/completions
{
"model": "gpt-3.5-turbo",
"messages": options.messages, // <-- change your code to look like this
"temperature": 0.4,
"max_tokens": 300,
"top_p": 1,
"presence_penalty": 0,
"frequency_penalty": 0,
"stop": "\n"
}
旁注:我讨厌成为那样的人,但请自己编写代码。一团糟。 createCompletion 的选项对象直接在消息之外不起作用。很明显,考虑到代码中散布的所有错误和反模式,这是人工智能生成的。
关于discord.js - gpt-3.5-turbo 的 Discord 机器人帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75869648/
当我在 repl.it 上运行我的 discord 机器人时,出现错误。在错误中,我在下面看到了一些 HTML 代码。 CloudFlare 似乎阻止了我的机器人访问 Discord。这是什么原因造成
我计划使用 python 制作一个不和谐的机器人。 discord.py 和 discord.py[voice] 有什么区别? 最佳答案 discord.py 和 discord[voice] 之间的
我正在尝试编写一个脚本来检测用户是否以及何时将他们在 discord 上的名称从“bob”更改为“.bob”之类的名称,它会禁止此更改并将其保留为“bob”。 if (user.nickname.st
我想使用 Discord Bot 向用户发送私有(private)消息。 用户与机器人不在同一台服务器上。 如果我可以使用 author.sendMessage,我该如何初始化(查找)作者变量? 我可
我正在尝试将某人添加到特定服务器,然后通过 DM 只用不和谐 ID 表示该人。 它的工作方式是,有人在网站上使用 Discord OAuth2 登录自己,登录后他应该被添加到特定服务器,然后机器人应该
我无法弄清楚如何使用类似于 /giphy、/xivdb 等的实时“反馈”来实现斜杠命令。没有公共(public) API 吗? ?我正在使用 discord.py,但我想这对于这个问题来说并不重要。
我正在尝试使用 Discord Bot 在 discord 服务器上创建一个类别,但我无法在 Internet 上找到该方法或其他内容。我还看了“discord.js.org”。然后我认为没有任何可能
我正在为桌面创建灯,当我的麦克风在 Discord 上处于事件状态时,该灯将为绿色,当我的麦克风静音时,该灯将为红色。所以我想从不和谐中获取我的麦克风状态。但我不知道怎么做。 当我不在进行语音聊天时,
我已经看到了您允许某个角色使用命令的变体。但是,我试图实现完全相反的效果:如何禁止某个角色使用命令。 我搜索了堆栈溢出,没有找到答案,也没有在 discord.py 官方文档上找到答案。任何形式的帮助
我开发了自己的简单 discord bot(使用 discord.js)并将其部署到节点服务器。 一切正常。 现在我想为它添加更多功能。在开发过程中,我想在本地进行测试(当然)。 问题是:我可以在本地
我正在使用 Discord.js 创建一个基本的 Discord 机器人。当机器人第一次启动时,我运行 client.guilds.array()获取机器人当前订阅的所有公会的列表。我将其保存到其他程
我想为付费成员(member)提供 Discord 服务器。我想我可以让他们通过 Stripe 付款,向他们发送付款邀请,然后定期运行 Python 脚本,该脚本检查我的所有 Discord 成员是否
我试图向我的机器人添加一些新功能,但它最终没有工作,所以我删除了新代码,现在它不会响应任何命令。它仍然在线,但正如我之前所说,它完全没有响应。我已经查看了代码,但找不到问题。我对编码机器人还是个新手,
我正在编写一个建议机器人,它应该将玩家的建议发送到我服务器中的建议 channel ,并在建议 channel 中用一些表情符号使用react。 问题是使用“消息”作为消息参数会对发送到触发代码的消息
我想创建一个清除命令,如果 example .clear @user#0000 100 它将清除@user#0000 发送的最后 100 条消息。这是我的代码: @commands.comma
所以,我想为我的机器人创建一个命令,它可以从给定的消息 ID 中获取所有反应并将这三个类别存储到数组中,对于每个 react : react 的名称(例如:smile:) 使用react的用户(例如
我正在尝试在 discord.js 上制作一个简单的右舷系统,删除消息部分让我很困惑。目前,如果一条消息获得星号,则会在右舷 channel 创建一个嵌入,而且至关重要的是,页脚是原始消息的 ID。我
我最近启动了一个新的 discord.js 机器人,但出现“无效 token ”错误。这不可能是因为 async 功能,因为我只启动了机器人并且我有 0 个命令,上次发生这种情况是当我试图在 hero
我正在尝试向我的机器人添加一条命令,该命令会回复用户邀请到服务器的总人数 我的代码: if message.content.startswith('!invites'): totalInvit
我在一些服务器/公会中添加了一个 Discord 机器人。我可以使用此处提供的资源获得特定公会: https://discord.com/developers/docs/resources/guild
我是一名优秀的程序员,十分优秀!