Project

General

Profile

Feature #1691

IRC-подобные команды отправки статуса.

Added by Mellon over 6 years ago. Updated about 6 years ago.

Status:
Closed
Priority:
Normal
Assignee:
Category:
Plugins: Azoth
Target version:
Start date:
07/21/2014
Due date:
% Done:

100%

Estimated time:
20.00 h

Description

Представлены две команды:
  • /presence - позволяет менять основной(главный) статус присутствия;
  • /chatpresence (синоним - /thispresence) - позволяет менять статус присутствия в текущем чате/конференции (так называемый "directed presence")

Использование.
Обе команды имеют схожий синтаксис.

/presence [ account name | * ] <[ presence | clear ] |
[ status message ]>

/chatpresence <[ presence | clear ] |
[ status message ]>

Где:
'[ account name | * ]' - опциональное имя аккаунта для которого меняется статус, либо '*' - все аккаунты, если ничего не указано, то смена статуса осуществляется для аккаунта, которому принадлежит текущий чаттаб.

'[ presence | clear ]' опциональные имена статусов:
  • available -- user is available;
  • avail -- shortcut for "available";
  • away -- user is away;
  • xa -- user is extended away;
  • dnd -- user doesn't want to be disturbed;
  • chat -- user is free for chat;
  • имя сохраненного особого статуса;
    либо команда 'clear' очистки сообщения в статусе (сам статус при этом не меняется).

'[ status message ]' - опциональное сообщение в статусе.

Не смотря на то, что и '[ presence | clear ]' и '[ status message ]' опциональны, один из этих параметров ДОЛЖЕН присутствовать. Иначе команда не будет иметь смысла и, соответственно, при этом должно вывестись сообщение с описанием корректного использования команды.

При условии, что из этих двух параметров, указан только '+presence+', сообщение статуса должно менятся на соотвествующее (преднастроенное) сообщение соответствующее данному статусу.

При условии, что из этих двух параметров, указан только '+status message+', должна происходить только смена сообщение статуса, сам статус при этом не должен меняться.

Данная логика реализована в ткаббере http://svn.xmpp.ru/repos/tkabber/trunk/tkabber-plugins/presencecmd/presencecmd.tcl и описана в http://svn.xmpp.ru/repos/tkabber/trunk/tkabber-plugins/presencecmd/README

И её, типа менять можно, и типа обсудить чтоле, вот. Ну, или просто взять и заделоть.

#1

Updated by 0xd34df00d about 6 years ago

  • Target version set to 0.6.75
  • Status changed from New to Assigned
#2

Updated by 0xd34df00d about 6 years ago

  • Estimated time set to 10.00 h
  • % Done changed from 0 to 100
  • Status changed from Assigned to Resolved
#3

Updated by 0xd34df00d about 6 years ago

Реализовал всё не совсем так, хелп потом добавлю.

#4

Updated by Mellon about 6 years ago

Хорошо, начнем.
Видимо, сделано как-то так:

/presence < account name | * >
<presence | clear>
[ status message ]

Чтож, основной и главной целью всей этой херни с IRC-подобными командами является облегчение и ускорение взаимодействия пользователя с программой. Не придание прграаме новых функций, не улучшение вида и работы программы. нет. Главное - сократить действия пользователя до такой степени, чтобы ему было лень тянутся к мышке, или тачпаду.

И вся та херь про опциональность аргументов в фичреквесте указана не просто так, а для сокращения действий пользователя в тех случаях, когда отсутствие аргумента придает команде определенный смысл.

Ок, в принципе, необходимость разноса разных аргументов по строкам ещё терпима, но всё остальное....

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

Обязательность указания статуса так же не добавляет удобства. Можно же просто проанализировать первое слово и сравнить его с именами статсусов и 'clear', если совпадение найдено, то это статус, если нет, то текст статуса, а сам статус остается неизменным. В принципе, тоже самое можно проделать и с именами аккаунтов убрав небходимость разноса аргументов по строкам.

Кроме того, пункт

При условии, что из этих двух параметров, указан только '+presence+', сообщение статуса должно меняться на соотвествующее (преднастроенное) сообщение соответствующее данному статусу.

избавляет пользователя от необходимости набивать самому уже преднастроенный текст статуса.

/chatpresence не работает:

[06:43:19] * Cannot execute /chatpresence dnd. This entry doesn't support directed presence.
[06:43:28] * Cannot execute /chatpresence
dnd. This entry doesn't support directed presence.

в ткаббере работает норм, по крайней мере в жрушных конфочках.

В общем я тут раскритиковал так будто ты что-то должен, на самом деле нет, в принципе, всё кроме /chatpresence работает и после его фикса можно реквест закрывать, если тебе норм.

#5

Updated by 0xd34df00d about 6 years ago

Mellon wrote:

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

Текущий аккаунт указывается как $. Кстати, я сейчас посмотрел на код — видимо, да, можно без неоднозначностей сделать так, чтобы если не указано, то подставлялся текущий.

Обязательность указания статуса так же не добавляет удобства. Можно же просто проанализировать первое слово и сравнить его с именами статсусов и 'clear', если совпадение найдено, то это статус, если нет, то текст статуса, а сам статус остается неизменным. В принципе, тоже самое можно проделать и с именами аккаунтов убрав небходимость разноса аргументов по строкам.

Не обязательно. Можно вместо этого написать «message».

Кроме того, пункт

При условии, что из этих двух параметров, указан только '+presence+', сообщение статуса должно меняться на соотвествующее (преднастроенное) сообщение соответствующее данному статусу.

избавляет пользователя от необходимости набивать самому уже преднастроенный текст статуса.

Уже и так работает.

/chatpresence не работает:
[...]
в ткаббере работает норм, по крайней мере в жрушных конфочках.

Это я на личных сообщениях тестил прст, а directed presences для конфочек у меня в Xoox не запилены. Запилю, к.

В общем я тут раскритиковал так будто ты что-то должен, на самом деле нет, в принципе, всё кроме /chatpresence работает и после его фикса можно реквест закрывать, если тебе норм.

Нет не норм :3

#6

Updated by Mellon about 6 years ago

Не обязательно. Можно вместо этого написать «message».

/presence $
"hi" 
* Cannot execute /presence $
"hi". Unknown status "hi".

А должно на
/presence hi

сопоставить 'hi' с именами акков, затем со статусами, и если не нашлось соответствия сменить только текст текущего статуса.

Уже и так работает.

/presence $
xa

Должно ставить статус xa с преднастроенным для этого статуса текстом. статус ставит, текст - нет.
#7

Updated by 0xd34df00d about 6 years ago

Mellon wrote:

А должно сопоставить 'hi' с именами акков, затем со статусами, и если не нашлось соответствия сменить только текст текущего статуса.

К, сделаю.

Должно ставить статус xa с преднастроенным для этого статуса текстом. статус ставит, текст - нет.

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

#8

Updated by Mellon about 6 years ago

что если указано название некастомного состояния, то только состояние должно измениться

Это где? :3
В оригинале там да, есть что-то подобное, но у тебя даже не так же, сейчас просходит очистка сообщения(текста) статуса, когда указан только статус.
В общем, норм вариант, когда при указании только статуса (без его сообщения) его текст будет браться из не только для ктомных статусов

Попробуй кастомные статусы, там меняется и текст, и сообщение.

Клёво сделано, к.
А эм... УИТА^W EBNF... попробую

#9

Updated by 0xd34df00d about 6 years ago

Mellon wrote:

В оригинале там да, есть что-то подобное, но у тебя даже не так же, сейчас просходит очистка сообщения(текста) статуса, когда указан только статус.

А это баг, лул.

В общем, норм вариант, когда при указании только статуса (без его сообщения) его текст будет браться из не только для ктомных статусов

К, раз всё равно сейчас в этот код полезу, заодно и починю это.

#10

Updated by Mellon about 6 years ago

c /presence всё норм, за исключением того, что забыл впилить "clear" для очистки status_message

и надо допилить /chatpresence, его грамматика ввиду отсутствия определения аккаунта должна быть такой же как у /presence, за исключением опции аккаунта, то есть, что-то типа:

presence_argument = "clear" | ( status "\n" status_message ) | status | status_message

#11

Updated by 0xd34df00d about 6 years ago

Допилил всякого, ну и теперь для парсинга юзается почти тот же парсер, что и для простого /presence. Попробуй.

#12

Updated by 0xd34df00d about 6 years ago

  • Estimated time changed from 10.00 h to 20.00 h
#13

Updated by Mellon about 6 years ago

c /presence всё норм, закончили. Благодарю.

с /chatpresence имеются некоторые несоответствия логике /presence. Есть разница в поведении команд /chatpresence и /presence безотносительно к аккаунтам.
1.
/chatpresence status меняет прдыдущий status_message чата на общий, или, можно сказать, очищает его.
то есть вот такая последовательность команд:

/presence
avail
^_^
/chatpresence avail
hello
/chatpresence xa

приведет к статусу "xa (^_^)" чата, а должна к "xa(hello)" 

2.
/chatpresence ["\n"] status_message
приводит к сбросу status'а в available, а должна менять status_message не меняя status

3.
Случай, когда status_message == custom_status
в "/chatpresence \n status_message" status_message распознается как custom_status,
в то время как в "/chatpresence \n\n status_message" распознается как status_message.
А должно уже при "/chatpresence \n status_message" распознаваться как status_message.

В общем, всё это не сложно обходится, но, что есть, то есть.

#14

Updated by 0xd34df00d about 6 years ago

Mellon wrote:

c /presence всё норм, закончили. Благодарю.

с /chatpresence имеются некоторые несоответствия логике /presence. Есть разница в поведении команд /chatpresence и /presence безотносительно к аккаунтам.
1.
/chatpresence status меняет прдыдущий status_message чата на общий, или, можно сказать, очищает его.
то есть вот такая последовательность команд:
[...]

ИМХО, это должно быть WONTFIX, ибо требует поддержания информации о текущем состоянии статуса для конкретного контакта, что ИМХО чревато и того не стоит.

2.
/chatpresence ["\n"] status_message
приводит к сбросу status'а в available, а должна менять status_message не меняя status

См. п. 1.

3.
Случай, когда status_message == custom_status
в "/chatpresence \n status_message" status_message распознается как custom_status,
в то время как в "/chatpresence \n\n status_message" распознается как status_message.
А должно уже при "/chatpresence \n status_message" распознаваться как status_message.

А, просто сейчас у /chatpresence такой парсер, как если бы /presence тупо без указания аккаунта, но с точностью до ньюлайна, следующего за ним. Если нужно, могу опциональное выпаршивание этого ньюлайна убрать.

#15

Updated by Mellon about 6 years ago

  • Status changed from Resolved to Closed

Наконец завершено и работает. Благодарю.

Also available in: Atom PDF