Discord.NET назначение ролей - PullRequest
       19

Discord.NET назначение ролей

0 голосов
/ 03 сентября 2018

Я пытаюсь заставить моего бота разногласия назначить роль пользователю, когда он вводит команду '! Stream'. Я очень новичок в программировании на c # и особенно на discord.net. Прямо сейчас у меня есть код, который должен назначать роль внутри метода получения сообщения. Вероятно, это не лучший способ сделать это, но я не уверен, что сейчас лучший способ. В любом случае, вот код:

IGuildUser user = (IGuildUser)arg.Author;
IRole role = ((IGuildChannel)arg.Channel).Guild.GetRole(theRoleID);
if (arg.Content == "!stream") {
    await (user as IGuildUser).AddRoleAsync(role);
}

Я убедился, что и пользователь, и роль получают правильного пользователя и правильную роль. Он также выполняет оператор if, потому что у меня есть вывод внутри него. Единственное, что не работает, - это фактическое назначение. Любая помощь очень ценится. Спасибо!

Ответы [ 2 ]

0 голосов
/ 05 сентября 2018

Если все на стороне кода уже работает, у вас может быть проблема с разрешениями на самом сервере Discord, однажды случившаяся со мной, когда я пытался выполнить некоторую модерацию, и это не сработало для меня. Оказывается, проблема была просто в иерархии ролей на сервере раздора, в основном роль, в которой бот может влиять только на тех, кто под ним, например, снимок экрана:

Discord role hierarchy

Вы заметите, что под Admin есть роль Inquisition. Это бот, который должен быть на вершине любой другой роли, чтобы иметь возможность взаимодействовать с этими пользователями, поэтому я советую вам попытаться переместить своего бота вверх по лестнице ролей и посмотреть, решит ли это вашу проблему.

0 голосов
/ 04 сентября 2018

Привет, Солонс, твой способ добавления роли почти правильный, но вместо твоего способа сделать это, используя if s, используй уже добавленный способ добавления новых команд своему боту. Я предполагаю, что ! - это ваш префикс, а stream - это команда / слово, которое вы хотите, чтобы бот прочитал, и соответственно добавьте роль. Дайте мне знать, если ваше дело не то, что я предполагаю.

Так вот как это в идеале должно быть сделано.

  1. Создайте открытый класс и сделайте его наследуемым от ModuleBase<SocketCommandContext>, чтобы он выглядел как public class Matches : ModuleBase<SocketCommandContext>.
  2. Как только вы закончите, вы можете использовать [Command("stream")] для установки любых команд, которые вы хотите для бота.

А способ добавления ролей выглядит примерно так

[Command("stream")]
public async Task RoleTask()
{
    ulong roleId = 486599202093269012;
    var role = Context.Guild.GetRole(roleId);
    await ((SocketGuildUser) Context.User).AddRoleAsync(role);
}

При этом бот (если у него достаточно разрешений) должен предоставить роль с roleId пользователю, отправляющему команду. то есть !stream

Также вы знаете, что если вы собираетесь начать, я бы действительно посоветовал вам взглянуть на отличную документацию по http://docs.stillu.cc, и еще один хороший способ - посмотреть примеры для изучения. Этот - это бот, который я пробил далеко назад, когда только начинал. Может быть, вы могли бы научиться.

...