<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0"
					xmlns:content="http://purl.org/rss/1.0/modules/content/"
					xmlns:wfw="http://wellformedweb.org/CommentAPI/"
					xmlns:atom="http://www.w3.org/2005/Atom"
				  >
<channel>
<atom:link rel="self"  type="application/rss+xml"  href="http://rulinux.net/rss_from_sect_4_subsect_7"  />
<title>rulinux.net - Форум - Rulinux.net</title>
<link>http://rulinux.net/</link>
<description><![CDATA[Портал о GNU/Linux и не только]]></description>
<image><title>rulinux.net - Форум - Rulinux.net</title>
<link>http://rulinux.net/</link>
<url>http://rulinux.net/rss_icon.png</url>
</image>
<item>
<title>Поддерживаете ли вы модераторов, удаляющих сообщения форума</title>
<link>https://rulinux.net/message.php?newsid=43428&amp;page=1</link>
<guid>https://rulinux.net/message.php?newsid=43428&amp;page=1</guid>
<pubDate>Tue, 01 Feb 2022 12:45:40 +0300</pubDate>
<description><![CDATA[<p>В связи с тем что администрация рулинуск.нет потерла сообщения пользователя @Bratishka было бы интересно узнать оценку подобной активности со стороны других пользователей.<br><br>Поддерживаю: +<br><br>Не поддерживаю: -<br><br>Другое, отвечу в комментарии:</p>]]></description>
</item>
<item>
<title>Никогда такого не было, и вот опять</title>
<link>https://rulinux.net/message.php?newsid=43277&amp;page=1</link>
<guid>https://rulinux.net/message.php?newsid=43277&amp;page=1</guid>
<pubDate>Mon, 19 Aug 2019 17:40:14 +0300</pubDate>
<description><![CDATA[<p><fieldset><legend>text</legend><div class="highlight text">Hello,<br />
<br />
Please review the following abuse complaint we received regarding a Droplet you control.<br />
<br />
Regards,<br />
<br />
Trust &amp; Safety<br />
DigitalOcean</div></fieldset><br><br>skip<br><br><fieldset><legend>text</legend><div class="highlight text">It is notice of making an entry into the &quot;Unified register of domain names, Internet web-site page links and network addresses enabling to identify the Internet web-sites containing the information prohibited for<br />
public distribution in the Russian Federation the Internet web-site page (s) link (s): http://rulinux.net/thread_40145_page_1 .<br />
<br />
In case the hosting provider and (or) the Internet web-site owner fail to take these measures, the network address enabling to identify Internet web-sites containing the information prohibited for distribution in<br />
the Russian Federation will be decided to be entered into the Register and access will be limited.<br />
<br />
The information about entering the domain names, Internet web-site page links and network addresses into the Register shall be available on a 24-hour basis at the following Internet address:<br />
http://eais.rkn.gov.ru/en/ .<br />
&nbsp; &nbsp; <br />
Federal Service for Supervision in the Sphere of Telecom, Information Technologies and Mass Communications (ROSKOMNADZOR).</div></fieldset><br><br>Интересно, а <a href="https://rulinux.net/thread_40145_page_1">там-то</a> что? Предлагаю специалистам высказаться.<br><br>Впрочем, не могу не процитировать участника SystemV из сего треда:<br><br><i>>А на картинке у тебя садизм и издевательство над животными, надо бы в роскомнадзор пожаловаться, хех. </p></i><br>]]></description>
</item>
<item>
<title>Не работает регистрация</title>
<link>https://rulinux.net/message.php?newsid=43243&amp;page=1</link>
<guid>https://rulinux.net/message.php?newsid=43243&amp;page=1</guid>
<pubDate>Sun, 07 Apr 2019 12:27:40 +0300</pubDate>
<description><![CDATA[<p>Заполняю форму, ввожу капчу, перенаправляет на страницу с сообщением о необходимости проверить почту. Письмо не приходит (yandex.ru). Но одно и тоже действие можно повторять многократно (с теми же данными формами) - т.е. не указывает, что подобная регистрация уже была ранее.</p>]]></description>
</item>
<item>
<title>Code of Conduct</title>
<link>https://rulinux.net/message.php?newsid=43190&amp;page=1</link>
<guid>https://rulinux.net/message.php?newsid=43190&amp;page=1</guid>
<pubDate>Tue, 25 Sep 2018 21:23:32 +0300</pubDate>
<description><![CDATA[<p>Для тех, кто следит за последними новостями в мире opensource-сообщества, не секрет, что бесконечный хаос и меритократическое безумие, которые не один десяток лет бушевали в этом сообществе, наконец-то подходят к концу. Проект, в честь которого назван сей ресурс, обзавёлся наконец-то правилами поведения, или, в просторечье, <a href="https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=8a104f8b5867c682d994ffa7a74093c54469c11f">Code of Conduct</a>. Многие проекты поддерживают данное решение и сами обзаводятся похожими документам, кто-то простыми, как в <a href="https://www.postgresql.org/about/policies/coc/">PostgreSQL</a>, а кто-то и более <a href="https://wealljs.org/code-of-conduct">социально справедливыми и объёмными</a>.<br><br>Действуя в духе времени, администрация rulinux.net также решила обзавестись данным документом, тем более что, имея очень активное сообщество, рулинукс тоже может пострадать от несправедливости, троллинга, провокаций, антиобщественного и социопатического поведения, а также от цисгендеров и отвратительных белых мужчин, не пользующихся Mac OS.<br><br>С текущего дня бессрочно вводится Code of Conduct (канонический) - коротко CoC(К) - откорректированная версия популярного варианта правил поведения, используемого как минимум в одном крупном проекте. Данный CoC(К) обязателен для выполнения всем посетителям rulinux.net на сайте, в интернете, на работе и дома.<br><br><a href="https://rulinux.net/cock.html">https://rulinux.net/cock.html</a><br><br>С уважением, Администрация. </p>]]></description>
</item>
<item>
<title>Маркерованный список — админов в биореактор</title>
<link>https://rulinux.net/message.php?newsid=43063&amp;page=1</link>
<guid>https://rulinux.net/message.php?newsid=43063&amp;page=1</guid>
<pubDate>Wed, 13 Dec 2017 15:50:20 +0300</pubDate>
<description><![CDATA[<p>МаркИрованный, блжад!!!!!!!!!!!!!<br><br>Для непонявших: в описании разметки творится трэшак.</p>]]></description>
</item>
<item>
<title>Хуле у этого сайта такой уебанский интерфейс?</title>
<link>https://rulinux.net/message.php?newsid=43061&amp;page=1</link>
<guid>https://rulinux.net/message.php?newsid=43061&amp;page=1</guid>
<pubDate>Mon, 11 Dec 2017 18:01:11 +0300</pubDate>
<description><![CDATA[<p>Субж, даже на лорораковнике с эти делом лучше дела обстоят.</p>]]></description>
</item>
<item>
<title>не могу код запостить</title>
<link>https://rulinux.net/message.php?newsid=42944&amp;page=1</link>
<guid>https://rulinux.net/message.php?newsid=42944&amp;page=1</guid>
<pubDate>Wed, 12 Jul 2017 09:31:26 +0300</pubDate>
<description><![CDATA[<p>говорит реквест тайм аут. дайте мне доступ до базы чтобы код постить , пожалуйста </p>]]></description>
</item>
<item>
<title>Предлогаю перевести сайт на другой домен</title>
<link>https://rulinux.net/message.php?newsid=42923&amp;page=1</link>
<guid>https://rulinux.net/message.php?newsid=42923&amp;page=1</guid>
<pubDate>Fri, 23 Jun 2017 16:44:06 +0300</pubDate>
<description><![CDATA[<p>1) Щитаю что назрела необходимость перевести сайт на домен krovavomu-regymu-i-gebne.net)))<br><br>2) Оставить только раздел толкс)))<br><br>3) Переименовать раздел толкс в &quot;Уголок свидетелей Леши Навального&quot;)))<br><br>4) Переименовать Анонимусов в Селедычей)))<br><br>Кто за, кто против? Прошу голосовать)))</p>]]></description>
</item>
<item>
<title>[rulinux@conference.jabber.ru]Исходники Бильфреда</title>
<link>https://rulinux.net/message.php?newsid=42771&amp;page=1</link>
<guid>https://rulinux.net/message.php?newsid=42771&amp;page=1</guid>
<pubDate>Thu, 15 Dec 2016 16:05:45 +0300</pubDate>
<description><![CDATA[<p><fieldset><legend>python</legend><div class="highlight python"><br />
<br />
<span class="co1">#!/usr/bin/env python</span><br />
<span class="co1"># -*- coding: utf-8 -*-</span><br />
<br />
<span class="st0">&quot;&quot;&quot;<br />
&nbsp; &nbsp; SleekXMPP: The Sleek XMPP Library<br />
&nbsp; &nbsp; Copyright (C) 2010&nbsp; Nathanael C. Fritz<br />
&nbsp; &nbsp; This file is part of SleekXMPP.<br />
&nbsp; &nbsp; See the file LICENSE for copying permission.<br />
&quot;&quot;&quot;</span><br />
<br />
<span class="kw1">import</span> <span class="kw3">sys</span><br />
<span class="kw1">import</span> <span class="kw3">os</span><br />
<br />
<span class="kw1">import</span> <span class="kw3">logging</span><br />
<span class="kw1">import</span> <span class="kw3">getpass</span><br />
<span class="kw1">from</span> <span class="kw3">optparse</span> <span class="kw1">import</span> OptionParser<br />
<span class="kw1">from</span> sleekxmpp.<span class="kw3">exceptions</span> <span class="kw1">import</span> IqError, IqTimeout<br />
<br />
<span class="kw1">import</span> sqlite3<br />
<span class="kw1">import</span> <span class="kw3">time</span><br />
<span class="kw1">import</span> <span class="kw3">datetime</span><br />
<br />
<span class="co1">#only for encode HTML entities</span><br />
<span class="kw1">import</span> <span class="kw3">HTMLParser</span><br />
<br />
<span class="kw1">import</span> <span class="kw3">re</span><br />
<span class="kw1">import</span> <span class="kw3">urllib2</span><br />
<span class="kw1">import</span> chardet<br />
<span class="kw1">import</span> feedparser<br />
<br />
<span class="kw1">import</span> sleekxmpp<br />
<br />
<span class="co1"># Forcing UTF8</span><br />
<span class="kw1">if</span> <span class="kw3">sys</span>.<span class="me1">version_info</span> <span class="sy0">&lt;</span> <span class="br0">&#40;</span>3, 0<span class="br0">&#41;</span>:<br />
&nbsp; &nbsp; <span class="kw1">from</span> sleekxmpp.<span class="me1">util</span>.<span class="me1">misc_ops</span> <span class="kw1">import</span> setdefaultencoding<br />
&nbsp; &nbsp; setdefaultencoding<span class="br0">&#40;</span><span class="st0">'utf8'</span><span class="br0">&#41;</span><br />
<span class="kw1">else</span>:<br />
&nbsp; &nbsp; <span class="kw2">raw_input</span> = <span class="kw2">input</span><br />
<br />
<span class="kw1">class</span> MUCBot<span class="br0">&#40;</span>sleekxmpp.<span class="me1">ClientXMPP</span><span class="br0">&#41;</span>:<br />
<br />
&nbsp; &nbsp; regex_url = <span class="kw3">re</span>.<span class="kw2">compile</span><span class="br0">&#40;</span>r<span class="st0">&quot;(https?://<span class="es0">\S</span>+)<span class="es0">\.</span>(<span class="es0">\S</span>+)&quot;</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; regex_title = <span class="kw3">re</span>.<span class="kw2">compile</span><span class="br0">&#40;</span>r<span class="st0">&quot;&lt;title&gt;([^&lt;]+)&lt;/title&gt;&quot;</span><span class="br0">&#41;</span><br />
<br />
&nbsp; &nbsp; url_ext_blacklist = <span class="br0">&#91;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">'png'</span>, <span class="st0">'jpg'</span>, <span class="st0">'jpeg'</span>, <span class="st0">'gif'</span>, <span class="st0">'png'</span>, <span class="st0">'pdf'</span>, <span class="st0">'doc'</span>, <span class="st0">'xls'</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">'docx'</span>, <span class="st0">'djvu'</span>, <span class="st0">'ppt'</span>, <span class="st0">'pptx'</span>, <span class="st0">'avi'</span>, <span class="st0">'mp4'</span>, <span class="st0">'mp3'</span>, <span class="st0">'flac'</span>, <span class="st0">'pps'</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">'mp3'</span>, <span class="st0">'ogg'</span>, <span class="st0">'webm'</span><br />
&nbsp; &nbsp; <span class="br0">&#93;</span><br />
<br />
&nbsp; &nbsp; h_parser = <span class="kw3">HTMLParser</span>.<span class="kw3">HTMLParser</span><span class="br0">&#40;</span><span class="br0">&#41;</span><br />
<br />
&nbsp; &nbsp; <span class="kw1">def</span> <span class="kw4">__init__</span><span class="br0">&#40;</span><span class="kw2">self</span>, jid, password, room, nick<span class="br0">&#41;</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; sleekxmpp.<span class="me1">ClientXMPP</span>.<span class="kw4">__init__</span><span class="br0">&#40;</span><span class="kw2">self</span>, jid, password<span class="br0">&#41;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">self</span>.<span class="me1">room</span> = room<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">self</span>.<span class="me1">nick</span> = nick<br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">self</span>.<span class="me1">add_event_handler</span><span class="br0">&#40;</span><span class="st0">&quot;session_start&quot;</span>, &nbsp; &nbsp; <span class="kw2">self</span>.<span class="me1">start</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">self</span>.<span class="me1">add_event_handler</span><span class="br0">&#40;</span><span class="st0">&quot;groupchat_message&quot;</span>, <span class="kw2">self</span>.<span class="me1">muc_message</span><span class="br0">&#41;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">self</span>.<span class="me1">schedule</span><span class="br0">&#40;</span><span class="st0">'RSS update'</span>, &nbsp; &nbsp; &nbsp;<span class="co1"># Unique name for the timer</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="nu0">600</span>,&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="co1"># Seconds to delay before firing</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">self</span>.<span class="me1">rss_update</span>, <span class="co1"># Callback to execute</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; args=<span class="br0">&#40;</span><span class="br0">&#41;</span>,&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="co1"># A tuple of positional argument values</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; kwargs=<span class="br0">&#123;</span><span class="br0">&#125;</span>,&nbsp; &nbsp; &nbsp; &nbsp;<span class="co1"># A dictionary of keyword argument values</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; repeat=<span class="kw2">True</span><span class="br0">&#41;</span>&nbsp; &nbsp; &nbsp;<span class="co1"># Make the event happen every X seconds</span><br />
<br />
&nbsp; &nbsp; <span class="kw1">def</span> rss_update<span class="br0">&#40;</span><span class="kw2">self</span><span class="br0">&#41;</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; url_rss = <span class="st0">'http://rulinux.net/rss'</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; rss_depth_time = 600<br />
&nbsp; &nbsp; &nbsp; &nbsp; current_time = <span class="kw3">datetime</span>.<span class="kw3">datetime</span>.<span class="me1">utcnow</span><span class="br0">&#40;</span><span class="br0">&#41;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">try</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; rss = feedparser.<span class="me1">parse</span><span class="br0">&#40;</span>url_rss<span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span> r <span class="kw1">in</span> rss.<span class="me1">entries</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; time_rss = <span class="kw3">datetime</span>.<span class="kw3">datetime</span>.<span class="me1">fromtimestamp</span><span class="br0">&#40;</span><span class="kw3">time</span>.<span class="me1">mktime</span><span class="br0">&#40;</span>r.<span class="me1">published_parsed</span><span class="br0">&#41;</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">#print current_time</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; t = current_time - time_rss<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">#TODO: normal time pars not like {-(3600*3)} for remove 3 hour</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; time_delta = t.<span class="me1">total_seconds</span><span class="br0">&#40;</span><span class="br0">&#41;</span>-<span class="br0">&#40;</span>3600<span class="sy0">*</span>3<span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>0 <span class="sy0">&lt;</span> time_delta<span class="br0">&#41;</span> &nbsp;<span class="kw1">and</span> <span class="br0">&#40;</span>time_delta <span class="sy0">&lt;</span> rss_depth_time<span class="br0">&#41;</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; news_title = <span class="kw2">unicode</span><span class="br0">&#40;</span>r.<span class="me1">title</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; news_link &nbsp;= <span class="kw2">unicode</span><span class="br0">&#40;</span>r.<span class="me1">link</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">self</span>.<span class="me1">send_message</span><span class="br0">&#40;</span>mto=<span class="st0">&quot;rulinux@conference.jabber.ru&quot;</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; mbody=<span class="st0">&quot;RULIN: %s %s&quot;</span> <span class="sy0">%</span> <span class="br0">&#40;</span>news_title, news_link<span class="br0">&#41;</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; mtype=<span class="st0">'groupchat'</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">break</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">except</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">logging</span>.<span class="me1">info</span><span class="br0">&#40;</span><span class="st0">&quot;DEBUG: RSS Feed problem, %s&quot;</span> , <span class="kw3">sys</span>.<span class="me1">exc_info</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#91;</span>0<span class="br0">&#93;</span><span class="br0">&#41;</span><br />
<br />
<br />
&nbsp; &nbsp; <span class="kw1">def</span> write_log<span class="br0">&#40;</span><span class="kw2">self</span>,query<span class="br0">&#41;</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">#TODO: Сделать раоту базы в тредах иначе приходится на каждый тред открывать и закрывать</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">#SQLite objects created in a thread can only be used in that same thread</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">#connect_db = sqlite3.connect('./rulinux_xmpp_chat_logs.db')</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; connect_db = sqlite3.<span class="me1">connect</span><span class="br0">&#40;</span><span class="kw3">os</span>.<span class="me1">path</span>.<span class="me1">join</span><span class="br0">&#40;</span><span class="kw3">os</span>.<span class="me1">path</span>.<span class="me1">dirname</span><span class="br0">&#40;</span>__file__<span class="br0">&#41;</span>, <span class="st0">'rulinux_xmpp_chat_logs.db'</span><span class="br0">&#41;</span><span class="br0">&#41;</span>&nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; cursor_db = connect_db.<span class="me1">cursor</span><span class="br0">&#40;</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; cursor_db.<span class="me1">execute</span><span class="br0">&#40;</span><span class="st0">&quot;&quot;&quot;INSERT INTO chat_log (id, time, jit, name, message)<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; VALUES (NULL,?,?,?,?)&quot;&quot;&quot;</span>, query<span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; connect_db.<span class="me1">commit</span><span class="br0">&#40;</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; connect_db.<span class="me1">close</span><span class="br0">&#40;</span><span class="br0">&#41;</span><br />
<br />
&nbsp; &nbsp; <span class="kw1">def</span> start<span class="br0">&#40;</span><span class="kw2">self</span>, event<span class="br0">&#41;</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">self</span>.<span class="me1">get_roster</span><span class="br0">&#40;</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">self</span>.<span class="me1">send_presence</span><span class="br0">&#40;</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">self</span>.<span class="me1">plugin</span><span class="br0">&#91;</span><span class="st0">'xep_0045'</span><span class="br0">&#93;</span>.<span class="me1">joinMUC</span><span class="br0">&#40;</span><span class="kw2">self</span>.<span class="me1">room</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">self</span>.<span class="me1">nick</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1"># If a room password is needed, use:</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1"># password=the_room_password,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; wait=<span class="kw2">True</span><span class="br0">&#41;</span><br />
<br />
&nbsp; &nbsp; <span class="kw1">def</span> muc_message<span class="br0">&#40;</span><span class="kw2">self</span>, msg<span class="br0">&#41;</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1"># Cmopose data and write message to &nbsp;SQLite DB</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; nick_name = <span class="kw2">unicode</span><span class="br0">&#40;</span>msg<span class="br0">&#91;</span><span class="st0">'mucnick'</span><span class="br0">&#93;</span><span class="br0">&#41;</span> <span class="co1"># User nick sowed in chat room</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; full_jit &nbsp;= <span class="kw2">unicode</span><span class="br0">&#40;</span>msg<span class="br0">&#91;</span><span class="st0">'from'</span><span class="br0">&#93;</span><span class="br0">&#41;</span> &nbsp; &nbsp;<span class="co1"># Like user@jabb.en/UserName</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; message &nbsp; = <span class="kw2">unicode</span><span class="br0">&#40;</span>msg<span class="br0">&#91;</span><span class="st0">'body'</span><span class="br0">&#93;</span><span class="br0">&#41;</span> &nbsp; &nbsp;<span class="co1"># Message body</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; query = <span class="br0">&#40;</span><span class="kw3">time</span>.<span class="kw3">time</span><span class="br0">&#40;</span><span class="br0">&#41;</span>, full_jit, nick_name, message,<span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">self</span>.<span class="me1">write_log</span><span class="br0">&#40;</span>query<span class="br0">&#41;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1"># Disable self-interaction</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> msg<span class="br0">&#91;</span><span class="st0">'mucnick'</span><span class="br0">&#93;</span> == <span class="kw2">self</span>.<span class="me1">nick</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1"># Try to run command</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> msg<span class="br0">&#91;</span><span class="st0">'body'</span><span class="br0">&#93;</span>.<span class="me1">startswith</span><span class="br0">&#40;</span><span class="kw2">self</span>.<span class="me1">nick</span><span class="br0">&#41;</span>:<br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tokens = msg<span class="br0">&#91;</span><span class="st0">'body'</span><span class="br0">&#93;</span>.<span class="me1">split</span><span class="br0">&#40;</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="kw2">len</span><span class="br0">&#40;</span>tokens<span class="br0">&#41;</span> <span class="sy0">&gt;</span> 1:<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; command = tokens<span class="br0">&#91;</span>1<span class="br0">&#93;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> command == <span class="st0">'ping'</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">self</span>.<span class="me1">try_ping</span><span class="br0">&#40;</span>msg<span class="br0">&#91;</span><span class="st0">'from'</span><span class="br0">&#93;</span>, msg<span class="br0">&#91;</span><span class="st0">'mucnick'</span><span class="br0">&#93;</span><span class="br0">&#41;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">elif</span> <span class="st0">&quot;http&quot;</span> <span class="kw1">in</span> msg<span class="br0">&#91;</span><span class="st0">'body'</span><span class="br0">&#93;</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">self</span>.<span class="me1">try_say_url_info</span><span class="br0">&#40;</span>msg<span class="br0">&#91;</span><span class="st0">'body'</span><span class="br0">&#93;</span>, msg<span class="br0">&#91;</span><span class="st0">'from'</span><span class="br0">&#93;</span><span class="br0">&#41;</span><br />
<br />
&nbsp; &nbsp; <span class="kw1">def</span> try_say_url_info<span class="br0">&#40;</span><span class="kw2">self</span>, text, mucjid<span class="br0">&#41;</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">try</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; parse_result = <span class="kw3">re</span>.<span class="me1">search</span><span class="br0">&#40;</span><span class="kw2">self</span>.<span class="me1">regex_url</span>, text<span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="kw1">not</span> parse_result:<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">logging</span>.<span class="me1">info</span><span class="br0">&#40;</span><span class="st0">&quot;DEBUG: cant find&nbsp; URL&quot;</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">raise</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; url_ext = parse_result.<span class="me1">group</span><span class="br0">&#40;</span>2<span class="br0">&#41;</span>.<span class="me1">lower</span><span class="br0">&#40;</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span>&nbsp; url_ext <span class="kw1">in</span> <span class="kw2">self</span>.<span class="me1">url_ext_blacklist</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">logging</span>.<span class="me1">info</span><span class="br0">&#40;</span><span class="st0">&quot;DEBUG: url extension blocked&quot;</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">raise</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; url = parse_result.<span class="me1">group</span><span class="br0">&#40;</span><span class="nu0">1</span><span class="br0">&#41;</span> + <span class="st0">&quot;.&quot;</span> + parse_result.<span class="me1">group</span><span class="br0">&#40;</span>2<span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; req = <span class="kw3">urllib2</span>.<span class="me1">Request</span><span class="br0">&#40;</span>url<span class="br0">&#41;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">#TODO: добавить ограничение на очередь запросов</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; response = <span class="kw3">urllib2</span>.<span class="me1">urlopen</span><span class="br0">&#40;</span>req, timeout = <span class="nu0">2</span><span class="br0">&#41;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">#6000 MAGIC number&nbsp; for header in bytes, working on youtube</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; data &nbsp;= response.<span class="me1">read</span><span class="br0">&#40;</span><span class="nu0">6000</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; enc &nbsp; = chardet.<span class="me1">detect</span><span class="br0">&#40;</span>data<span class="br0">&#41;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; data &nbsp;= data.<span class="me1">decode</span><span class="br0">&#40;</span>enc<span class="br0">&#91;</span><span class="st0">'encoding'</span><span class="br0">&#93;</span>, errors=<span class="st0">'ignore'</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; title = <span class="kw3">re</span>.<span class="me1">search</span><span class="br0">&#40;</span><span class="kw2">self</span>.<span class="me1">regex_title</span>, data<span class="br0">&#41;</span>.<span class="me1">group</span><span class="br0">&#40;</span>1<span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; title_clean = <span class="kw2">self</span>.<span class="me1">h_parser</span>.<span class="me1">unescape</span><span class="br0">&#40;</span>title<span class="br0">&#41;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">self</span>.<span class="me1">send_message</span><span class="br0">&#40;</span>mto=mucjid.<span class="me1">bare</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; mbody=<span class="st0">&quot;TITLE: %s&quot;</span> <span class="sy0">%</span> <span class="br0">&#40;</span>title_clean<span class="br0">&#41;</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; mtype=<span class="st0">'groupchat'</span><span class="br0">&#41;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">except</span>: &nbsp;<span class="co1">#IOError: &nbsp;IndexError, urllib2.URLError</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">logging</span>.<span class="me1">info</span><span class="br0">&#40;</span><span class="st0">&quot;DEBUG URL Rarsing error: %s&quot;</span>, <span class="kw3">sys</span>.<span class="me1">exc_info</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#91;</span>0<span class="br0">&#93;</span><span class="br0">&#41;</span><br />
<br />
&nbsp; &nbsp; <span class="kw1">def</span> try_ping<span class="br0">&#40;</span><span class="kw2">self</span>, pingjid, nick<span class="br0">&#41;</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">try</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; rtt = <span class="kw2">self</span><span class="br0">&#91;</span><span class="st0">'xep_0199'</span><span class="br0">&#93;</span>.<span class="me1">ping</span><span class="br0">&#40;</span>pingjid,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; timeout=10<span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">self</span>.<span class="me1">send_message</span><span class="br0">&#40;</span>mto=pingjid.<span class="me1">bare</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; mbody=<span class="st0">&quot;%s, pong is: %s&quot;</span> <span class="sy0">%</span> <span class="br0">&#40;</span>nick, rtt<span class="br0">&#41;</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; mtype=<span class="st0">'groupchat'</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">#logging.info(&quot;Success! RTT: %s&quot;, rtt)</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">except</span> IqError <span class="kw1">as</span> e:<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">logging</span>.<span class="me1">info</span><span class="br0">&#40;</span><span class="st0">&quot;Error pinging %s: %s&quot;</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; pingjid,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; e.<span class="me1">iq</span><span class="br0">&#91;</span><span class="st0">'error'</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="st0">'condition'</span><span class="br0">&#93;</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">except</span> IqTimeout:<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">logging</span>.<span class="me1">info</span><span class="br0">&#40;</span><span class="st0">&quot;No response from %s&quot;</span>, pingjid<span class="br0">&#41;</span><br />
<br />
<span class="kw1">if</span> __name__ == <span class="st0">'__main__'</span>:<br />
&nbsp; &nbsp; optp = OptionParser<span class="br0">&#40;</span><span class="br0">&#41;</span><br />
<br />
&nbsp; &nbsp; <span class="co1"># Output verbosity options.</span><br />
&nbsp; &nbsp; optp.<span class="me1">add_option</span><span class="br0">&#40;</span><span class="st0">'-q'</span>, <span class="st0">'--quiet'</span>, <span class="kw2">help</span>=<span class="st0">'set logging to ERROR'</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; action=<span class="st0">'store_const'</span>, dest=<span class="st0">'loglevel'</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; const=<span class="kw3">logging</span>.<span class="me1">ERROR</span>, default=<span class="kw3">logging</span>.<span class="me1">INFO</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; optp.<span class="me1">add_option</span><span class="br0">&#40;</span><span class="st0">'-d'</span>, <span class="st0">'--debug'</span>, <span class="kw2">help</span>=<span class="st0">'set logging to DEBUG'</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; action=<span class="st0">'store_const'</span>, dest=<span class="st0">'loglevel'</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; const=<span class="kw3">logging</span>.<span class="me1">DEBUG</span>, default=<span class="kw3">logging</span>.<span class="me1">INFO</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; optp.<span class="me1">add_option</span><span class="br0">&#40;</span><span class="st0">'-v'</span>, <span class="st0">'--verbose'</span>, <span class="kw2">help</span>=<span class="st0">'set logging to COMM'</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; action=<span class="st0">'store_const'</span>, dest=<span class="st0">'loglevel'</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; const=5, default=<span class="kw3">logging</span>.<span class="me1">INFO</span><span class="br0">&#41;</span><br />
<br />
&nbsp; &nbsp; <span class="co1"># JID and password options.</span><br />
&nbsp; &nbsp; optp.<span class="me1">add_option</span><span class="br0">&#40;</span><span class="st0">&quot;-c&quot;</span>, <span class="st0">&quot;--config&quot;</span>, dest=<span class="st0">&quot;config&quot;</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">help</span>=<span class="st0">&quot;import config with connection params&quot;</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; optp.<span class="me1">add_option</span><span class="br0">&#40;</span><span class="st0">&quot;-j&quot;</span>, <span class="st0">&quot;--jid&quot;</span>, dest=<span class="st0">&quot;jid&quot;</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">help</span>=<span class="st0">&quot;JID to use&quot;</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; optp.<span class="me1">add_option</span><span class="br0">&#40;</span><span class="st0">&quot;-p&quot;</span>, <span class="st0">&quot;--password&quot;</span>, dest=<span class="st0">&quot;password&quot;</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">help</span>=<span class="st0">&quot;password to use&quot;</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; optp.<span class="me1">add_option</span><span class="br0">&#40;</span><span class="st0">&quot;-r&quot;</span>, <span class="st0">&quot;--room&quot;</span>, dest=<span class="st0">&quot;room&quot;</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">help</span>=<span class="st0">&quot;MUC room to join&quot;</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; optp.<span class="me1">add_option</span><span class="br0">&#40;</span><span class="st0">&quot;-n&quot;</span>, <span class="st0">&quot;--nick&quot;</span>, dest=<span class="st0">&quot;nick&quot;</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">help</span>=<span class="st0">&quot;MUC nickname&quot;</span><span class="br0">&#41;</span><br />
<br />
&nbsp; &nbsp; opts, args = optp.<span class="me1">parse_args</span><span class="br0">&#40;</span><span class="br0">&#41;</span><br />
<br />
&nbsp; &nbsp; <span class="co1"># Setup logging.</span><br />
&nbsp; &nbsp; <span class="kw3">logging</span>.<span class="me1">basicConfig</span><span class="br0">&#40;</span>level=opts.<span class="me1">loglevel</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; format=<span class="st0">'%(levelname)-8s %(message)s'</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp;<br />
&nbsp; &nbsp; <span class="kw1">if</span> opts.<span class="me1">config</span> <span class="kw1">is</span> <span class="kw2">None</span>: &nbsp; &nbsp;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> opts.<span class="me1">jid</span> <span class="kw1">is</span> <span class="kw2">None</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; opts.<span class="me1">jid</span> = <span class="kw2">raw_input</span><span class="br0">&#40;</span><span class="st0">&quot;Username: &quot;</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> opts.<span class="me1">password</span> <span class="kw1">is</span> <span class="kw2">None</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; opts.<span class="me1">password</span> = <span class="kw3">getpass</span>.<span class="kw3">getpass</span><span class="br0">&#40;</span><span class="st0">&quot;Password: &quot;</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> opts.<span class="me1">room</span> <span class="kw1">is</span> <span class="kw2">None</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; opts.<span class="me1">room</span> = <span class="kw2">raw_input</span><span class="br0">&#40;</span><span class="st0">&quot;MUC room: &quot;</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> opts.<span class="me1">nick</span> <span class="kw1">is</span> <span class="kw2">None</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; opts.<span class="me1">nick</span> = <span class="kw2">raw_input</span><span class="br0">&#40;</span><span class="st0">&quot;MUC nickname: &quot;</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; <span class="kw1">else</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">try</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">import</span> config<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; opts.<span class="me1">jid</span> = config.<span class="me1">jid</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; opts.<span class="me1">password</span> = config.<span class="me1">password</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; opts.<span class="me1">room</span> = config.<span class="me1">room</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; opts.<span class="me1">nick</span> = config.<span class="me1">nick</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">except</span> <span class="kw2">ImportError</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">print</span> <span class="st0">&quot;error to import config file&quot;</span> <br />
&nbsp; &nbsp; <span class="co1">#opts.password = getpass.getpass(&quot;Password: &quot;)</span><br />
<br />
&nbsp; &nbsp; <span class="co1"># Setup the MUCBot and register plugins.</span><br />
&nbsp; &nbsp; xmpp = MUCBot<span class="br0">&#40;</span>opts.<span class="me1">jid</span>, opts.<span class="me1">password</span>, opts.<span class="me1">room</span>, opts.<span class="me1">nick</span><span class="br0">&#41;</span><br />
<br />
&nbsp; &nbsp; xmpp.<span class="me1">register_plugin</span><span class="br0">&#40;</span><span class="st0">'xep_0030'</span><span class="br0">&#41;</span> <span class="co1"># Service Discovery</span><br />
&nbsp; &nbsp; xmpp.<span class="me1">register_plugin</span><span class="br0">&#40;</span><span class="st0">'xep_0045'</span><span class="br0">&#41;</span> <span class="co1"># Multi-User Chat</span><br />
&nbsp; &nbsp; xmpp.<span class="me1">register_plugin</span><span class="br0">&#40;</span><span class="st0">'xep_0199'</span><span class="br0">&#41;</span> <span class="co1"># XMPP Ping</span><br />
&nbsp; &nbsp; xmpp.<span class="me1">register_plugin</span><span class="br0">&#40;</span><span class="st0">'xep_0004'</span><span class="br0">&#41;</span> <span class="co1"># Data Forms</span><br />
&nbsp; &nbsp; xmpp.<span class="me1">register_plugin</span><span class="br0">&#40;</span><span class="st0">'xep_0060'</span><span class="br0">&#41;</span> <span class="co1"># PubSub</span><br />
<br />
&nbsp; &nbsp; <span class="co1"># Connect to the XMPP server and start processing XMPP stanzas.</span><br />
&nbsp; &nbsp; <span class="kw1">if</span> xmpp.<span class="me1">connect</span><span class="br0">&#40;</span><span class="br0">&#41;</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; xmpp.<span class="me1">process</span><span class="br0">&#40;</span>block=<span class="kw2">True</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">print</span><span class="br0">&#40;</span><span class="st0">&quot;Done&quot;</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; <span class="kw1">else</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">print</span><span class="br0">&#40;</span><span class="st0">&quot;Unable to connect.&quot;</span><span class="br0">&#41;</span><br />
<br />
&nbsp;</div></fieldset><br><br><br><br>Все костыли которые  не MIT и GPL  распространяются  под паблик домэйн.<br><br>Основная заслуга по написанию кода SystemV,  кодревью Space_ivan и  Невесть кто еще.</p>]]></description>
</item>
<item>
<title>Годная идея</title>
<link>https://rulinux.net/message.php?newsid=42624&amp;page=1</link>
<guid>https://rulinux.net/message.php?newsid=42624&amp;page=1</guid>
<pubDate>Sat, 20 Aug 2016 19:32:37 +0300</pubDate>
<description><![CDATA[<p>Кто не узнал - это майлру, теперь за срач в комментах к новостям надо платить. По моему гениальная идея)))<br><br><img src="http://s017.radikal.ru/i414/1608/2c/8f809506a55d.png" style="max-width: 1024px" alt="[путь к изображению некорректен]" /></p>]]></description>
</item>
<item>
<title>Разметка форума.... народ, а как в раздел &quot;Статьи&quot; вставить html текст?</title>
<link>https://rulinux.net/message.php?newsid=42593&amp;page=1</link>
<guid>https://rulinux.net/message.php?newsid=42593&amp;page=1</guid>
<pubDate>Sun, 17 Jul 2016 10:15:48 +0300</pubDate>
<description><![CDATA[<p>например надо выводить нумерованный список с поднумерацией - парсер форума этого не распознает, и вложенные теги тоже не распонзнает<br><br><fieldset><legend>text</legend><div class="highlight text"><br />
\num{<br />
&nbsp;{*} \url[Основные элементы окна программы]{http://....#1}<br />
&nbsp;\num{<br />
&nbsp; {*}{*} \url[Базовая панель]{http://....#2}<br />
&nbsp; {*}{*} \url[Пример]{http://....#3}<br />
&nbsp;}<br />
&nbsp;{*} \url[Рисунки и заголовки]{http://....#4}<br />
}<br />
&nbsp;</div></fieldset><br><br>хотелось вот это <fieldset><legend>text</legend><div class="highlight text"><br />
1 Основные элементы окна программы<br />
&nbsp;1.1 Базовая панель<br />
&nbsp;1.2 Пример<br />
2 Рисунки и заголовки<br />
&nbsp;2.1 лалалала<br />
&nbsp;2.2 тырпырпыр<br />
&nbsp;2.3 кхекхекхе<br />
&nbsp;<br />
и т.д.<br />
&nbsp;</div></fieldset></p>]]></description>
</item>
<item>
<title>Никто не интересовался почему нас забанели в Россеи?</title>
<link>https://rulinux.net/message.php?newsid=42531&amp;page=1</link>
<guid>https://rulinux.net/message.php?newsid=42531&amp;page=1</guid>
<pubDate>Tue, 31 May 2016 15:24:47 +0300</pubDate>
<description><![CDATA[<p>Похуй конечно, всегда пишу из под прокси. Но чего-то решил посмотреть сайт с мобилы, а там вот хуй вам (проксю там пока что-то лень настраивать). Эта из-за кого интересно: <ul> <li>&nbsp; Из-за долбоеба который сюда какую-то хуету про бомбу запустил? <li>&nbsp; Или из-за этого педофила с Казахстана, с его лоли постами и картинками?</ul><br><br></p>]]></description>
</item>
<item>
<title>Об этом ресурсе</title>
<link>https://rulinux.net/message.php?newsid=42412&amp;page=1</link>
<guid>https://rulinux.net/message.php?newsid=42412&amp;page=1</guid>
<pubDate>Tue, 09 Feb 2016 10:20:34 +0300</pubDate>
<description><![CDATA[<p>В данном треде будет располагаться вся информация о работе ресурса.<br><br>Общедоступные дампы БД и данных: <a href="https://rulinux.net/dumps/">https://rulinux.net/dumps/</a>. Там, соответственно, находятся дампы базы данных и архив с изображениями для сайта. Этих данных плюс движка из git должно быть достаточно, чтобы почти полностью восстановить сайт. Почти - потому что в дампе БД отсутствуют пароли, email-ы и другие данные, которые являютя приватными. Файлы создаются раз в день, хранятся за последние два дня, так что не стесняйтесь скачивать их периодически. Если что-то пойдёт не так - пишите сюда, исправим.<br><br>Исходный код текущего движка на данный момент находится <a href="https://github.com/vladimir-g/rulinux-engine">здесь</a>.<br><br>Полноценные резервные копии БД и прочие критичные данные будут предоставлены ответственному коллективу анонимусов в шифрованном виде, пока что этот вопрос прорабатывается, об изменениях я сообщу здесь.<br><br>На случай плановых и внеплановых отключений администрация настойчиво рекомендует запомнить запасные места для встреч клуба анонимных рулинуксоводов: <ul> <li>&nbsp;В jabber-конференции rulinux@conference.jabber.ru <li>&nbsp;<a href="http://www.halfpastfive.ru/articles/52">http://www.halfpastfive.ru/articles/52</a> <li>&nbsp;<a href="https://twitter.com/rlnxnet">https://twitter.com/rlnxnet</a></ul> В конце 2015-го произошла локальная катастрофа, подробнее по ссылке: <a href="https://rulinux.net/thread_42366_page_1">https://rulinux.net/thread_42366_page_1</a>.</p>]]></description>
</item>
<item>
<title>Обесните</title>
<link>https://rulinux.net/message.php?newsid=42407&amp;page=1</link>
<guid>https://rulinux.net/message.php?newsid=42407&amp;page=1</guid>
<pubDate>Sun, 07 Feb 2016 21:16:27 +0300</pubDate>
<description><![CDATA[<p>Я нихуя не понял. Реквестирую историю за последние пол года.</p>]]></description>
</item>
<item>
<title>Пока демон не грянется, Систем пентаграмму не нарисует</title>
<link>https://rulinux.net/message.php?newsid=42406&amp;page=1</link>
<guid>https://rulinux.net/message.php?newsid=42406&amp;page=1</guid>
<pubDate>Sun, 07 Feb 2016 15:14:54 +0300</pubDate>
<description><![CDATA[<p>Прошло больше месяца <br><br>В новостном треде  кроме оставить всё как енесть и сделать доступ  по I2P с Tor  предложений  больше нет.<br><br><br /> А то, что  доменное  имя надо оплачивать и хостинг покупать ? <br /> А дырявый двиган который имеют  со стадии развертывпния бэкапа  ? <br /><br><br>По деньгам траты не большие конечно, но почему Сисмем их должен на себя брать ?<br><br>Если хостится у DigitalOcean  на самом дешевом плане  и оплачивать доменное имя, в год  это около 6000р  по нынешнему курсу.<br><br>Посему   предлагаю  обсудить  вариации  краудсорсинга на эти цели  их организацию и размеры.  <br><br><br><br></p>]]></description>
</item>
<item>
<title>жвль сайт</title>
<link>https://rulinux.net/message.php?newsid=42394&amp;page=1</link>
<guid>https://rulinux.net/message.php?newsid=42394&amp;page=1</guid>
<pubDate>Mon, 01 Feb 2016 14:01:23 +0300</pubDate>
<description><![CDATA[<p>:(</p>]]></description>
</item>
<item>
<title>хуй</title>
<link>https://rulinux.net/message.php?newsid=42232&amp;page=1</link>
<guid>https://rulinux.net/message.php?newsid=42232&amp;page=1</guid>
<pubDate>Sun, 11 Jan 2015 13:30:44 +0300</pubDate>
<description><![CDATA[<p>Какой хуй меня по ойпи зобанел? И какого хуя у этого хуя вообще есть такая возможность?</p>]]></description>
</item>
<item>
<title>Ну и кого тут выебать?</title>
<link>https://rulinux.net/message.php?newsid=42218&amp;page=1</link>
<guid>https://rulinux.net/message.php?newsid=42218&amp;page=1</guid>
<pubDate>Tue, 06 Jan 2015 19:23:29 +0300</pubDate>
<description><![CDATA[<p>Очко к осмотру, блеать!</p>]]></description>
</item>
<item>
<title>SystemV vs Ебанашка)))</title>
<link>https://rulinux.net/message.php?newsid=42209&amp;page=1</link>
<guid>https://rulinux.net/message.php?newsid=42209&amp;page=1</guid>
<pubDate>Sun, 04 Jan 2015 10:40:06 +0300</pubDate>
<description><![CDATA[<p><img src="http://s020.radikal.ru/i704/1501/b2/8dab46e2fa43.png" style="max-width: 1024px" alt="[путь к изображению некорректен]" /></p>]]></description>
</item>
<item>
<title>Как модератор заявляю</title>
<link>https://rulinux.net/message.php?newsid=42187&amp;page=1</link>
<guid>https://rulinux.net/message.php?newsid=42187&amp;page=1</guid>
<pubDate>Tue, 30 Dec 2014 21:02:44 +0300</pubDate>
<description><![CDATA[<p>Опять одно и тоже, но факт, ресурс скатился в сраное говно. Вот посмотрим на несколько последних тредов.<br><br> <a href="http://rulinux.net/thread_42180_page_1">http://rulinux.net/thread_42180_page_1</a> Тут мну запостил про водку, а кончилось всё минетом у бомжей.<br><br> <a href="http://rulinux.net/thread_42182_page_1">http://rulinux.net/thread_42182_page_1</a> Про Российское правосудие. Опять в треде пидарасы, шампанское и прочее говно. И мну уже подоспел, когда исписали целые две страницы.<br><br> <a href="http://rulinux.net/thread_42183_page_1">http://rulinux.net/thread_42183_page_1</a> Второй ответ - картинка про онанизм.<br><br> <a href="http://rulinux.net/thread_42185_page_1">http://rulinux.net/thread_42185_page_1</a> тоже самое. Первый ответ - картинка с МПХ.<br><br><a href="http://rulinux.net/thread_42186_page_1">http://rulinux.net/thread_42186_page_1</a> Опять крем и фалос.<br><br> И после этого мне тут кто-то смеет заявлять, что я тут говно пощу? Ололо! Всех заявителей забаню в реале.</p>]]></description>
</item>
<item>
<title>Конец анонимной культуры на рулине</title>
<link>https://rulinux.net/message.php?newsid=42144&amp;page=1</link>
<guid>https://rulinux.net/message.php?newsid=42144&amp;page=1</guid>
<pubDate>Mon, 22 Dec 2014 19:51:40 +0300</pubDate>
<description><![CDATA[<p>Я тут наткнулся на такой коммит:<br><br><a href="https://gitorious.org/rulinux-engine/rulinux-engine/commit/6589f56396082a6d0edd6d2ed7315db74059d69c">https://gitorious.org/rulinux-engine/rulinux-engine/commit/6589f56396082a6d0edd6d2ed7315db74059d69c</a><br><br>То есть если раньше умный анонимус мог выкинуть строку и столбец, на пересечении которого стоит 0, то теперь ему придется плакать, но считать определитель без всяких поблажек. Я протестую! Тут вам не школа, а клуб по интересам, можно сказать даже, что гей-клуб. Тут из-за вас всем геям придется регистрироваться в срочном порядке. Куда это годится?</p>]]></description>
</item>
<item>
<title>Хорошая традиция и rulinux@conference.jabber.ru</title>
<link>https://rulinux.net/message.php?newsid=42114&amp;page=1</link>
<guid>https://rulinux.net/message.php?newsid=42114&amp;page=1</guid>
<pubDate>Mon, 15 Dec 2014 15:49:58 +0300</pubDate>
<description><![CDATA[<p>Как метко подметил ХЗ кто,   раз в пол года рулин падает.<br><br>Люди  собираются в жаббер комнате и проводят сеанс спиритизма, вызывая  давно покинувших нас.<br><br>Хорошая традиция, я считаю, но надо увековечить адрес  на видном месте рулина, не ровен час СБУ накроет.</p>]]></description>
</item>
<item>
<title>Прощаться с днявочкой можно здесь</title>
<link>https://rulinux.net/message.php?newsid=42075&amp;page=1</link>
<guid>https://rulinux.net/message.php?newsid=42075&amp;page=1</guid>
<pubDate>Wed, 03 Dec 2014 15:31:17 +0300</pubDate>
<description><![CDATA[<p>Так как долбоебы нашлись и среди заседателей нашей днявочки. Предлагаю начать процедуру прощания с ней)))<br><br>Хуйле сказать, более трех лет заходил я на этот сайт, что бы клеймить долбоебов емким но резким слогом. К сожалению долбоёбов оказалось больше, чем я рассчитывал, к тому же они нашли <a href="http://rulinux.net/thread_42074_comment_210108#msg210108">&quot;верный способ борьбы&quot;</a>))). Ну что же ибланы, похоже вы своего добъётесь и днявочку таки закроют. Ну что же, аминь! </p>]]></description>
</item>
<item>
<title>Сильви, прекрати</title>
<link>https://rulinux.net/message.php?newsid=42047&amp;page=1</link>
<guid>https://rulinux.net/message.php?newsid=42047&amp;page=1</guid>
<pubDate>Tue, 25 Nov 2014 20:09:40 +0300</pubDate>
<description><![CDATA[<p>начну исправлять твои сообщения<br><br>хватит народ распугивать от ресурса</p>]]></description>
</item>
<item>
<title>А давайте попросим Шпротыча съебаться на хуй отсюда куда-нибудь в другое место)</title>
<link>https://rulinux.net/message.php?newsid=41853&amp;page=1</link>
<guid>https://rulinux.net/message.php?newsid=41853&amp;page=1</guid>
<pubDate>Fri, 26 Sep 2014 16:35:09 +0400</pubDate>
<description><![CDATA[<p>Шпротыч известный челен нашей днявочки. Он появился тут очень давно, я помню его как минимум из под двух аккаутнов)  Раньше он косил под майора спец служб, - это было забавно, народ с воодушевлением принял эту легенду. Майор был забавен пока не начались пидорасы. Майор, он же Шпротыч не казался мидорасом, жеда, дочка и т.п., но почему-то стал им сочуствовать. Ситуация осложнилась, когда случился &quot;Крым нащ!&quot;. Все пидорасы. по понятным причинам стали в опозицию этой забовной но своевременной затеи нашего гребца))) Штпротыч понятно и в этом поддержал пидорасов)))  Хуй с ним все бы ниче, мы же за свободу слова))) Но тут неожиданно начался второй раунд налета пидорасов на нашу днявочку. Все как обычно, засирание тем бомжами и гомоагитацией.  Что сделал наш смелый модератор Щпротыч (кто не знал, то что он светится синимким цветом - это означает что он модератор)? А ничего? Его бездействие и советы накурится шмали, что бы &quot;включить фильтры&quot; как бы вообще за краем добра и зла.<br><br>Короче я предлагаю Шпротычу съебатор отсюда включить самостоятельно, что бы не ставять в неудобное положение модераторов и/или Аллаха, которые рано или поздно его отсюда все равно нагонят. Ну как минимум (программа минимум, слыхали?) он должен съебацо с поста модератора.<br><br>Кто за кто против - высказывайтесь. <br><br>Кто считает, что я заебал этой темой, промолчите, а еще лучше попробуй те сформировать и высказать свою позици. У нас тут свобода слова пока, так что &quot;ты заебал этой темой&quot; не пройдет)))<br><br> Ну что летс дискас!)))<br><br></p>]]></description>
</item>
<item>
<title>2SpaceIvan:</title>
<link>https://rulinux.net/message.php?newsid=41841&amp;page=1</link>
<guid>https://rulinux.net/message.php?newsid=41841&amp;page=1</guid>
<pubDate>Mon, 22 Sep 2014 17:43:18 +0400</pubDate>
<description><![CDATA[<p>Сними пожалуйста со шпротыча права модератора. Он пишет, что никто его не просил и никто его не уполномачивал. <br><br><a href="http://rulinux.net/thread_41836_comment_206199#msg206199">меня никто не просил становится модератором, в один прекрасный день я просто залогинился и увидел модераторские менюшки, кто это сделал до сих пор не знаю.</a><br><br>На лицо глюк софта, который следует исправить.</p>]]></description>
</item>
<item>
<title>Вот говно тут развели</title>
<link>https://rulinux.net/message.php?newsid=41834&amp;page=1</link>
<guid>https://rulinux.net/message.php?newsid=41834&amp;page=1</guid>
<pubDate>Sat, 20 Sep 2014 17:36:16 +0400</pubDate>
<description><![CDATA[<p>Это, наверное, смерть ресурса. По крайней мере для меня.</p>]]></description>
</item>
<item>
<title>Реквестирую открыть исходники воюющих сторон!</title>
<link>https://rulinux.net/message.php?newsid=41823&amp;page=1</link>
<guid>https://rulinux.net/message.php?newsid=41823&amp;page=1</guid>
<pubDate>Thu, 18 Sep 2014 14:00:28 +0400</pubDate>
<description><![CDATA[<p>У нас не какой-то быдло ресурс, давайте уважать другдруга и пишушие всякую херню боты,  должны быть с открытыми исходниками.<br><br> Бот Spaceivan'а имеет много недостатков,  бот Хокума, судя по качеству работы,  вообще придется переписывать с нуля.<br><br> Выходи на честный бой!<br><br></p>]]></description>
</item>
<item>
<title>Request.</title>
<link>https://rulinux.net/message.php?newsid=41814&amp;page=1</link>
<guid>https://rulinux.net/message.php?newsid=41814&amp;page=1</guid>
<pubDate>Tue, 16 Sep 2014 14:57:06 +0400</pubDate>
<description><![CDATA[<p>Прошу временно ввести на территории ресурса анальную модерацию с целью пресечения гомосексуального флуда, сроком на месяц. </p>]]></description>
</item>
<item>
<title>Linux.org.ru упал?</title>
<link>https://rulinux.net/message.php?newsid=41812&amp;page=1</link>
<guid>https://rulinux.net/message.php?newsid=41812&amp;page=1</guid>
<pubDate>Tue, 16 Sep 2014 14:23:27 +0400</pubDate>
<description><![CDATA[<p>opensource.ru не отвечает!</p>]]></description>
</item>
</channel>
</rss>