Определить, является ли пользователь IRC голосом или выше [бот C # irc] - PullRequest
7 голосов
/ 19 ноября 2011

У меня есть команда, которую я хочу ограничить только определенными рангами. Я использую unreal3.2.6 IRC.

Я прочитал это: enter image description here

Но я все еще не уверен, что я могу сделать, чтобы проверить рейтинг пользователей.

Я хочу посмотреть, является ли пользователь «Голосом» или выше. Что может искать пользователь, и что я могу сделать, чтобы проверить, является ли он голосом или выше? Какие значения для каждого ранга, чтобы я мог проверить?

Я только пытаюсь проверить текущий канал, а не весь IRC-сервер.

Например:

Когда пользователь пытается выполнить команду !roll (Rolls a dice) и не является Голосом или выше, ничего не происходит.

if (data.Equals("!roll"))
{
    //Check if user contains (@,+,etc?) 
    if(nickname.StartsWith(@..+..etc))
    {
        roll(nickname);
    }
}

Ответы [ 2 ]

6 голосов
/ 19 ноября 2011

Вместо того, чтобы запрашивать пользователя с помощью команды WHOIS, вам необходимо запросить соответствующий канал с помощью команды NAMES.

С RFC 2812 - Internet Relay Chat: Client Protocol :

3.2.5 Имена сообщений

Команда: NAMES

Параметры: [ <channel> *( "," <channel> ) [ <target> ] ]

С помощью команды NAMES пользователь может перечислить все псевдонимы, которые ему видны.Подробнее о том, что видно, а что нет, см. «Internet Relay Chat: Управление каналами» [IRC-CHAN] .Параметр <channel> указывает, по какому каналу (каналам) следует возвращать информацию.Нет ответа об ошибке для неправильных названий каналов.

Если параметр <channel> не указан, возвращается список всех каналов и их обитателей.В конце этого списка список пользователей, которые видны, но отсутствуют на каком-либо канале или отсутствуют на видимом канале, перечислены как находящиеся на «канале» «*».

Если <target> если указан параметр, запрос перенаправляется на тот сервер, который сгенерирует ответ.

В параметре <target> допускаются подстановочные знаки.

Числа:

ERR_TOOMANYMATCHES ERR_NOSUCHSERVER
RPL_NAMREPLY RPL_ENDOFNAMES

Примеры:

NAMES #twilight_zone,#42;Команда для перечисления видимых пользователей в #twilight_zone и # 42

NAMES;Команда для вывода списка всех видимых каналов и пользователей

Запрос канала с помощью команды NAMES даст следующие два ответа:

353 RPL_NAMREPLY

"( "=" / "*" / "@" ) <channel>
:[ "@" / "+" ] <nick> *( " " [ "@" / "+" ] <nick> )

  • "@" используется для секретных каналов, "*" для частных каналов и "= "для других (публичные каналы).

, а также:

366 RPL_ENDOFNAMES

"<channel> :End of NAMES list"

Вы можете разбить список ников на символ пробела и определить, является ли первый символ ника идентификатором режима (+, @ и т. Д...) или буквенно-цифровой символ (что означает, что у пользователя нет специального режима на канале.)

Стандарт IRC определяет только + как голосового пользователя и @ как оператора канала, нодругие серверы могут использовать специальные символы, такие как ~ для владельца канала и & для "супер" операторов канала.Как правило, вы можете просто проверить, что у пользователя есть любой режим канала (кроме режима по умолчанию), чтобы убедиться, что он озвучен или лучше.

5 голосов
/ 19 ноября 2011

Если вы не используете API, который предоставляет вам эту информацию, протокол IRC не предоставляет никаких пользовательских модов в "идент @ vhost" в ответе 311 на WHOIS. IRC-боты, о которых я писал в прошлом, вы должны сами отслеживать подобные вещи. Хотя при отправке команды WHOIS <nick> строка ответа 319 будет содержать список каналов, в которых находится ник, и символ @ / + /% / ~ перед каналами, указывающий пользовательские режимы, которые ник имеет в этом канале. Вы можете анализировать их, но это увеличит объем трафика, если вам придется отправлять WHOIS каждый раз, когда кто-то что-то делает в канале.

Когда вы впервые присоединитесь к каналу, вы получите группу 353 <your nick> @ <channel> :<user_list>, где <user_list> может быть:

: снежное облако Чиби-рю CUF Nere ~ thundra vatar nm449 | ноутбук Klapo Apocalypse + Skull_Leader% KagaminBot Разаекель Клоаси и Черри-чан @happytang MagusHrist% Frostii hexerr

Вы можете видеть модификаторы + (голос), % (полуоператор), @ (опера), ~ (владелец) перед каждым ником. Кроме того, если вы выдадите WHO <channel> (в зависимости от сервера вам может потребоваться быть в канале, чтобы получить что-либо обратно), вы получите построчный ответ 352: 352 <your nick> <channel> <user> <host> <server> <nick> <H|G>[*][@|+|%|~] :<hopcount> <real name>. И вы можете разобрать материал после H / G, чтобы получить пользовательские режимы.

Это единственный способ запрашивать пользовательские режимы, но пока ваш бот сидит в канале, он будет получать сообщения типа MODE <channel> +|-<v|h|a|o> <nick>. Поэтому, когда вы видите один из них, вы можете внутренне отслеживать, кто получил + v, или -v и т. Д. Тогда вам не нужно будет отправлять команду на сервер каждый раз, когда кто-то в канале делает "! Roll" "(некоторые IRC-серверы будут пинать вас за флуд, если вы продолжаете отправлять WHOIS).

...