LINUX.ORG.RU
ФорумTalks

Дурацкий XMPP. Отправка сообщений из консоли.

 , ,


0

1

Ощщем, увлекался я в молодости ботоводством. Не теми, что спамят, а мирными IRC-ботами, которые обслуживают каналы. IRC мёртв, а популярен нынче Jabber. Windows зло, а mIRC в Wine держать не комильфо. Остался только Linux и bash.

Вот значит, решил я поизучать этот Jabber, XMPP протокол и запилить в качестве домашнего задания простую реализацию XMPP аки «hello world» скрипт, скрипт который умеет лишь отправлять личные сообщения в Jabber. На чистом bash, да. sendmail знаете? Тоже самое, только :%s/mail/xmpp/g.

https://github.com/spfng/sendxmpp.sh (/screenshot.png)

Почему XMPP дурацкий? А черти знает, как его парсить. Нет, проблемы с парсингом XML на bash нету, вы что, дело в самой структуре.. блин.. какой дикий оверинжиниринг в этом жаббере.

Хочу поговорить о чатах. ЛОР, давай поговорим о чатах.

★★★★★

Вот тебе делать нехрен писать парсер XML на шелле регекспами. На, не мучайся:

import xmpp

username = 'username'
passwd = 'password'
to='name@example.com'
msg='hello :)'


client = xmpp.Client('gmail.com')
client.connect(server=('talk.google.com',5223))
client.auth(username, passwd, 'botty')
client.sendInitPresence()
message = xmpp.Message(to, msg)
message.setAttr('type', 'chat')
client.send(message)

Мопед не мой, если че, в гугле вторая ссылка.

alex_the_v ★★★
()
Последнее исправление: alex_the_v (всего исправлений: 1)
Ответ на: комментарий от thunar

json человекочитаемый

Ололо.

а xml — вообще уродец недоделанный. человек его читать не могёт

Человек его читает не хуже твоего json'а.

а машине проще с бинарными данными работать.

Текст универсален.

Stil ★★★★★
()
Ответ на: комментарий от Black_Roland

спасибо за лестный комментарий, но насечет вашего smtp2bash

Simple SMTP-server that executes a specific script for each incoming message.

правильно понимаю, что если мне пришло на почту новое письмо, то просто запускается нужный скрипт, угу?

а разве это не в две строки делается?

настраиваем какой-нибудь fetchmail или что там, чтоб письма приходили в maildir директорию, вместо mbox файла, тобишь

# mkdir INBOX/{new,cur,tmp}

# fetchmail

# sizeof=(INBOX/new/*)

# echo у нас ${#sizeof} новых писем

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

mails=0
while sleep 1m; do
  fetchmail
  sizeof=(INBOX/new/*)
  [ ${#sizeof} -gt ${#mails} ] && {
    echo вам письмо!
  }
  mails=${#sizeof}
done

ну а можно и при помощи mbox заморочиться, там только один файлик, /var/spool/mail/${USER}, и я на данный момент не знаю как определить что письмо новое, просто лень гуглить.

Spoofing ★★★★★
() автор топика
Ответ на: комментарий от cherry-pick

Хмм, а я паршу иногда регулярками хотя вот сейчас подумал можно же как то так делать:

iframe = '<iframe src="//videohost.net/media/26083067636"></iframe>'
function strtoDOM(str) {
   var stub = document.createElement('div')
   stub.innerHTML = str
   return stub.firstElementChild
}

strtoDOM(iframe).src  //=== 'videohost.net/media/26083067636'

Интересно такой метод быстрее регулярки или нет?

С другой стороны бывает по xmlhttpRequest приходит страница с ошибкой в виде текста:

'<head>
...
</head>
<body>
< (несколько внутренних элементов в одном из которых текст) />
</body>'
Тут ничего кроме регулярки для извлечения текста с ошибкой не получится использовать.

uin ★★★
()

Windows зло, а mIRC в Wine держать не комильфо.

XChat

Почему XMPP дурацкий?

Потому, что XML и костыли. XMPP кривой, дурацкий, костыльный... но он единственный массовый свободный децентрализованный и т.д. И пусть уж лучше он стандартом будет, чем поделие, которое не наберёт популярность или какая-нибудь проприетарщина.

Quasar ★★★★★
()
Ответ на: комментарий от Siado

Siado> 2. XMPP действительно слишком толстый и жирный. Он не нужен. Вместо него лучше придумать что-то нормальное, простое.

Нет уж. Пусть будет толстый и жирный, но открытый, работающий и популярный.

Siado> 3. Если нужен все-таки XMPP возьми готовые библиотеки на python, проблем не будет.

Ему лучше взять hatexmpp для fuse.

Quasar ★★★★★
()
Ответ на: комментарий от Darth_Revan

В чём мёртвость XChat? В том, что он достиг пика развития? В том, что за вендовую сборочку денег просит?

Quasar ★★★★★
()
Ответ на: комментарий от Spoofing

Суть была не smtp2bash показать, а дать скрипт-однострочник для Prosody, чтобы ты не занимался ерундой с парсингом XML regexp'ми.

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

Bash головного мозга, правильно тут написали. Если ты читал readme, то увидишь что я smtp2bash писал для Monit. Нужны оперативные уведомления, а не по крону раз в минуту. Нафига эти кривые велосипеды на bash, если можно нормально написать, на нормальном языке?

Black_Roland ★★★★
()
Ответ на: комментарий от Quasar

В чём мёртвость XChat?

В том, что он умер, и не нужен при наличии живого форка.

В том, что он достиг пика развития?

Что-то не похоже.

В том, что за вендовую сборочку денег просит?

Да нет, как-то наплевать.

Darth_Revan ★★★★★
()

скрипт который умеет лишь отправлять личные сообщения в Jabber

Какой-то консольный жаббер клиент это умел, mcabber что ли(?)

Ygor ★★★★★
()
Ответ на: комментарий от thunar

человек его читать не могёт,

глаза почини

cvs-255 ★★★★★
()

Я конечно понимаю что ты тру bash-извращенец, но лучше бы ты взял python либо perl, так бы нервов меньше ушло да и написал бы быстрее!

daniilArch ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.