Discord.net如何处理Auditlog.data
Discord.net how to process Auditlog.data
我目前正在研究一个机器人命令,它应该检查用户是否具有角色“foobar”。如果是这样,我想在他被分配那个角色时阅读审计日志。我可以获取审计日志并读取结果等,但我无法处理数据。我尝试了很多不同的方法,但每次我都以 audit.data.Equals、.GetHashCode、.GetType 或 .ToString.
结束
我试图通过 foreach 解析 audit.data,但这也不起作用,因为 .data 没有 GetEnumerator 实例。
public async Task GetUsers()
{
var userlist = Context.Guild.Users;
var channellist = Context.Guild.Channels;
foreach(var s in userlist)
{
if (!(s.IsBot))
{
foreach (var userrole in s.Roles)
{
if (userrole.ToString() == "foobar")
{
var auditlogs = Context.Guild.GetAuditLogsAsync(10, null, null, s.Id, ActionType.MemberRoleUpdated).FlattenAsync();
foreach (var audit in auditlogs.Result)
{
Console.WriteLine(audit.Data.GetType());
IAuditLogData auditdata = audit.Data;
foreach (var datalog in audit.Data)
{
}
}
}
}
}
}
}
您不能直接读取 IAuditLogData,因为它是所有不同审计日志数据类型的接口。您需要先施放它,然后才能使用它。
这样的事情应该有效:
foreach (var audit in auditlogs.Result)
{
if (audit.Data is MemberRoleAuditLogData data)
{
// use the "data" variable here
}
}
但是,正如评论中提到的,审计日志数据不会永远存在,您最好使用事件并将此信息存储在数据库中。此外,您不能按更新的人进行搜索,您的示例搜索谁进行了更新(在您的情况下听起来像机器人)。您需要为 data.Target
.
添加另一个过滤器
我目前正在研究一个机器人命令,它应该检查用户是否具有角色“foobar”。如果是这样,我想在他被分配那个角色时阅读审计日志。我可以获取审计日志并读取结果等,但我无法处理数据。我尝试了很多不同的方法,但每次我都以 audit.data.Equals、.GetHashCode、.GetType 或 .ToString.
结束我试图通过 foreach 解析 audit.data,但这也不起作用,因为 .data 没有 GetEnumerator 实例。
public async Task GetUsers()
{
var userlist = Context.Guild.Users;
var channellist = Context.Guild.Channels;
foreach(var s in userlist)
{
if (!(s.IsBot))
{
foreach (var userrole in s.Roles)
{
if (userrole.ToString() == "foobar")
{
var auditlogs = Context.Guild.GetAuditLogsAsync(10, null, null, s.Id, ActionType.MemberRoleUpdated).FlattenAsync();
foreach (var audit in auditlogs.Result)
{
Console.WriteLine(audit.Data.GetType());
IAuditLogData auditdata = audit.Data;
foreach (var datalog in audit.Data)
{
}
}
}
}
}
}
}
您不能直接读取 IAuditLogData,因为它是所有不同审计日志数据类型的接口。您需要先施放它,然后才能使用它。 这样的事情应该有效:
foreach (var audit in auditlogs.Result)
{
if (audit.Data is MemberRoleAuditLogData data)
{
// use the "data" variable here
}
}
但是,正如评论中提到的,审计日志数据不会永远存在,您最好使用事件并将此信息存储在数据库中。此外,您不能按更新的人进行搜索,您的示例搜索谁进行了更新(在您的情况下听起来像机器人)。您需要为 data.Target
.