【发布时间】:2019-12-10 23:28:46
【问题描述】:
我想通过我的 API 向我的不和谐用户添加角色,withc 发送一个 JSON 字符串及其标签/ID 和角色。
{"errros":[],"success":"true","data":[{"id":"264393690045218816","ranks":"developer,verified"},{"id":"265510731363909632","ranks":"developer"}]}
这个 responseString 在 CheckAccount() 任务中运行。它不是由命令而是由计时器触发的,因此这不起作用,我尝试将其调整为仅使用公会和角色 ID,但无法弄清楚它是如何工作的:
var role = Context.Guild.Roles.FirstOrDefault(x => x.Name == "ROLE NAME");
await (user as IGuildUser).AddRoleAsync(role);
task["id"] = 用户 ID/标签。 rank 是等级名称。
JObject jObject = JObject.Parse(responseString);
JToken jData = jObject["data"];
foreach (var task in jData)
{
string ranks = task["ranks"].ToString();
foreach (string rank in ranks.Split(','))
{
Console.WriteLine(task["id"].ToString() + " recieved rank " + rank);
}
}
最后我想通过 API 发送标签/ID 和角色,然后每小时检查并添加角色。
【问题讨论】:
-
我不确定我是否完全理解什么不起作用。如果您的代码没有在命令中运行,那么
Context来自哪里?此外,您也没有展示如何尝试利用 responseString 中的 Id 和排名来添加角色。执行Console.WriteLine的代码 sn-p 对您的问题也不是很有用......除非我遗漏了什么。 -
@Anu6is
Context来自我在互联网上找到的所有示例。这就是问题所在,我不知道写什么来代替context。这更像是一个插图。而Console.Write只是测试的剩余部分。忘记删除了 -
好的。
Context只是命令模块中提供的一个变量,用于帮助更轻松地在命令中进行引用。你可以用Context做的任何事情都可以用DiscordSocketClient和SocketUserMessage做,因为Context实际上只是两者的结合。如果您可以在计时器中访问您的客户端,那么您可以使用yourClientObject.GetGuild(guild_id_here)来获取公会对象,然后就像上下文示例一样,您可以访问guild.roles。如果您没有用户,您也可以使用 `youGuildObject.GetUser(user_id_here) 从公会获取用户 -
@Anu6is 花了一些时间才弄清楚,但它似乎有效。谢谢。
标签: c# discord.net