revamping website

This commit is contained in:
Dionysus 2023-05-01 21:59:55 -04:00
parent 5b7cbeec81
commit 53b5aafaed
Signed by: acidvegas
GPG Key ID: EF4B922DB85DC9DE
153 changed files with 52 additions and 44418 deletions

View File

@ -1,4 +0,0 @@
<!doctype html>
<title>Error</title>
<style>body{background-color:#111;color:#fff;font-family:monospace}</style>
<br><br><br><enter><h1>404</h1></center>

File diff suppressed because it is too large Load Diff

View File

@ -1,14 +0,0 @@
<!doctype html>
<link rel="stylesheet" href="../style.css">
<title>acidvegas.github.io</title>
<h1><a href="../index.html" title="Home">&#8962;&#xFE0E;</a> acidvegas.github.io</h1>
<div style="padding-left:30px">
<h4>https://acid.vegas/</h4>
<h5>git clone <a href="https://github.com/acidvegas/acidvegas.github.io.git" title="acidvegas.github.io clone URL">https://github.com/acidvegas/acidvegas.github.io.git</a></h5>
</div>
<hr>
<table id="main" cellpadding="0" cellspacing="0">
<tr id="navigation"><th></th><th>Hash</th><th>Commit message</th><th>Author</th><th>Date</th><th align="right">Files</th><th align="right">+</th><th align="right">-</th></tr>
<tr class="item"><td><span style="color:green" title="acidvegas (MOST DANGEROUS MOTHERFUCK) <acid.vegas@acid.vegas>&#13;EF4B922DB85DC9DE">&#128274;&#xFE0E;</span></td><td><a href="commit/4349fd2.html" title="View this commit">4349fd2</a></td><td>Initial commit</td><td>acidvegas</td><td>2020-04-08 20:02</td><td align="right">136</td><td align="right">+41855</td><td align="right">-0</td></tr>
</table>
<div id="footer">site generated by <a href="https://github.com/acidvegas/stagit" target="_blank">stagit</a> on <a href="#">05/03/20</a></div>

View File

@ -1,30 +0,0 @@
<!doctype html>
<link rel="stylesheet" href="../../style.css">
<title>anope :: 57a284b</title>
<h1><a href="../index.html" title="Back to Repository">&larr;&#xFE0E;</a> anope :: 57a284b</h1>
<hr>
<table id="main" cellpadding="0" cellspacing="0">
<tr class="item"><td class="linenumber"><a href="#l1" name="l1">1</a></td><td><pre><span class="commit">commit 57a284b2e3365ef0ed599a452a73cda4abce257d</span><span class="commit"> (</span><span class="reference">HEAD -&gt; </span><span class="branch">master</span><span class="commit">, </span><span class="remote">origin/master</span><span class="commit">)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l2" name="l2">2</a></td><td><pre>Author: acidvegas &lt;acid.vegas@acid.vegas&gt;</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l3" name="l3">3</a></td><td><pre>Date: Tue Mar 31 06:39:35 2020 -0400</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l4" name="l4">4</a></td><td><pre></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l5" name="l5">5</a></td><td><pre> Locked Cn mode changing</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l6" name="l6">6</a></td><td><pre>---</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l7" name="l7">7</a></td><td><pre> data/chanserv.conf | 2 <span class="insertion">+</span><span class="deletion">-</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l8" name="l8">8</a></td><td><pre> 1 file changed, 1 insertion(+), 1 deletion(-)</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l9" name="l9">9</a></td><td><pre></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l10" name="l10">10</a></td><td><pre><span class="bold">diff --git a/data/chanserv.conf b/data/chanserv.conf</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l11" name="l11">11</a></td><td><pre><span class="bold">index fb4afbc..ac555bf 100644</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l12" name="l12">12</a></td><td><pre><span class="bold">--- a/data/chanserv.conf</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l13" name="l13">13</a></td><td><pre><span class="bold">+++ b/data/chanserv.conf</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l14" name="l14">14</a></td><td><pre><span class="hunk">@@ -13,7 +13,7 @@</span> </span>module {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l15" name="l15">15</a></td><td><pre> expire = 7d</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l16" name="l16">16</a></td><td><pre> accessmax = 100</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l17" name="l17">17</a></td><td><pre> inhabit = 15s</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l18" name="l18">18</a></td><td><pre><span class="deletion">- nomlock = &quot;LpPs&quot;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l19" name="l19">19</a></td><td><pre><span class="insertion">+</span> <span class="insertion">nomlock = &quot;CnLpPs&quot;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l20" name="l20">20</a></td><td><pre> reasonmax = 200</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l21" name="l21">21</a></td><td><pre> signkickformat = &quot;%m (%n)&quot;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l22" name="l22">22</a></td><td><pre> disallow_hostmask_access = true</span></pre></td></tr>
</table>
<div id="footer">site generated by <a href="https://github.com/acidvegas/stagit" target="_blank">stagit</a> on <a href="#">05/03/20</a></div>

View File

@ -1,30 +0,0 @@
<!doctype html>
<link rel="stylesheet" href="../../style.css">
<title>anope :: 847a56f</title>
<h1><a href="../index.html" title="Back to Repository">&larr;&#xFE0E;</a> anope :: 847a56f</h1>
<hr>
<table id="main" cellpadding="0" cellspacing="0">
<tr class="item"><td class="linenumber"><a href="#l1" name="l1">1</a></td><td><pre><span class="commit">commit 847a56fdd3908321988e008e058a4c17c6abd95b</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l2" name="l2">2</a></td><td><pre>Author: acidvegas &lt;acid.vegas@acid.vegas&gt;</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l3" name="l3">3</a></td><td><pre>Date: Tue Mar 31 06:33:13 2020 -0400</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l4" name="l4">4</a></td><td><pre></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l5" name="l5">5</a></td><td><pre> Restrict +L usage for non-ops</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l6" name="l6">6</a></td><td><pre>---</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l7" name="l7">7</a></td><td><pre> data/chanserv.conf | 2 <span class="insertion">+</span><span class="deletion">-</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l8" name="l8">8</a></td><td><pre> 1 file changed, 1 insertion(+), 1 deletion(-)</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l9" name="l9">9</a></td><td><pre></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l10" name="l10">10</a></td><td><pre><span class="bold">diff --git a/data/chanserv.conf b/data/chanserv.conf</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l11" name="l11">11</a></td><td><pre><span class="bold">index f2f6d61..fb4afbc 100644</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l12" name="l12">12</a></td><td><pre><span class="bold">--- a/data/chanserv.conf</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l13" name="l13">13</a></td><td><pre><span class="bold">+++ b/data/chanserv.conf</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l14" name="l14">14</a></td><td><pre><span class="hunk">@@ -13,7 +13,7 @@</span> </span>module {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l15" name="l15">15</a></td><td><pre> expire = 7d</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l16" name="l16">16</a></td><td><pre> accessmax = 100</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l17" name="l17">17</a></td><td><pre> inhabit = 15s</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l18" name="l18">18</a></td><td><pre><span class="deletion">- nomlock = &quot;pPs&quot;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l19" name="l19">19</a></td><td><pre><span class="insertion">+</span> <span class="insertion">nomlock = &quot;LpPs&quot;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l20" name="l20">20</a></td><td><pre> reasonmax = 200</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l21" name="l21">21</a></td><td><pre> signkickformat = &quot;%m (%n)&quot;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l22" name="l22">22</a></td><td><pre> disallow_hostmask_access = true</span></pre></td></tr>
</table>
<div id="footer">site generated by <a href="https://github.com/acidvegas/stagit" target="_blank">stagit</a> on <a href="#">05/03/20</a></div>

File diff suppressed because it is too large Load Diff

View File

@ -1,16 +0,0 @@
<!doctype html>
<link rel="stylesheet" href="../style.css">
<title>anope</title>
<h1><a href="../index.html" title="Home">&#8962;&#xFE0E;</a> anope</h1>
<div style="padding-left:30px">
<h4>supernets anope source code & configuration</h4>
<h5>git clone <a href="https://github.com/supernets/anope.git" title="anope clone URL">https://github.com/supernets/anope.git</a></h5>
</div>
<hr>
<table id="main" cellpadding="0" cellspacing="0">
<tr id="navigation"><th></th><th>Hash</th><th>Commit message</th><th>Author</th><th>Date</th><th align="right">Files</th><th align="right">+</th><th align="right">-</th></tr>
<tr class="item"><td><span style="color:green" title="acidvegas (MOST DANGEROUS MOTHERFUCK) <acid.vegas@acid.vegas>&#13;EF4B922DB85DC9DE">&#128274;&#xFE0E;</span></td><td><a href="commit/57a284b.html" title="View this commit">57a284b</a></td><td>Locked Cn mode changing</td><td>acidvegas</td><td>2020-03-31 06:39</td><td align="right">1</td><td align="right">+1</td><td align="right">-1</td></tr>
<tr class="item"><td><span style="color:green" title="acidvegas (MOST DANGEROUS MOTHERFUCK) <acid.vegas@acid.vegas>&#13;EF4B922DB85DC9DE">&#128274;&#xFE0E;</span></td><td><a href="commit/847a56f.html" title="View this commit">847a56f</a></td><td>Restrict +L usage for non-ops</td><td>acidvegas</td><td>2020-03-31 06:33</td><td align="right">1</td><td align="right">+1</td><td align="right">-1</td></tr>
<tr class="item"><td><span style="color:green" title="acidvegas (MOST DANGEROUS MOTHERFUCK) <acid.vegas@acid.vegas>&#13;EF4B922DB85DC9DE">&#128274;&#xFE0E;</span></td><td><a href="commit/945f758.html" title="View this commit">945f758</a></td><td>Initial commit</td><td>acidvegas</td><td>2020-03-08 22:07</td><td align="right">430</td><td align="right">+244667</td><td align="right">-0</td></tr>
</table>
<div id="footer">site generated by <a href="https://github.com/acidvegas/stagit" target="_blank">stagit</a> on <a href="#">05/03/20</a></div>

View File

@ -1,132 +0,0 @@
<!doctype html>
<link rel="stylesheet" href="../../style.css">
<title>archlinux :: 6ab8003</title>
<h1><a href="../index.html" title="Back to Repository">&larr;&#xFE0E;</a> archlinux :: 6ab8003</h1>
<hr>
<table id="main" cellpadding="0" cellspacing="0">
<tr class="item"><td class="linenumber"><a href="#l1" name="l1">1</a></td><td><pre><span class="commit">commit 6ab800315de9830da32f1698e6237c9dbc5f0f02</span><span class="commit"> (</span><span class="reference">HEAD -&gt; </span><span class="branch">master</span><span class="commit">, </span><span class="remote">origin/master</span><span class="commit">)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l2" name="l2">2</a></td><td><pre>Author: acidvegas &lt;acid.vegas@acid.vegas&gt;</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l3" name="l3">3</a></td><td><pre>Date: Thu Apr 9 18:13:43 2020 -0400</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l4" name="l4">4</a></td><td><pre></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l5" name="l5">5</a></td><td><pre> update</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l6" name="l6">6</a></td><td><pre>---</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l7" name="l7">7</a></td><td><pre> etc/ssh/sshd_config | 1 <span class="deletion">-</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l8" name="l8">8</a></td><td><pre> home/acidvegas/.bashrc | 3 <span class="insertion">+</span><span class="deletion">--</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l9" name="l9">9</a></td><td><pre> home/acidvegas/.gitconfig | 4 <span class="insertion">++</span><span class="deletion">--</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l10" name="l10">10</a></td><td><pre> home/acidvegas/.gnupg/gpg.conf | 18 <span class="insertion">+++++++</span><span class="deletion">-----------</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l11" name="l11">11</a></td><td><pre> home/acidvegas/.screenrc | 31 <span class="insertion">+++++++++++++++++++++++++++++++</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l12" name="l12">12</a></td><td><pre> 5 files changed, 41 insertions(+), 16 deletions(-)</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l13" name="l13">13</a></td><td><pre></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l14" name="l14">14</a></td><td><pre><span class="bold">diff --git a/etc/ssh/sshd_config b/etc/ssh/sshd_config</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l15" name="l15">15</a></td><td><pre><span class="bold">index d97b2a7..de4da1e 100644</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l16" name="l16">16</a></td><td><pre><span class="bold">--- a/etc/ssh/sshd_config</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l17" name="l17">17</a></td><td><pre><span class="bold">+++ b/etc/ssh/sshd_config</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l18" name="l18">18</a></td><td><pre><span class="hunk">@@ -14,4 +14,3 @@</span> </span>PermitRootLogin no</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l19" name="l19">19</a></td><td><pre> Port CHANGEME</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l20" name="l20">20</a></td><td><pre> PrintLastLog no</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l21" name="l21">21</a></td><td><pre> Protocol 2</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l22" name="l22">22</a></td><td><pre><span class="deletion">-UsePam yes</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l23" name="l23">23</a></td><td><pre><span class="bold">diff --git a/home/acidvegas/.bashrc b/home/acidvegas/.bashrc</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l24" name="l24">24</a></td><td><pre><span class="bold">index ff43633..7f84d84 100644</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l25" name="l25">25</a></td><td><pre><span class="bold">--- a/home/acidvegas/.bashrc</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l26" name="l26">26</a></td><td><pre><span class="bold">+++ b/home/acidvegas/.bashrc</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l27" name="l27">27</a></td><td><pre><span class="hunk">@@ -13,7 +13,7 @@</span> </span>fi</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l28" name="l28">28</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l29" name="l29">29</a></td><td><pre> alias ..='cd ../'</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l30" name="l30">30</a></td><td><pre> alias busy=&quot;cat /dev/urandom | hexdump -C | grep 'ca fe'&quot;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l31" name="l31">31</a></td><td><pre><span class="deletion">-alias cpass='pass | tr &quot; &quot; &quot; &quot;'</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l32" name="l32">32</a></td><td><pre><span class="insertion">+</span><span class="insertion">alias clbin='curl -F \'clbin=&lt;-\' https://clbin.com'</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l33" name="l33">33</a></td><td><pre> alias diff='diff --color=auto'</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l34" name="l34">34</a></td><td><pre> alias dump='setterm -dump 1 -file screen.dump'</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l35" name="l35">35</a></td><td><pre> alias dyn='curl &quot;https://dynamicdns.park-your-domain.com/update?host=pi&amp;domain=CHANGEME.com&amp;password=CHANGEME&amp;ip=$(curl -s ipecho.net/plain)&quot;'</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l36" name="l36">36</a></td><td><pre><span class="hunk">@@ -29,7 +29,6 @@</span> </span>alias pydebug='python -m trace -t'</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l37" name="l37">37</a></td><td><pre> alias rmexif='for IMAGE in $(find ./ -type f \( -iname *.gif -o -iname *.jpg -o -iname *.jpeg -o -iname *.png \)); do exiftool -all= $IMAGE; done'</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l38" name="l38">38</a></td><td><pre> alias ssh-add='ssh-add -t 1h'</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l39" name="l39">39</a></td><td><pre> alias su='su -l'</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l40" name="l40">40</a></td><td><pre><span class="deletion">-alias tb='(exec 3&lt;&gt;/dev/tcp/termbin.com/9999; cat &gt;&amp;3; cat &lt;&amp;3; exec 3&lt;&amp;-) | xclip -selection c'</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l41" name="l41">41</a></td><td><pre> alias todo='~/.scripts/todo'</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l42" name="l42">42</a></td><td><pre> alias y2m='youtube-dl --extract-audio --audio-format mp3 --audio-quality 0 -o &quot;%(title)s.%(ext)s&quot; --no-cache-dir --no-call-home'</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l43" name="l43">43</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l44" name="l44">44</a></td><td><pre><span class="bold">diff --git a/home/acidvegas/.gitconfig b/home/acidvegas/.gitconfig</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l45" name="l45">45</a></td><td><pre><span class="bold">index ce218c2..d8bb65e 100644</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l46" name="l46">46</a></td><td><pre><span class="bold">--- a/home/acidvegas/.gitconfig</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l47" name="l47">47</a></td><td><pre><span class="bold">+++ b/home/acidvegas/.gitconfig</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l48" name="l48">48</a></td><td><pre><span class="hunk">@@ -1,8 +1,8 @@</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l49" name="l49">49</a></td><td><pre> [alias]</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l50" name="l50">50</a></td><td><pre> commits = log --color --graph --pretty=format:'%Cred%h%Creset - %s %Cgreen(%cr) %C(bold blue)&lt;%an&gt;%Creset' --abbrev-commit</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l51" name="l51">51</a></td><td><pre><span class="deletion">- microclone = clone --depth=1</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l52" name="l52">52</a></td><td><pre><span class="insertion">+</span> <span class="insertion">mclone = clone --depth=1</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l53" name="l53">53</a></td><td><pre> rmcommits = !git checkout --orphan latest_branch &amp;&amp; git add -A &amp;&amp; git commit -S -am &quot;Initial commit&quot; &amp;&amp; git branch -D master &amp;&amp; git branch -m master &amp;&amp; git push -f origin master</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l54" name="l54">54</a></td><td><pre><span class="deletion">- setup = !git config user.name acidvegas &amp;&amp; git config user.email acid.vegas@acid.vegas &amp;&amp; git config user.signingkey 441EB0F297E0DCF0AEF2F711EF4B922DB85DC9DE'</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l55" name="l55">55</a></td><td><pre><span class="insertion">+</span> <span class="insertion">setup = !git config user.name acidvegas &amp;&amp; git config user.email acid.vegas@acid.vegas &amp;&amp; git config user.signingkey 441EB0F297E0DCF0AEF2F711EF4B922DB85DC9DE</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l56" name="l56">56</a></td><td><pre> stats = diff --stat</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l57" name="l57">57</a></td><td><pre> [color]</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l58" name="l58">58</a></td><td><pre> diff = auto</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l59" name="l59">59</a></td><td><pre><span class="bold">diff --git a/home/acidvegas/.gnupg/gpg.conf b/home/acidvegas/.gnupg/gpg.conf</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l60" name="l60">60</a></td><td><pre><span class="bold">index 7c401d9..f814e29 100644</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l61" name="l61">61</a></td><td><pre><span class="bold">--- a/home/acidvegas/.gnupg/gpg.conf</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l62" name="l62">62</a></td><td><pre><span class="bold">+++ b/home/acidvegas/.gnupg/gpg.conf</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l63" name="l63">63</a></td><td><pre><span class="hunk">@@ -1,17 +1,13 @@</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l64" name="l64">64</a></td><td><pre><span class="deletion">-keyserver-options no-honor-keyserver-url</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l65" name="l65">65</a></td><td><pre><span class="deletion">-keyserver-options include-revoked</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l66" name="l66">66</a></td><td><pre><span class="deletion">-</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l67" name="l67">67</a></td><td><pre><span class="insertion">+</span><span class="insertion">default-key 441EB0F297E0DCF0AEF2F711EF4B922DB85DC9DE</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l68" name="l68">68</a></td><td><pre> keyid-format 0xlong</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l69" name="l69">69</a></td><td><pre><span class="deletion">-with-fingerprint</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l70" name="l70">70</a></td><td><pre><span class="deletion">-</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l71" name="l71">71</a></td><td><pre><span class="deletion">-no-greeting</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l72" name="l72">72</a></td><td><pre><span class="deletion">-no-emit-version</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l73" name="l73">73</a></td><td><pre><span class="deletion">-no-comments</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l74" name="l74">74</a></td><td><pre><span class="insertion">+</span><span class="insertion">keyserver-options include-revoked no-honor-keyserver-url</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l75" name="l75">75</a></td><td><pre> list-options show-uid-validity</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l76" name="l76">76</a></td><td><pre><span class="deletion">-verify-options show-uid-validity</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l77" name="l77">77</a></td><td><pre><span class="deletion">-use-agent</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l78" name="l78">78</a></td><td><pre><span class="insertion">+</span><span class="insertion">no-comments</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l79" name="l79">79</a></td><td><pre><span class="insertion">+</span><span class="insertion">no-emit-version</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l80" name="l80">80</a></td><td><pre><span class="insertion">+</span><span class="insertion">no-greeting</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l81" name="l81">81</a></td><td><pre> utf8-strings</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l82" name="l82">82</a></td><td><pre><span class="deletion">-display-charset utf-8</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l83" name="l83">83</a></td><td><pre><span class="insertion">+</span><span class="insertion">verify-options show-uid-validity</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l84" name="l84">84</a></td><td><pre><span class="insertion">+</span><span class="insertion">with-fingerprint</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l85" name="l85">85</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l86" name="l86">86</a></td><td><pre> personal-cipher-preferences AES256 AES192 AES CAST5</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l87" name="l87">87</a></td><td><pre> personal-digest-preferences SHA512 SHA384 SHA256 SHA224</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l88" name="l88">88</a></td><td><pre><span class="bold">diff --git a/home/acidvegas/.screenrc b/home/acidvegas/.screenrc</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l89" name="l89">89</a></td><td><pre><span class="bold">new file mode 100644</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l90" name="l90">90</a></td><td><pre><span class="bold">index 0000000..b3d4678</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l91" name="l91">91</a></td><td><pre><span class="bold">--- /dev/null</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l92" name="l92">92</a></td><td><pre><span class="bold">+++ b/home/acidvegas/.screenrc</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l93" name="l93">93</a></td><td><pre><span class="hunk">@@ -0,0 +1,31 @@</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l94" name="l94">94</a></td><td><pre><span class="insertion">+</span><span class="insertion">altscreen on</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l95" name="l95">95</a></td><td><pre><span class="insertion">+</span><span class="insertion">defscrollback 1000</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l96" name="l96">96</a></td><td><pre><span class="insertion">+</span><span class="insertion">defutf8 on</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l97" name="l97">97</a></td><td><pre><span class="insertion">+</span><span class="insertion">startup_message off</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l98" name="l98">98</a></td><td><pre><span class="insertion">+</span><span class="insertion">term screen-256color</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l99" name="l99">99</a></td><td><pre><span class="insertion">+</span><span class="insertion">vbell off</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l100" name="l100">100</a></td><td><pre><span class="insertion">+</span><span class="insertion">zombie kr</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l101" name="l101">101</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l102" name="l102">102</a></td><td><pre><span class="insertion">+</span><span class="insertion">screen -t bash bash</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l103" name="l103">103</a></td><td><pre><span class="insertion">+</span><span class="insertion">screen -t irc weechat</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l104" name="l104">104</a></td><td><pre><span class="insertion">+</span><span class="insertion">screen -t supernets ssh supernets</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l105" name="l105">105</a></td><td><pre><span class="insertion">+</span><span class="insertion">screen -t biscuit ssh biscuit</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l106" name="l106">106</a></td><td><pre><span class="insertion">+</span><span class="insertion">screen -t spider ssh spider</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l107" name="l107">107</a></td><td><pre><span class="insertion">+</span><span class="insertion">screen -t pump ssh pump</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l108" name="l108">108</a></td><td><pre><span class="insertion">+</span><span class="insertion">screen -t spun ssh spun</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l109" name="l109">109</a></td><td><pre><span class="insertion">+</span><span class="insertion">screen -t watchdog ssh watchdog</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l110" name="l110">110</a></td><td><pre><span class="insertion">+</span><span class="insertion">screen -t moe ssh moe</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l111" name="l111">111</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l112" name="l112">112</a></td><td><pre><span class="insertion">+</span><span class="insertion">caption always &quot;%{= kw}%=%-w%{= wk}%n %t%{-}%+W%=&quot;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l113" name="l113">113</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l114" name="l114">114</a></td><td><pre><span class="insertion">+</span><span class="insertion">unbindall</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l115" name="l115">115</a></td><td><pre><span class="insertion">+</span><span class="insertion">bindkey ^[[1;3D prev</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l116" name="l116">116</a></td><td><pre><span class="insertion">+</span><span class="insertion">bindkey ^[[1;3C next</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l117" name="l117">117</a></td><td><pre><span class="insertion">+</span><span class="insertion">bind : colon</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l118" name="l118">118</a></td><td><pre><span class="insertion">+</span><span class="insertion">bind c screen</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l119" name="l119">119</a></td><td><pre><span class="insertion">+</span><span class="insertion">bind d detach</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l120" name="l120">120</a></td><td><pre><span class="insertion">+</span><span class="insertion">bind k kill</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l121" name="l121">121</a></td><td><pre><span class="insertion">+</span><span class="insertion">bind n number</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l122" name="l122">122</a></td><td><pre><span class="insertion">+</span><span class="insertion">bind r redisplay</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l123" name="l123">123</a></td><td><pre><span class="insertion">+</span><span class="insertion">bind s source $HOME/.screenrc</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l124" name="l124">124</a></td><td><pre><span class="insertion">+</span><span class="insertion">bind t title</span></pre></td></tr>
</table>
<div id="footer">site generated by <a href="https://github.com/acidvegas/stagit" target="_blank">stagit</a> on <a href="#">05/03/20</a></div>

File diff suppressed because it is too large Load Diff

View File

@ -1,15 +0,0 @@
<!doctype html>
<link rel="stylesheet" href="../style.css">
<title>archlinux</title>
<h1><a href="../index.html" title="Home">&#8962;&#xFE0E;</a> archlinux</h1>
<div style="padding-left:30px">
<h4>backup of my archlinux setup</h4>
<h5>git clone <a href="https://github.com/acidvegas/archlinux.git" title="archlinux clone URL">https://github.com/acidvegas/archlinux.git</a></h5>
</div>
<hr>
<table id="main" cellpadding="0" cellspacing="0">
<tr id="navigation"><th></th><th>Hash</th><th>Commit message</th><th>Author</th><th>Date</th><th align="right">Files</th><th align="right">+</th><th align="right">-</th></tr>
<tr class="item"><td><span style="color:green" title="acidvegas (MOST DANGEROUS MOTHERFUCK) <acid.vegas@acid.vegas>&#13;EF4B922DB85DC9DE">&#128274;&#xFE0E;</span></td><td><a href="commit/6ab8003.html" title="View this commit">6ab8003</a></td><td>update</td><td>acidvegas</td><td>2020-04-09 18:13</td><td align="right">5</td><td align="right">+41</td><td align="right">-16</td></tr>
<tr class="item"><td><span style="color:green" title="acidvegas (MOST DANGEROUS MOTHERFUCK) <acid.vegas@acid.vegas>&#13;EF4B922DB85DC9DE">&#128274;&#xFE0E;</span></td><td><a href="commit/e4bc41b.html" title="View this commit">e4bc41b</a></td><td>Initial commit</td><td>acidvegas</td><td>2020-03-29 05:24</td><td align="right">35</td><td align="right">+1406</td><td align="right">-0</td></tr>
</table>
<div id="footer">site generated by <a href="https://github.com/acidvegas/stagit" target="_blank">stagit</a> on <a href="#">05/03/20</a></div>

View File

@ -1,588 +0,0 @@
<!doctype html>
<link rel="stylesheet" href="../../style.css">
<title>asciimaker :: 26f7b8a</title>
<h1><a href="../index.html" title="Back to Repository">&larr;&#xFE0E;</a> asciimaker :: 26f7b8a</h1>
<hr>
<table id="main" cellpadding="0" cellspacing="0">
<tr class="item"><td class="linenumber"><a href="#l1" name="l1">1</a></td><td><pre><span class="commit">commit 26f7b8ac93ce56f7b56d67504e7bd5707b7ffd08</span><span class="commit"> (</span><span class="reference">HEAD -&gt; </span><span class="branch">master</span><span class="commit">)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l2" name="l2">2</a></td><td><pre>Author: acidvegas &lt;acid.vegas@acid.vegas&gt;</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l3" name="l3">3</a></td><td><pre>Date: Mon Jun 24 22:43:40 2019 -0400</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l4" name="l4">4</a></td><td><pre></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l5" name="l5">5</a></td><td><pre> Initial commit</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l6" name="l6">6</a></td><td><pre>---</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l7" name="l7">7</a></td><td><pre> data/checkered.png | Bin <span class="deletion">0</span> -&gt; <span class="insertion">119</span> bytes</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l8" name="l8">8</a></td><td><pre> data/clipboard.swf | Bin <span class="deletion">0</span> -&gt; <span class="insertion">109</span> bytes</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l9" name="l9">9</a></td><td><pre> index.html | 555 <span class="insertion">+++++++++++++++++++++++++++++++++++++++++++++++++++++</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l10" name="l10">10</a></td><td><pre> 3 files changed, 555 insertions(+)</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l11" name="l11">11</a></td><td><pre></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l12" name="l12">12</a></td><td><pre><span class="bold">diff --git a/data/checkered.png b/data/checkered.png</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l13" name="l13">13</a></td><td><pre><span class="bold">new file mode 100644</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l14" name="l14">14</a></td><td><pre><span class="bold">index 0000000..c6e3ac6</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l15" name="l15">15</a></td><td><pre>Binary files /dev/null and b/data/checkered.png differ</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l16" name="l16">16</a></td><td><pre><span class="bold">diff --git a/data/clipboard.swf b/data/clipboard.swf</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l17" name="l17">17</a></td><td><pre><span class="bold">new file mode 100644</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l18" name="l18">18</a></td><td><pre><span class="bold">index 0000000..2cfe371</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l19" name="l19">19</a></td><td><pre>Binary files /dev/null and b/data/clipboard.swf differ</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l20" name="l20">20</a></td><td><pre><span class="bold">diff --git a/index.html b/index.html</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l21" name="l21">21</a></td><td><pre><span class="bold">new file mode 100644</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l22" name="l22">22</a></td><td><pre><span class="bold">index 0000000..b026b61</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l23" name="l23">23</a></td><td><pre><span class="bold">--- /dev/null</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l24" name="l24">24</a></td><td><pre><span class="bold">+++ b/index.html</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l25" name="l25">25</a></td><td><pre><span class="hunk">@@ -0,0 +1,555 @@</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l26" name="l26">26</a></td><td><pre><span class="insertion">+</span><span class="insertion">&lt;html&gt;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l27" name="l27">27</a></td><td><pre><span class="insertion">+</span> <span class="insertion">&lt;head&gt;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l28" name="l28">28</a></td><td><pre><span class="insertion">+</span> <span class="insertion">&lt;title&gt;ASCII Maker&lt;/title&gt;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l29" name="l29">29</a></td><td><pre><span class="insertion">+</span> <span class="insertion">&lt;style&gt;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l30" name="l30">30</a></td><td><pre><span class="insertion">+</span> <span class="insertion">.cell{width:8px;height:16px;cursor:default;font-size:10pt;font-weight:700;font-family:Courier New}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l31" name="l31">31</a></td><td><pre><span class="insertion">+</span> <span class="insertion">.noDrag{-moz-user-select:none}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l32" name="l32">32</a></td><td><pre><span class="insertion">+</span> <span class="insertion">#canvas,#picker{margin:auto}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l33" name="l33">33</a></td><td><pre><span class="insertion">+</span> <span class="insertion">#drafts{position:absolute;top:5px;left:5px;font-family:Verdana;font-size:8pt}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l34" name="l34">34</a></td><td><pre><span class="insertion">+</span> <span class="insertion">#textBuffer{position:absolute;width:1px;height:1px}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l35" name="l35">35</a></td><td><pre><span class="insertion">+</span> <span class="insertion">&lt;/style&gt;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l36" name="l36">36</a></td><td><pre><span class="insertion">+</span> <span class="insertion">&lt;script type=&quot;text/javascript&quot;&gt;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l37" name="l37">37</a></td><td><pre><span class="insertion">+</span> <span class="insertion">var halt = unescape('%0F');</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l38" name="l38">38</a></td><td><pre><span class="insertion">+</span> <span class="insertion">var code = unescape('%03');</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l39" name="l39">39</a></td><td><pre><span class="insertion">+</span> <span class="insertion">var brushColour = 4;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l40" name="l40">40</a></td><td><pre><span class="insertion">+</span> <span class="insertion">var mode = 0, isDragging = 0, canvasWidth = 0, canvasHeight = 0, selected = 0, curKey = 0, tool = 0;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l41" name="l41">41</a></td><td><pre><span class="insertion">+</span> <span class="insertion">var palette = new Array('FFFFFF', '000000', '00007F', '009300', 'FF0000', '7F0000', '9C009C', 'FC7F00', 'FFFF00', '00FC00', '009393', '00FFFF', '0000FC', 'FF00FF', '7F7F7F', 'D2D2D2');</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l42" name="l42">42</a></td><td><pre><span class="insertion">+</span> <span class="insertion">var drafts = new Array();</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l43" name="l43">43</a></td><td><pre><span class="insertion">+</span> <span class="insertion">var undo = new Array();</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l44" name="l44">44</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l45" name="l45">45</a></td><td><pre><span class="insertion">+</span> <span class="insertion">function generateCanvas(width, height) {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l46" name="l46">46</a></td><td><pre><span class="insertion">+</span> <span class="insertion">canvasWidth = width;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l47" name="l47">47</a></td><td><pre><span class="insertion">+</span> <span class="insertion">canvasHeight = height;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l48" name="l48">48</a></td><td><pre><span class="insertion">+</span> <span class="insertion">document.getElementById('canvas').innerHTML = '';</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l49" name="l49">49</a></td><td><pre><span class="insertion">+</span> <span class="insertion">var tableGrid = document.createElement(&quot;table&quot;);</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l50" name="l50">50</a></td><td><pre><span class="insertion">+</span> <span class="insertion">tableGrid.setAttribute('cellpadding', '0');</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l51" name="l51">51</a></td><td><pre><span class="insertion">+</span> <span class="insertion">tableGrid.setAttribute('cellspacing', '0');</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l52" name="l52">52</a></td><td><pre><span class="insertion">+</span> <span class="insertion">tableGrid.setAttribute('onmousedown', 'toggleDragging(1);');</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l53" name="l53">53</a></td><td><pre><span class="insertion">+</span> <span class="insertion">tableGrid.setAttribute('onmouseup', 'toggleDragging(0);');</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l54" name="l54">54</a></td><td><pre><span class="insertion">+</span> <span class="insertion">tableGrid.setAttribute('background', 'data/checkered.png');</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l55" name="l55">55</a></td><td><pre><span class="insertion">+</span> <span class="insertion">for (var y = 0; y &lt; height; y++) {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l56" name="l56">56</a></td><td><pre><span class="insertion">+</span> <span class="insertion">var currentLine = document.createElement(&quot;tr&quot;);</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l57" name="l57">57</a></td><td><pre><span class="insertion">+</span> <span class="insertion">for (var x = 0; x &lt; width; x++) {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l58" name="l58">58</a></td><td><pre><span class="insertion">+</span> <span class="insertion">var currentCell = document.createElement(&quot;td&quot;);</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l59" name="l59">59</a></td><td><pre><span class="insertion">+</span> <span class="insertion">currentCell.setAttribute('class', 'cell');</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l60" name="l60">60</a></td><td><pre><span class="insertion">+</span> <span class="insertion">currentCell.innerHTML = ' ';</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l61" name="l61">61</a></td><td><pre><span class="insertion">+</span> <span class="insertion">currentCell.setAttribute('onmousemove', 'fillCell(' + (width * y + x) + ');');</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l62" name="l62">62</a></td><td><pre><span class="insertion">+</span> <span class="insertion">currentCell.setAttribute('onmousedown', 'isDragging=1;fillCell(' + (width * y + x) + ');');</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l63" name="l63">63</a></td><td><pre><span class="insertion">+</span> <span class="insertion">currentLine.appendChild(currentCell);</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l64" name="l64">64</a></td><td><pre><span class="insertion">+</span> <span class="insertion">}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l65" name="l65">65</a></td><td><pre><span class="insertion">+</span> <span class="insertion">tableGrid.appendChild(currentLine);</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l66" name="l66">66</a></td><td><pre><span class="insertion">+</span> <span class="insertion">}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l67" name="l67">67</a></td><td><pre><span class="insertion">+</span> <span class="insertion">document.getElementById('canvas').style.width = x * 8 + 'px';</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l68" name="l68">68</a></td><td><pre><span class="insertion">+</span> <span class="insertion">document.getElementById('canvas').appendChild(tableGrid);</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l69" name="l69">69</a></td><td><pre><span class="insertion">+</span> <span class="insertion">}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l70" name="l70">70</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l71" name="l71">71</a></td><td><pre><span class="insertion">+</span> <span class="insertion">function generatePalette() {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l72" name="l72">72</a></td><td><pre><span class="insertion">+</span> <span class="insertion">var paletteGrid = document.createElement(&quot;table&quot;);</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l73" name="l73">73</a></td><td><pre><span class="insertion">+</span> <span class="insertion">paletteGrid.setAttribute('cellspacing', '2');</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l74" name="l74">74</a></td><td><pre><span class="insertion">+</span> <span class="insertion">var paletteLine = document.createElement(&quot;tr&quot;);</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l75" name="l75">75</a></td><td><pre><span class="insertion">+</span> <span class="insertion">for (i = 0; i &lt; 16; i++) {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l76" name="l76">76</a></td><td><pre><span class="insertion">+</span> <span class="insertion">var currentPalette = document.createElement('td');</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l77" name="l77">77</a></td><td><pre><span class="insertion">+</span> <span class="insertion">currentPalette.setAttribute('style', 'width: 20px; height: 20px; background-color: #' + palette[i] + ';');</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l78" name="l78">78</a></td><td><pre><span class="insertion">+</span> <span class="insertion">currentPalette.setAttribute('onclick', 'setColour(' + i + ');');</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l79" name="l79">79</a></td><td><pre><span class="insertion">+</span> <span class="insertion">paletteLine.appendChild(currentPalette);</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l80" name="l80">80</a></td><td><pre><span class="insertion">+</span> <span class="insertion">}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l81" name="l81">81</a></td><td><pre><span class="insertion">+</span> <span class="insertion">paletteGrid.appendChild(paletteLine);</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l82" name="l82">82</a></td><td><pre><span class="insertion">+</span> <span class="insertion">document.getElementById('picker').style.width = '360px';</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l83" name="l83">83</a></td><td><pre><span class="insertion">+</span> <span class="insertion">document.getElementById('picker').appendChild(paletteGrid);</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l84" name="l84">84</a></td><td><pre><span class="insertion">+</span> <span class="insertion">}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l85" name="l85">85</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l86" name="l86">86</a></td><td><pre><span class="insertion">+</span> <span class="insertion">function setColour(i) {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l87" name="l87">87</a></td><td><pre><span class="insertion">+</span> <span class="insertion">brushColour = i;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l88" name="l88">88</a></td><td><pre><span class="insertion">+</span> <span class="insertion">}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l89" name="l89">89</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l90" name="l90">90</a></td><td><pre><span class="insertion">+</span> <span class="insertion">function fillCell(index) {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l91" name="l91">91</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if (tool == 0) {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l92" name="l92">92</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if (isDragging == 1 &amp;&amp; mode == 0) {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l93" name="l93">93</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if (curKey != 17 &amp;&amp; curKey != 18) setBackgroundColour(index);</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l94" name="l94">94</a></td><td><pre><span class="insertion">+</span> <span class="insertion">else remBackgroundColour(index);</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l95" name="l95">95</a></td><td><pre><span class="insertion">+</span> <span class="insertion">} else if (isDragging == 1 &amp;&amp; mode == 1) {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l96" name="l96">96</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if (curKey == 17 || curKey == 18) {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l97" name="l97">97</a></td><td><pre><span class="insertion">+</span> <span class="insertion">setLetter(index, '');</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l98" name="l98">98</a></td><td><pre><span class="insertion">+</span> <span class="insertion">remColour(index);</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l99" name="l99">99</a></td><td><pre><span class="insertion">+</span> <span class="insertion">}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l100" name="l100">100</a></td><td><pre><span class="insertion">+</span> <span class="insertion">document.getElementById('textBuffer').focus();</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l101" name="l101">101</a></td><td><pre><span class="insertion">+</span> <span class="insertion">remCursor(selected);</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l102" name="l102">102</a></td><td><pre><span class="insertion">+</span> <span class="insertion">selected = index;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l103" name="l103">103</a></td><td><pre><span class="insertion">+</span> <span class="insertion">setCursor(selected);</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l104" name="l104">104</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if (document.getElementsByTagName('td')[selected].innerHTML != ' ' &amp;&amp; document.getElementsByTagName('td')[selected].innerHTML != '') document.getElementsByTagName('td')[selected].style.color = palette[brushColour];</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l105" name="l105">105</a></td><td><pre><span class="insertion">+</span> <span class="insertion">}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l106" name="l106">106</a></td><td><pre><span class="insertion">+</span> <span class="insertion">} else {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l107" name="l107">107</a></td><td><pre><span class="insertion">+</span> <span class="insertion">fillArea(index);</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l108" name="l108">108</a></td><td><pre><span class="insertion">+</span> <span class="insertion">}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l109" name="l109">109</a></td><td><pre><span class="insertion">+</span> <span class="insertion">}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l110" name="l110">110</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l111" name="l111">111</a></td><td><pre><span class="insertion">+</span> <span class="insertion">function fillArea(index) {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l112" name="l112">112</a></td><td><pre><span class="insertion">+</span> <span class="insertion">var newSeeds = new Array();</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l113" name="l113">113</a></td><td><pre><span class="insertion">+</span> <span class="insertion">var x = index % canvasWidth;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l114" name="l114">114</a></td><td><pre><span class="insertion">+</span> <span class="insertion">var y = (index - x) / canvasWidth;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l115" name="l115">115</a></td><td><pre><span class="insertion">+</span> <span class="insertion">var c = getCellColour(x, y);</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l116" name="l116">116</a></td><td><pre><span class="insertion">+</span> <span class="insertion">var x1 = getLineColourLimits(x, y, 'left');</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l117" name="l117">117</a></td><td><pre><span class="insertion">+</span> <span class="insertion">var x2 = getLineColourLimits(x, y, 'right');</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l118" name="l118">118</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if (isDragging == 1) {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l119" name="l119">119</a></td><td><pre><span class="insertion">+</span> <span class="insertion">for (var m = 0; m &lt; 2; m++) {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l120" name="l120">120</a></td><td><pre><span class="insertion">+</span> <span class="insertion">y = (index - x) / canvasWidth + m;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l121" name="l121">121</a></td><td><pre><span class="insertion">+</span> <span class="insertion">while (y &gt;= 0 &amp;&amp; y &lt;= canvasHeight) {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l122" name="l122">122</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if (getCellColour(x, y) != c) break;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l123" name="l123">123</a></td><td><pre><span class="insertion">+</span> <span class="insertion">var x1 = getLineColourLimits(x, y, 'left');</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l124" name="l124">124</a></td><td><pre><span class="insertion">+</span> <span class="insertion">var x2 = getLineColourLimits(x, y, 'right');</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l125" name="l125">125</a></td><td><pre><span class="insertion">+</span> <span class="insertion">for (var i = x1; i &lt;= x2; i++)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l126" name="l126">126</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if (curKey != 17 &amp;&amp; curKey != 18) setBackgroundColour((canvasWidth * y) + i);</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l127" name="l127">127</a></td><td><pre><span class="insertion">+</span> <span class="insertion">else remBackgroundColour((canvasWidth * y) + i);</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l128" name="l128">128</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if (m == 0) y--;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l129" name="l129">129</a></td><td><pre><span class="insertion">+</span> <span class="insertion">else y++;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l130" name="l130">130</a></td><td><pre><span class="insertion">+</span> <span class="insertion">}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l131" name="l131">131</a></td><td><pre><span class="insertion">+</span> <span class="insertion">}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l132" name="l132">132</a></td><td><pre><span class="insertion">+</span> <span class="insertion">}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l133" name="l133">133</a></td><td><pre><span class="insertion">+</span> <span class="insertion">}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l134" name="l134">134</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l135" name="l135">135</a></td><td><pre><span class="insertion">+</span> <span class="insertion">function getLineColourLimits(x, y, end) {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l136" name="l136">136</a></td><td><pre><span class="insertion">+</span> <span class="insertion">var boundary = x;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l137" name="l137">137</a></td><td><pre><span class="insertion">+</span> <span class="insertion">var currentColour;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l138" name="l138">138</a></td><td><pre><span class="insertion">+</span> <span class="insertion">var targetColour = getCellColour(x, y);</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l139" name="l139">139</a></td><td><pre><span class="insertion">+</span> <span class="insertion">var i = x;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l140" name="l140">140</a></td><td><pre><span class="insertion">+</span> <span class="insertion">while (i &gt;= 0 &amp;&amp; i &lt; canvasWidth) {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l141" name="l141">141</a></td><td><pre><span class="insertion">+</span> <span class="insertion">currentColour = getCellColour(i, y);</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l142" name="l142">142</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if (currentColour == targetColour) boundary = i;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l143" name="l143">143</a></td><td><pre><span class="insertion">+</span> <span class="insertion">else break;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l144" name="l144">144</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if (end == 'left') i--;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l145" name="l145">145</a></td><td><pre><span class="insertion">+</span> <span class="insertion">else i++;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l146" name="l146">146</a></td><td><pre><span class="insertion">+</span> <span class="insertion">}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l147" name="l147">147</a></td><td><pre><span class="insertion">+</span> <span class="insertion">return boundary;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l148" name="l148">148</a></td><td><pre><span class="insertion">+</span> <span class="insertion">}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l149" name="l149">149</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l150" name="l150">150</a></td><td><pre><span class="insertion">+</span> <span class="insertion">function toggleMode(newMode) {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l151" name="l151">151</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if (newMode != undefined) mode = newMode;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l152" name="l152">152</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if (mode == 1) {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l153" name="l153">153</a></td><td><pre><span class="insertion">+</span> <span class="insertion">remCursor(selected);</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l154" name="l154">154</a></td><td><pre><span class="insertion">+</span> <span class="insertion">document.getElementById('typeButton').innerHTML = 'Type';</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l155" name="l155">155</a></td><td><pre><span class="insertion">+</span> <span class="insertion">} else {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l156" name="l156">156</a></td><td><pre><span class="insertion">+</span> <span class="insertion">toggleTool(1);</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l157" name="l157">157</a></td><td><pre><span class="insertion">+</span> <span class="insertion">setCursor(selected);</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l158" name="l158">158</a></td><td><pre><span class="insertion">+</span> <span class="insertion">document.getElementById('textBuffer').focus();</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l159" name="l159">159</a></td><td><pre><span class="insertion">+</span> <span class="insertion">document.getElementById('typeButton').innerHTML = 'Draw';</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l160" name="l160">160</a></td><td><pre><span class="insertion">+</span> <span class="insertion">}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l161" name="l161">161</a></td><td><pre><span class="insertion">+</span> <span class="insertion">mode = (mode - 1) * -1</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l162" name="l162">162</a></td><td><pre><span class="insertion">+</span> <span class="insertion">}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l163" name="l163">163</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l164" name="l164">164</a></td><td><pre><span class="insertion">+</span> <span class="insertion">function toggleTool(newTool) {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l165" name="l165">165</a></td><td><pre><span class="insertion">+</span> <span class="insertion">toggleMode(1);</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l166" name="l166">166</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if (newTool != undefined) tool = newTool;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l167" name="l167">167</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if (tool == 1) document.getElementById('toolButton').innerHTML = 'Fill';</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l168" name="l168">168</a></td><td><pre><span class="insertion">+</span> <span class="insertion">else document.getElementById('toolButton').innerHTML = 'Brush';</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l169" name="l169">169</a></td><td><pre><span class="insertion">+</span> <span class="insertion">tool = (tool - 1) * -1</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l170" name="l170">170</a></td><td><pre><span class="insertion">+</span> <span class="insertion">}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l171" name="l171">171</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l172" name="l172">172</a></td><td><pre><span class="insertion">+</span> <span class="insertion">function toggleDragging(bool) {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l173" name="l173">173</a></td><td><pre><span class="insertion">+</span> <span class="insertion">isDragging = bool;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l174" name="l174">174</a></td><td><pre><span class="insertion">+</span> <span class="insertion">}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l175" name="l175">175</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l176" name="l176">176</a></td><td><pre><span class="insertion">+</span> <span class="insertion">function padColour(colourCode, letter) {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l177" name="l177">177</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if (colourCode &lt; 10 &amp;&amp; isNaN(parseFloat(letter)) == false) {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l178" name="l178">178</a></td><td><pre><span class="insertion">+</span> <span class="insertion">return '0' + colourCode;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l179" name="l179">179</a></td><td><pre><span class="insertion">+</span> <span class="insertion">}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l180" name="l180">180</a></td><td><pre><span class="insertion">+</span> <span class="insertion">return colourCode;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l181" name="l181">181</a></td><td><pre><span class="insertion">+</span> <span class="insertion">}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l182" name="l182">182</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l183" name="l183">183</a></td><td><pre><span class="insertion">+</span> <span class="insertion">function renderArt() {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l184" name="l184">184</a></td><td><pre><span class="insertion">+</span> <span class="insertion">var line, output = ''</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l185" name="l185">185</a></td><td><pre><span class="insertion">+</span> <span class="insertion">var lastColour, lastFontColour, currentColour, currentFontColour, breakout;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l186" name="l186">186</a></td><td><pre><span class="insertion">+</span> <span class="insertion">for (var y = 0; y &lt; canvasHeight; y++) {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l187" name="l187">187</a></td><td><pre><span class="insertion">+</span> <span class="insertion">line = '';</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l188" name="l188">188</a></td><td><pre><span class="insertion">+</span> <span class="insertion">for (var x = 0; x &lt; canvasWidth; x++) {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l189" name="l189">189</a></td><td><pre><span class="insertion">+</span> <span class="insertion">lastColour = getCellColour(x, y);</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l190" name="l190">190</a></td><td><pre><span class="insertion">+</span> <span class="insertion">lastFontColour = getFontColour(x, y);</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l191" name="l191">191</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if (lastFontColour &gt;= 0 &amp;&amp; lastColour &gt;= 0) {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l192" name="l192">192</a></td><td><pre><span class="insertion">+</span> <span class="insertion">line += code + lastFontColour + ',' + padColour(lastColour, getCellLetter(x, y));</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l193" name="l193">193</a></td><td><pre><span class="insertion">+</span> <span class="insertion">} else if (lastFontColour &gt;= 0 &amp;&amp; lastColour &lt; 0) {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l194" name="l194">194</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if (x != 0) line += halt;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l195" name="l195">195</a></td><td><pre><span class="insertion">+</span> <span class="insertion">line += code + padColour(lastFontColour, getCellLetter(x, y));</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l196" name="l196">196</a></td><td><pre><span class="insertion">+</span> <span class="insertion">} else if (lastFontColour &lt; 0 &amp;&amp; lastColour &gt;= 0) {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l197" name="l197">197</a></td><td><pre><span class="insertion">+</span> <span class="insertion">line += code + lastColour + ',' + padColour(lastColour, getCellLetter(x, y));</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l198" name="l198">198</a></td><td><pre><span class="insertion">+</span> <span class="insertion">} else {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l199" name="l199">199</a></td><td><pre><span class="insertion">+</span> <span class="insertion">line += getCellLetter(x, y);</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l200" name="l200">200</a></td><td><pre><span class="insertion">+</span> <span class="insertion">}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l201" name="l201">201</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if (lastFontColour &gt;= 0 || lastColour &gt;= 0) {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l202" name="l202">202</a></td><td><pre><span class="insertion">+</span> <span class="insertion">breakout = 0;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l203" name="l203">203</a></td><td><pre><span class="insertion">+</span> <span class="insertion">for (var z = x; z &lt; canvasWidth; z++) {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l204" name="l204">204</a></td><td><pre><span class="insertion">+</span> <span class="insertion">currentColour = getCellColour(z, y);</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l205" name="l205">205</a></td><td><pre><span class="insertion">+</span> <span class="insertion">currentFontColour = getFontColour(z, y);</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l206" name="l206">206</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if (currentFontColour == lastFontColour &amp;&amp; currentColour == lastColour) {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l207" name="l207">207</a></td><td><pre><span class="insertion">+</span> <span class="insertion">line += getCellLetter(z, y);</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l208" name="l208">208</a></td><td><pre><span class="insertion">+</span> <span class="insertion">} else {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l209" name="l209">209</a></td><td><pre><span class="insertion">+</span> <span class="insertion">x = z - 1;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l210" name="l210">210</a></td><td><pre><span class="insertion">+</span> <span class="insertion">breakout = 1;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l211" name="l211">211</a></td><td><pre><span class="insertion">+</span> <span class="insertion">break;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l212" name="l212">212</a></td><td><pre><span class="insertion">+</span> <span class="insertion">}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l213" name="l213">213</a></td><td><pre><span class="insertion">+</span> <span class="insertion">}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l214" name="l214">214</a></td><td><pre><span class="insertion">+</span> <span class="insertion">line += code;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l215" name="l215">215</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if (breakout == 0) x = canvasWidth;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l216" name="l216">216</a></td><td><pre><span class="insertion">+</span> <span class="insertion">}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l217" name="l217">217</a></td><td><pre><span class="insertion">+</span> <span class="insertion">}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l218" name="l218">218</a></td><td><pre><span class="insertion">+</span> <span class="insertion">output += endtrim(line, ' ') + &quot; \n&quot;;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l219" name="l219">219</a></td><td><pre><span class="insertion">+</span> <span class="insertion">}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l220" name="l220">220</a></td><td><pre><span class="insertion">+</span> <span class="insertion">var remove = new RegExp(code + code, 'gi');</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l221" name="l221">221</a></td><td><pre><span class="insertion">+</span> <span class="insertion">output = output.replace(remove, code);</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l222" name="l222">222</a></td><td><pre><span class="insertion">+</span> <span class="insertion">output = output.replace(/&amp;lt;/g, '&lt;');</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l223" name="l223">223</a></td><td><pre><span class="insertion">+</span> <span class="insertion">output = output.replace(/&amp;gt;/g, '&gt;');</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l224" name="l224">224</a></td><td><pre><span class="insertion">+</span> <span class="insertion">document.getElementById('load').value = endtrim(output);</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l225" name="l225">225</a></td><td><pre><span class="insertion">+</span> <span class="insertion">}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l226" name="l226">226</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l227" name="l227">227</a></td><td><pre><span class="insertion">+</span> <span class="insertion">function previewArt() {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l228" name="l228">228</a></td><td><pre><span class="insertion">+</span> <span class="insertion">renderArt();</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l229" name="l229">229</a></td><td><pre><span class="insertion">+</span> <span class="insertion">document.getElementById('preview').innerHTML = '';</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l230" name="l230">230</a></td><td><pre><span class="insertion">+</span> <span class="insertion">var tempForm = document.createElement('form');</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l231" name="l231">231</a></td><td><pre><span class="insertion">+</span> <span class="insertion">tempForm.setAttribute('method', 'POST');</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l232" name="l232">232</a></td><td><pre><span class="insertion">+</span> <span class="insertion">tempForm.setAttribute('action', '/preview/preview.php');</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l233" name="l233">233</a></td><td><pre><span class="insertion">+</span> <span class="insertion">tempForm.setAttribute('target', '_blank');</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l234" name="l234">234</a></td><td><pre><span class="insertion">+</span> <span class="insertion">var tempField = document.createElement('input');</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l235" name="l235">235</a></td><td><pre><span class="insertion">+</span> <span class="insertion">tempField.setAttribute('name', 'ascii');</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l236" name="l236">236</a></td><td><pre><span class="insertion">+</span> <span class="insertion">tempField.setAttribute('type', 'hidden');</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l237" name="l237">237</a></td><td><pre><span class="insertion">+</span> <span class="insertion">tempField.value = escape(document.getElementById('load').value);</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l238" name="l238">238</a></td><td><pre><span class="insertion">+</span> <span class="insertion">var rawField = document.createElement('input');</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l239" name="l239">239</a></td><td><pre><span class="insertion">+</span> <span class="insertion">rawField.setAttribute('name', 'raw');</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l240" name="l240">240</a></td><td><pre><span class="insertion">+</span> <span class="insertion">rawField.setAttribute('type', 'hidden');</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l241" name="l241">241</a></td><td><pre><span class="insertion">+</span> <span class="insertion">rawField.value = 1;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l242" name="l242">242</a></td><td><pre><span class="insertion">+</span> <span class="insertion">tempForm.appendChild(tempField);</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l243" name="l243">243</a></td><td><pre><span class="insertion">+</span> <span class="insertion">tempForm.appendChild(rawField);</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l244" name="l244">244</a></td><td><pre><span class="insertion">+</span> <span class="insertion">document.getElementById('preview').appendChild(tempForm);</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l245" name="l245">245</a></td><td><pre><span class="insertion">+</span> <span class="insertion">document.forms[0].submit();</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l246" name="l246">246</a></td><td><pre><span class="insertion">+</span> <span class="insertion">}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l247" name="l247">247</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l248" name="l248">248</a></td><td><pre><span class="insertion">+</span> <span class="insertion">function resizeArt() {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l249" name="l249">249</a></td><td><pre><span class="insertion">+</span> <span class="insertion">var x = parseFloat(prompt('wqat width? (in characters)', canvasWidth));</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l250" name="l250">250</a></td><td><pre><span class="insertion">+</span> <span class="insertion">var y = parseFloat(prompt('wqat height? (in characters)', canvasHeight));</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l251" name="l251">251</a></td><td><pre><span class="insertion">+</span> <span class="insertion">renderArt();</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l252" name="l252">252</a></td><td><pre><span class="insertion">+</span> <span class="insertion">generateCanvas(x, y);</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l253" name="l253">253</a></td><td><pre><span class="insertion">+</span> <span class="insertion">drawImage();</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l254" name="l254">254</a></td><td><pre><span class="insertion">+</span> <span class="insertion">}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l255" name="l255">255</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l256" name="l256">256</a></td><td><pre><span class="insertion">+</span> <span class="insertion">function loadArt() {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l257" name="l257">257</a></td><td><pre><span class="insertion">+</span> <span class="insertion">var dimensions = getAsciiWidth();</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l258" name="l258">258</a></td><td><pre><span class="insertion">+</span> <span class="insertion">generateCanvas(dimensions[0], dimensions[1]);</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l259" name="l259">259</a></td><td><pre><span class="insertion">+</span> <span class="insertion">drawImage();</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l260" name="l260">260</a></td><td><pre><span class="insertion">+</span> <span class="insertion">}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l261" name="l261">261</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l262" name="l262">262</a></td><td><pre><span class="insertion">+</span> <span class="insertion">function drawImage() {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l263" name="l263">263</a></td><td><pre><span class="insertion">+</span> <span class="insertion">var g_width = 0;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l264" name="l264">264</a></td><td><pre><span class="insertion">+</span> <span class="insertion">var lines = endtrim(document.getElementById('load').value, &quot;\n&quot;);</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l265" name="l265">265</a></td><td><pre><span class="insertion">+</span> <span class="insertion">lines = lines.split(&quot;\n&quot;);</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l266" name="l266">266</a></td><td><pre><span class="insertion">+</span> <span class="insertion">for (var y in lines) {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l267" name="l267">267</a></td><td><pre><span class="insertion">+</span> <span class="insertion">var index = y * canvasWidth;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l268" name="l268">268</a></td><td><pre><span class="insertion">+</span> <span class="insertion">var last_foreground = 16;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l269" name="l269">269</a></td><td><pre><span class="insertion">+</span> <span class="insertion">var last_background = 16;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l270" name="l270">270</a></td><td><pre><span class="insertion">+</span> <span class="insertion">var blocks = lines[y].split(code);</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l271" name="l271">271</a></td><td><pre><span class="insertion">+</span> <span class="insertion">for (var b in blocks) {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l272" name="l272">272</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if (blocks[b].length &gt; 0) {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l273" name="l273">273</a></td><td><pre><span class="insertion">+</span> <span class="insertion">var colours = getColoursFromLine(blocks[b], blocks.length, last_foreground, last_background);</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l274" name="l274">274</a></td><td><pre><span class="insertion">+</span> <span class="insertion">last_background = colours[1];</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l275" name="l275">275</a></td><td><pre><span class="insertion">+</span> <span class="insertion">for (var i = 0; i &lt; colours[3].length; i++) {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l276" name="l276">276</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if (colours[3].charCodeAt(i) == 15) {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l277" name="l277">277</a></td><td><pre><span class="insertion">+</span> <span class="insertion">last_background = 16;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l278" name="l278">278</a></td><td><pre><span class="insertion">+</span> <span class="insertion">} else if (colours[3].charCodeAt(i) &gt; 31 &amp;&amp; colours[3].charCodeAt(i) &lt; 127) {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l279" name="l279">279</a></td><td><pre><span class="insertion">+</span> <span class="insertion">document.getElementsByTagName('td')[index].style.color = palette[parseFloat(colours[0])];</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l280" name="l280">280</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if (colours[1] &lt; 16) document.getElementsByTagName('td')[index].style.backgroundColor = palette[parseFloat(colours[1])];</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l281" name="l281">281</a></td><td><pre><span class="insertion">+</span> <span class="insertion">document.getElementsByTagName('td')[index].innerHTML = colours[3].charAt(i);</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l282" name="l282">282</a></td><td><pre><span class="insertion">+</span> <span class="insertion">index++;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l283" name="l283">283</a></td><td><pre><span class="insertion">+</span> <span class="insertion">}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l284" name="l284">284</a></td><td><pre><span class="insertion">+</span> <span class="insertion">}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l285" name="l285">285</a></td><td><pre><span class="insertion">+</span> <span class="insertion">}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l286" name="l286">286</a></td><td><pre><span class="insertion">+</span> <span class="insertion">}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l287" name="l287">287</a></td><td><pre><span class="insertion">+</span> <span class="insertion">}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l288" name="l288">288</a></td><td><pre><span class="insertion">+</span> <span class="insertion">}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l289" name="l289">289</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l290" name="l290">290</a></td><td><pre><span class="insertion">+</span> <span class="insertion">function endtrim(str, chars) {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l291" name="l291">291</a></td><td><pre><span class="insertion">+</span> <span class="insertion">chars = chars || &quot;\\s&quot;;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l292" name="l292">292</a></td><td><pre><span class="insertion">+</span> <span class="insertion">return str.replace(new RegExp(&quot;[&quot; + chars + &quot;]+$&quot;, &quot;g&quot;), &quot;&quot;);</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l293" name="l293">293</a></td><td><pre><span class="insertion">+</span> <span class="insertion">}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l294" name="l294">294</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l295" name="l295">295</a></td><td><pre><span class="insertion">+</span> <span class="insertion">function getColoursFromLine(line, block_count, last_foreground, last_background) {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l296" name="l296">296</a></td><td><pre><span class="insertion">+</span> <span class="insertion">var colours = new Array();</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l297" name="l297">297</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if (block_count &gt; 1) {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l298" name="l298">298</a></td><td><pre><span class="insertion">+</span> <span class="insertion">var chunks = line.split(',', 2);</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l299" name="l299">299</a></td><td><pre><span class="insertion">+</span> <span class="insertion">for (var c in chunks) {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l300" name="l300">300</a></td><td><pre><span class="insertion">+</span> <span class="insertion">var current = '';</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l301" name="l301">301</a></td><td><pre><span class="insertion">+</span> <span class="insertion">for (var i = 0; i &lt; 2; i++) {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l302" name="l302">302</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if (isNaN(parseFloat(chunks[c].charAt(i))) == false) current += chunks[c].charAt(i);</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l303" name="l303">303</a></td><td><pre><span class="insertion">+</span> <span class="insertion">}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l304" name="l304">304</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if (isNaN(parseFloat(current)) == false) colours[colours.length] = current;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l305" name="l305">305</a></td><td><pre><span class="insertion">+</span> <span class="insertion">}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l306" name="l306">306</a></td><td><pre><span class="insertion">+</span> <span class="insertion">}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l307" name="l307">307</a></td><td><pre><span class="insertion">+</span> <span class="insertion">colours[3] = line.substr(colours.join(',').length);</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l308" name="l308">308</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if (typeof(colours[0]) != 'undefined' &amp;&amp; typeof(colours[1]) == 'undefined') colours[1] = last_background;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l309" name="l309">309</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if (typeof(colours[0]) == 'undefined') colours[0] = last_foreground;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l310" name="l310">310</a></td><td><pre><span class="insertion">+</span> <span class="insertion">return colours;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l311" name="l311">311</a></td><td><pre><span class="insertion">+</span> <span class="insertion">}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l312" name="l312">312</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l313" name="l313">313</a></td><td><pre><span class="insertion">+</span> <span class="insertion">function getAsciiWidth() {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l314" name="l314">314</a></td><td><pre><span class="insertion">+</span> <span class="insertion">var g_width = 0;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l315" name="l315">315</a></td><td><pre><span class="insertion">+</span> <span class="insertion">var lines = endtrim(document.getElementById('load').value, &quot;\n&quot;);</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l316" name="l316">316</a></td><td><pre><span class="insertion">+</span> <span class="insertion">lines = lines.split(&quot;\n&quot;);</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l317" name="l317">317</a></td><td><pre><span class="insertion">+</span> <span class="insertion">for (var y in lines) {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l318" name="l318">318</a></td><td><pre><span class="insertion">+</span> <span class="insertion">var l_width = 0;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l319" name="l319">319</a></td><td><pre><span class="insertion">+</span> <span class="insertion">var blocks = lines[y].split(code);</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l320" name="l320">320</a></td><td><pre><span class="insertion">+</span> <span class="insertion">for (var b in blocks) {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l321" name="l321">321</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if (blocks[b].length &gt; 0) {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l322" name="l322">322</a></td><td><pre><span class="insertion">+</span> <span class="insertion">var colours = getColoursFromLine(blocks[b], blocks.length);</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l323" name="l323">323</a></td><td><pre><span class="insertion">+</span> <span class="insertion">for (var i = 0; i &lt; colours[3].length; i++) {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l324" name="l324">324</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if (colours[3].charCodeAt(i) &gt; 31 &amp;&amp; colours[3].charCodeAt(i) &lt; 127) l_width++;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l325" name="l325">325</a></td><td><pre><span class="insertion">+</span> <span class="insertion">}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l326" name="l326">326</a></td><td><pre><span class="insertion">+</span> <span class="insertion">}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l327" name="l327">327</a></td><td><pre><span class="insertion">+</span> <span class="insertion">}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l328" name="l328">328</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if (l_width &gt; g_width) g_width = l_width;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l329" name="l329">329</a></td><td><pre><span class="insertion">+</span> <span class="insertion">}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l330" name="l330">330</a></td><td><pre><span class="insertion">+</span> <span class="insertion">return new Array(g_width, lines.length);</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l331" name="l331">331</a></td><td><pre><span class="insertion">+</span> <span class="insertion">}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l332" name="l332">332</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l333" name="l333">333</a></td><td><pre><span class="insertion">+</span> <span class="insertion">function getCellColour(x, y) {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l334" name="l334">334</a></td><td><pre><span class="insertion">+</span> <span class="insertion">var colour = document.getElementsByTagName('td')[(canvasWidth * y + x)].style.backgroundColor;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l335" name="l335">335</a></td><td><pre><span class="insertion">+</span> <span class="insertion">return ircFromHex(rgbConvert(colour));</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l336" name="l336">336</a></td><td><pre><span class="insertion">+</span> <span class="insertion">}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l337" name="l337">337</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l338" name="l338">338</a></td><td><pre><span class="insertion">+</span> <span class="insertion">function getFontColour(x, y) {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l339" name="l339">339</a></td><td><pre><span class="insertion">+</span> <span class="insertion">var colour = document.getElementsByTagName('td')[(canvasWidth * y + x)].style.color;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l340" name="l340">340</a></td><td><pre><span class="insertion">+</span> <span class="insertion">return ircFromHex(rgbConvert(colour));</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l341" name="l341">341</a></td><td><pre><span class="insertion">+</span> <span class="insertion">}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l342" name="l342">342</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l343" name="l343">343</a></td><td><pre><span class="insertion">+</span> <span class="insertion">function getCellLetter(x, y) {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l344" name="l344">344</a></td><td><pre><span class="insertion">+</span> <span class="insertion">var letter = document.getElementsByTagName('td')[(canvasWidth * y + x)].innerHTML;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l345" name="l345">345</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if (letter == '') letter = ' ';</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l346" name="l346">346</a></td><td><pre><span class="insertion">+</span> <span class="insertion">return letter;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l347" name="l347">347</a></td><td><pre><span class="insertion">+</span> <span class="insertion">}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l348" name="l348">348</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l349" name="l349">349</a></td><td><pre><span class="insertion">+</span> <span class="insertion">function rgbConvert(str) {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l350" name="l350">350</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if (navigator.userAgent.match('Opera') == null) {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l351" name="l351">351</a></td><td><pre><span class="insertion">+</span> <span class="insertion">str = str.replace(/rgb\(|\)/g, &quot;&quot;).split(&quot;,&quot;);</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l352" name="l352">352</a></td><td><pre><span class="insertion">+</span> <span class="insertion">str[0] = parseInt(str[0], 10).toString(16).toUpperCase();</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l353" name="l353">353</a></td><td><pre><span class="insertion">+</span> <span class="insertion">str[1] = parseInt(str[1], 10).toString(16).toUpperCase();</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l354" name="l354">354</a></td><td><pre><span class="insertion">+</span> <span class="insertion">str[2] = parseInt(str[2], 10).toString(16).toUpperCase();</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l355" name="l355">355</a></td><td><pre><span class="insertion">+</span> <span class="insertion">str[0] = (str[0].length == 1) ? '0' + str[0] : str[0];</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l356" name="l356">356</a></td><td><pre><span class="insertion">+</span> <span class="insertion">str[1] = (str[1].length == 1) ? '0' + str[1] : str[1];</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l357" name="l357">357</a></td><td><pre><span class="insertion">+</span> <span class="insertion">str[2] = (str[2].length == 1) ? '0' + str[2] : str[2];</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l358" name="l358">358</a></td><td><pre><span class="insertion">+</span> <span class="insertion">return str.join(&quot;&quot;);</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l359" name="l359">359</a></td><td><pre><span class="insertion">+</span> <span class="insertion">} else {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l360" name="l360">360</a></td><td><pre><span class="insertion">+</span> <span class="insertion">return str.replace(/#/g, '').toUpperCase();</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l361" name="l361">361</a></td><td><pre><span class="insertion">+</span> <span class="insertion">}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l362" name="l362">362</a></td><td><pre><span class="insertion">+</span> <span class="insertion">}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l363" name="l363">363</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l364" name="l364">364</a></td><td><pre><span class="insertion">+</span> <span class="insertion">function ircFromHex(hex) {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l365" name="l365">365</a></td><td><pre><span class="insertion">+</span> <span class="insertion">for (var i = 0; i &lt; 16; i++) {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l366" name="l366">366</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if (palette[i] == hex) return i;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l367" name="l367">367</a></td><td><pre><span class="insertion">+</span> <span class="insertion">}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l368" name="l368">368</a></td><td><pre><span class="insertion">+</span> <span class="insertion">return -1;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l369" name="l369">369</a></td><td><pre><span class="insertion">+</span> <span class="insertion">}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l370" name="l370">370</a></td><td><pre><span class="insertion">+</span> <span class="insertion">document.onmousemove = function moveBuffer(e) {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l371" name="l371">371</a></td><td><pre><span class="insertion">+</span> <span class="insertion">var y = e.clientY + document.body.scrollTop + 5;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l372" name="l372">372</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if (y &lt; (window.innerHeight + window.scrollMaxY - 30)) {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l373" name="l373">373</a></td><td><pre><span class="insertion">+</span> <span class="insertion">document.getElementById('textBuffer').style.left = '0px';</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l374" name="l374">374</a></td><td><pre><span class="insertion">+</span> <span class="insertion">document.getElementById('textBuffer').style.top = y + 'px';</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l375" name="l375">375</a></td><td><pre><span class="insertion">+</span> <span class="insertion">}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l376" name="l376">376</a></td><td><pre><span class="insertion">+</span> <span class="insertion">}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l377" name="l377">377</a></td><td><pre><span class="insertion">+</span> <span class="insertion">document.onkeydown = function setKey(e) {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l378" name="l378">378</a></td><td><pre><span class="insertion">+</span> <span class="insertion">var code;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l379" name="l379">379</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if (window.event) code = window.event.keyCode;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l380" name="l380">380</a></td><td><pre><span class="insertion">+</span> <span class="insertion">else if (e) code = e.which;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l381" name="l381">381</a></td><td><pre><span class="insertion">+</span> <span class="insertion">curKey = code;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l382" name="l382">382</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if (mode == 0) {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l383" name="l383">383</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if (code == 38) // up</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l384" name="l384">384</a></td><td><pre><span class="insertion">+</span> <span class="insertion">shiftArt('up');</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l385" name="l385">385</a></td><td><pre><span class="insertion">+</span> <span class="insertion">else if (code == 40) // down</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l386" name="l386">386</a></td><td><pre><span class="insertion">+</span> <span class="insertion">shiftArt('down');</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l387" name="l387">387</a></td><td><pre><span class="insertion">+</span> <span class="insertion">else if (code == 37) // left</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l388" name="l388">388</a></td><td><pre><span class="insertion">+</span> <span class="insertion">shiftArt('left');</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l389" name="l389">389</a></td><td><pre><span class="insertion">+</span> <span class="insertion">else if (code == 39) // right</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l390" name="l390">390</a></td><td><pre><span class="insertion">+</span> <span class="insertion">shiftArt('right');</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l391" name="l391">391</a></td><td><pre><span class="insertion">+</span> <span class="insertion">}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l392" name="l392">392</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if (curKey == 27) loadLastUndo();</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l393" name="l393">393</a></td><td><pre><span class="insertion">+</span> <span class="insertion">}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l394" name="l394">394</a></td><td><pre><span class="insertion">+</span> <span class="insertion">document.onkeyup = function handleKey(e) {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l395" name="l395">395</a></td><td><pre><span class="insertion">+</span> <span class="insertion">var code;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l396" name="l396">396</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if (window.event) code = window.event.keyCode;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l397" name="l397">397</a></td><td><pre><span class="insertion">+</span> <span class="insertion">else if (e) code = e.which;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l398" name="l398">398</a></td><td><pre><span class="insertion">+</span> <span class="insertion">curKey = 0;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l399" name="l399">399</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if (mode == 1) {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l400" name="l400">400</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if (code == 8) {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l401" name="l401">401</a></td><td><pre><span class="insertion">+</span> <span class="insertion">remCursor(selected);</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l402" name="l402">402</a></td><td><pre><span class="insertion">+</span> <span class="insertion">selected--;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l403" name="l403">403</a></td><td><pre><span class="insertion">+</span> <span class="insertion">setCursor(selected);</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l404" name="l404">404</a></td><td><pre><span class="insertion">+</span> <span class="insertion">setLetter(selected, '');</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l405" name="l405">405</a></td><td><pre><span class="insertion">+</span> <span class="insertion">remColour(selected);</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l406" name="l406">406</a></td><td><pre><span class="insertion">+</span> <span class="insertion">} else if (code == 38 &amp;&amp; (selected - canvasWidth) &gt;= 0) // up</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l407" name="l407">407</a></td><td><pre><span class="insertion">+</span> <span class="insertion">moveCursor(selected - canvasWidth);</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l408" name="l408">408</a></td><td><pre><span class="insertion">+</span> <span class="insertion">else if (code == 40 &amp;&amp; (selected + canvasWidth) &lt; canvasWidth * canvasHeight) // down</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l409" name="l409">409</a></td><td><pre><span class="insertion">+</span> <span class="insertion">moveCursor(selected + canvasWidth);</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l410" name="l410">410</a></td><td><pre><span class="insertion">+</span> <span class="insertion">else if (code == 37 &amp;&amp; (selected - 1) &gt;= 0) // left</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l411" name="l411">411</a></td><td><pre><span class="insertion">+</span> <span class="insertion">moveCursor(selected - 1);</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l412" name="l412">412</a></td><td><pre><span class="insertion">+</span> <span class="insertion">else if (code == 39 &amp;&amp; (selected + 1) &lt; canvasWidth * canvasHeight) // right</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l413" name="l413">413</a></td><td><pre><span class="insertion">+</span> <span class="insertion">moveCursor(selected + 1);</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l414" name="l414">414</a></td><td><pre><span class="insertion">+</span> <span class="insertion">else {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l415" name="l415">415</a></td><td><pre><span class="insertion">+</span> <span class="insertion">var data = document.getElementById('textBuffer').value;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l416" name="l416">416</a></td><td><pre><span class="insertion">+</span> <span class="insertion">for (var i = 0; i &lt; data.length; i++) {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l417" name="l417">417</a></td><td><pre><span class="insertion">+</span> <span class="insertion">remCursor(selected);</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l418" name="l418">418</a></td><td><pre><span class="insertion">+</span> <span class="insertion">setCursor(selected + 1);</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l419" name="l419">419</a></td><td><pre><span class="insertion">+</span> <span class="insertion">setLetter(selected, data.charAt(i));</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l420" name="l420">420</a></td><td><pre><span class="insertion">+</span> <span class="insertion">selected++;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l421" name="l421">421</a></td><td><pre><span class="insertion">+</span> <span class="insertion">}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l422" name="l422">422</a></td><td><pre><span class="insertion">+</span> <span class="insertion">document.getElementById('textBuffer').value = '';</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l423" name="l423">423</a></td><td><pre><span class="insertion">+</span> <span class="insertion">}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l424" name="l424">424</a></td><td><pre><span class="insertion">+</span> <span class="insertion">}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l425" name="l425">425</a></td><td><pre><span class="insertion">+</span> <span class="insertion">}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l426" name="l426">426</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l427" name="l427">427</a></td><td><pre><span class="insertion">+</span> <span class="insertion">function setCursor(index) {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l428" name="l428">428</a></td><td><pre><span class="insertion">+</span> <span class="insertion">document.getElementsByTagName('td')[index].style.backgroundImage = 'url(cursor.png)';</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l429" name="l429">429</a></td><td><pre><span class="insertion">+</span> <span class="insertion">}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l430" name="l430">430</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l431" name="l431">431</a></td><td><pre><span class="insertion">+</span> <span class="insertion">function remCursor(index) {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l432" name="l432">432</a></td><td><pre><span class="insertion">+</span> <span class="insertion">document.getElementsByTagName('td')[index].style.backgroundImage = '';</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l433" name="l433">433</a></td><td><pre><span class="insertion">+</span> <span class="insertion">}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l434" name="l434">434</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l435" name="l435">435</a></td><td><pre><span class="insertion">+</span> <span class="insertion">function moveCursor(index) {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l436" name="l436">436</a></td><td><pre><span class="insertion">+</span> <span class="insertion">remCursor(selected);</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l437" name="l437">437</a></td><td><pre><span class="insertion">+</span> <span class="insertion">selected = index;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l438" name="l438">438</a></td><td><pre><span class="insertion">+</span> <span class="insertion">setCursor(selected);</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l439" name="l439">439</a></td><td><pre><span class="insertion">+</span> <span class="insertion">}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l440" name="l440">440</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l441" name="l441">441</a></td><td><pre><span class="insertion">+</span> <span class="insertion">function setLetter(index, data) {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l442" name="l442">442</a></td><td><pre><span class="insertion">+</span> <span class="insertion">document.getElementsByTagName('td')[index].style.color = palette[brushColour];</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l443" name="l443">443</a></td><td><pre><span class="insertion">+</span> <span class="insertion">document.getElementsByTagName('td')[index].innerHTML = data;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l444" name="l444">444</a></td><td><pre><span class="insertion">+</span> <span class="insertion">}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l445" name="l445">445</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l446" name="l446">446</a></td><td><pre><span class="insertion">+</span> <span class="insertion">function remColour(index) {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l447" name="l447">447</a></td><td><pre><span class="insertion">+</span> <span class="insertion">document.getElementsByTagName('td')[index].style.color = '';</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l448" name="l448">448</a></td><td><pre><span class="insertion">+</span> <span class="insertion">}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l449" name="l449">449</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l450" name="l450">450</a></td><td><pre><span class="insertion">+</span> <span class="insertion">function setBackgroundColour(index) {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l451" name="l451">451</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if (rgbConvert(document.getElementsByTagName('td')[index].style.backgroundColor) != palette[brushColour]) {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l452" name="l452">452</a></td><td><pre><span class="insertion">+</span> <span class="insertion">saveStateUndo(index);</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l453" name="l453">453</a></td><td><pre><span class="insertion">+</span> <span class="insertion">document.getElementsByTagName('td')[index].style.backgroundColor = palette[brushColour];</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l454" name="l454">454</a></td><td><pre><span class="insertion">+</span> <span class="insertion">}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l455" name="l455">455</a></td><td><pre><span class="insertion">+</span> <span class="insertion">}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l456" name="l456">456</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l457" name="l457">457</a></td><td><pre><span class="insertion">+</span> <span class="insertion">function remBackgroundColour(index) {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l458" name="l458">458</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if (document.getElementsByTagName('td')[index].style.backgroundColor != '') {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l459" name="l459">459</a></td><td><pre><span class="insertion">+</span> <span class="insertion">saveStateUndo(index);</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l460" name="l460">460</a></td><td><pre><span class="insertion">+</span> <span class="insertion">document.getElementsByTagName('td')[index].style.backgroundColor = '';</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l461" name="l461">461</a></td><td><pre><span class="insertion">+</span> <span class="insertion">}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l462" name="l462">462</a></td><td><pre><span class="insertion">+</span> <span class="insertion">}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l463" name="l463">463</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l464" name="l464">464</a></td><td><pre><span class="insertion">+</span> <span class="insertion">function saveStateUndo(index) {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l465" name="l465">465</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if (undo.length &gt; 50000) undo.splice(0, 1);</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l466" name="l466">466</a></td><td><pre><span class="insertion">+</span> <span class="insertion">var i = undo.length;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l467" name="l467">467</a></td><td><pre><span class="insertion">+</span> <span class="insertion">undo[i] = new Array();</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l468" name="l468">468</a></td><td><pre><span class="insertion">+</span> <span class="insertion">undo[i][0] = index;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l469" name="l469">469</a></td><td><pre><span class="insertion">+</span> <span class="insertion">undo[i][1] = document.getElementsByTagName('td')[index].style.color;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l470" name="l470">470</a></td><td><pre><span class="insertion">+</span> <span class="insertion">undo[i][2] = document.getElementsByTagName('td')[index].style.backgroundColor;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l471" name="l471">471</a></td><td><pre><span class="insertion">+</span> <span class="insertion">undo[i][3] = document.getElementsByTagName('td')[index].innerHTML;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l472" name="l472">472</a></td><td><pre><span class="insertion">+</span> <span class="insertion">document.getElementById('undoButton').disabled = 0;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l473" name="l473">473</a></td><td><pre><span class="insertion">+</span> <span class="insertion">}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l474" name="l474">474</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l475" name="l475">475</a></td><td><pre><span class="insertion">+</span> <span class="insertion">function loadLastUndo() {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l476" name="l476">476</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if (undo.length &gt; 0) {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l477" name="l477">477</a></td><td><pre><span class="insertion">+</span> <span class="insertion">var currentUndo = undo[undo.length - 1];</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l478" name="l478">478</a></td><td><pre><span class="insertion">+</span> <span class="insertion">document.getElementsByTagName('td')[currentUndo[0]].style.color = currentUndo[1];</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l479" name="l479">479</a></td><td><pre><span class="insertion">+</span> <span class="insertion">document.getElementsByTagName('td')[currentUndo[0]].style.backgroundColor = currentUndo[2];</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l480" name="l480">480</a></td><td><pre><span class="insertion">+</span> <span class="insertion">document.getElementsByTagName('td')[currentUndo[0]].innerHTML = currentUndo[3];</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l481" name="l481">481</a></td><td><pre><span class="insertion">+</span> <span class="insertion">undo.splice(undo.length - 1, 1);</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l482" name="l482">482</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if (undo.length &lt;= 0) document.getElementById('undoButton').disabled = 1;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l483" name="l483">483</a></td><td><pre><span class="insertion">+</span> <span class="insertion">} else {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l484" name="l484">484</a></td><td><pre><span class="insertion">+</span> <span class="insertion">document.getElementById('undoButton').disabled = 1;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l485" name="l485">485</a></td><td><pre><span class="insertion">+</span> <span class="insertion">}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l486" name="l486">486</a></td><td><pre><span class="insertion">+</span> <span class="insertion">}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l487" name="l487">487</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l488" name="l488">488</a></td><td><pre><span class="insertion">+</span> <span class="insertion">function addDraft() {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l489" name="l489">489</a></td><td><pre><span class="insertion">+</span> <span class="insertion">var d = new Date();</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l490" name="l490">490</a></td><td><pre><span class="insertion">+</span> <span class="insertion">var i = drafts.length;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l491" name="l491">491</a></td><td><pre><span class="insertion">+</span> <span class="insertion">renderArt();</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l492" name="l492">492</a></td><td><pre><span class="insertion">+</span> <span class="insertion">drafts[i] = new Array();</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l493" name="l493">493</a></td><td><pre><span class="insertion">+</span> <span class="insertion">drafts[i][0] = document.getElementById('load').value;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l494" name="l494">494</a></td><td><pre><span class="insertion">+</span> <span class="insertion">drafts[i][1] = d.toUTCString();</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l495" name="l495">495</a></td><td><pre><span class="insertion">+</span> <span class="insertion">drawDrafts();</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l496" name="l496">496</a></td><td><pre><span class="insertion">+</span> <span class="insertion">}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l497" name="l497">497</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l498" name="l498">498</a></td><td><pre><span class="insertion">+</span> <span class="insertion">function drawDrafts() {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l499" name="l499">499</a></td><td><pre><span class="insertion">+</span> <span class="insertion">document.getElementById('drafts').innerHTML = '';</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l500" name="l500">500</a></td><td><pre><span class="insertion">+</span> <span class="insertion">for (var i in drafts) document.getElementById('drafts').innerHTML += '#' + i + ' &lt;a style=\'cursor: pointer;\' onclick=\'loadDraft(' + i + ');\'&gt;' + drafts[i][1] + &quot;&lt;/a&gt;&lt;br /&gt;\n&quot;;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l501" name="l501">501</a></td><td><pre><span class="insertion">+</span> <span class="insertion">}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l502" name="l502">502</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l503" name="l503">503</a></td><td><pre><span class="insertion">+</span> <span class="insertion">function loadDraft(index) {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l504" name="l504">504</a></td><td><pre><span class="insertion">+</span> <span class="insertion">document.getElementById('load').value = drafts[index][0];</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l505" name="l505">505</a></td><td><pre><span class="insertion">+</span> <span class="insertion">loadArt();</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l506" name="l506">506</a></td><td><pre><span class="insertion">+</span> <span class="insertion">}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l507" name="l507">507</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l508" name="l508">508</a></td><td><pre><span class="insertion">+</span> <span class="insertion">function copyArt() {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l509" name="l509">509</a></td><td><pre><span class="insertion">+</span> <span class="insertion">copy(document.getElementById('load'));</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l510" name="l510">510</a></td><td><pre><span class="insertion">+</span> <span class="insertion">}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l511" name="l511">511</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l512" name="l512">512</a></td><td><pre><span class="insertion">+</span> <span class="insertion">function shiftArt(direction) {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l513" name="l513">513</a></td><td><pre><span class="insertion">+</span> <span class="insertion">var newLoc;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l514" name="l514">514</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if (direction == 'down' || direction == 'right') var i = (canvasWidth * canvasHeight) - 1;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l515" name="l515">515</a></td><td><pre><span class="insertion">+</span> <span class="insertion">else var i = 0;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l516" name="l516">516</a></td><td><pre><span class="insertion">+</span> <span class="insertion">while (i &gt;= 0 &amp;&amp; i &lt; (canvasWidth * canvasHeight)) {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l517" name="l517">517</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if (direction == 'up' || direction == 'down') newLoc = i - canvasWidth;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l518" name="l518">518</a></td><td><pre><span class="insertion">+</span> <span class="insertion">else if (direction == 'left' || (direction == 'right')) newLoc = i - 1;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l519" name="l519">519</a></td><td><pre><span class="insertion">+</span> <span class="insertion">var newCell = document.getElementsByTagName('td')[newLoc];</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l520" name="l520">520</a></td><td><pre><span class="insertion">+</span> <span class="insertion">var oldCell = document.getElementsByTagName('td')[i];</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l521" name="l521">521</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if (newLoc &gt;= 0 &amp;&amp; newLoc &lt; (canvasWidth * canvasHeight)) {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l522" name="l522">522</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if (direction == 'up' || direction == 'left') {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l523" name="l523">523</a></td><td><pre><span class="insertion">+</span> <span class="insertion">newCell.style.color = oldCell.style.color;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l524" name="l524">524</a></td><td><pre><span class="insertion">+</span> <span class="insertion">newCell.style.backgroundColor = oldCell.style.backgroundColor;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l525" name="l525">525</a></td><td><pre><span class="insertion">+</span> <span class="insertion">newCell.innerHTML = oldCell.innerHTML;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l526" name="l526">526</a></td><td><pre><span class="insertion">+</span> <span class="insertion">} else if (direction == 'down' || direction == 'right') {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l527" name="l527">527</a></td><td><pre><span class="insertion">+</span> <span class="insertion">oldCell.style.color = newCell.style.color;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l528" name="l528">528</a></td><td><pre><span class="insertion">+</span> <span class="insertion">oldCell.style.backgroundColor = newCell.style.backgroundColor;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l529" name="l529">529</a></td><td><pre><span class="insertion">+</span> <span class="insertion">oldCell.innerHTML = newCell.innerHTML;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l530" name="l530">530</a></td><td><pre><span class="insertion">+</span> <span class="insertion">}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l531" name="l531">531</a></td><td><pre><span class="insertion">+</span> <span class="insertion">}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l532" name="l532">532</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if (direction == 'up' || direction == 'left') i++;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l533" name="l533">533</a></td><td><pre><span class="insertion">+</span> <span class="insertion">else if (direction == 'down' || direction == 'right') i--;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l534" name="l534">534</a></td><td><pre><span class="insertion">+</span> <span class="insertion">}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l535" name="l535">535</a></td><td><pre><span class="insertion">+</span> <span class="insertion">}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l536" name="l536">536</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l537" name="l537">537</a></td><td><pre><span class="insertion">+</span> <span class="insertion">function copy(inElement) {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l538" name="l538">538</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if (inElement.createTextRange) {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l539" name="l539">539</a></td><td><pre><span class="insertion">+</span> <span class="insertion">var range = inElement.createTextRange();</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l540" name="l540">540</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if (range &amp;&amp; BodyLoaded == 1) range.execCommand('Copy');</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l541" name="l541">541</a></td><td><pre><span class="insertion">+</span> <span class="insertion">} else {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l542" name="l542">542</a></td><td><pre><span class="insertion">+</span> <span class="insertion">var flashcopier = 'flashcopier';</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l543" name="l543">543</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if (!document.getElementById(flashcopier)) {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l544" name="l544">544</a></td><td><pre><span class="insertion">+</span> <span class="insertion">var divholder = document.createElement('div');</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l545" name="l545">545</a></td><td><pre><span class="insertion">+</span> <span class="insertion">divholder.id = flashcopier;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l546" name="l546">546</a></td><td><pre><span class="insertion">+</span> <span class="insertion">document.body.appendChild(divholder);</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l547" name="l547">547</a></td><td><pre><span class="insertion">+</span> <span class="insertion">}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l548" name="l548">548</a></td><td><pre><span class="insertion">+</span> <span class="insertion">document.getElementById(flashcopier).innerHTML = '';</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l549" name="l549">549</a></td><td><pre><span class="insertion">+</span> <span class="insertion">var divinfo = '&lt;embed src=&quot;data/clipboard.swf&quot; FlashVars=&quot;clipboard=' + escape(inElement.value) + '&quot; width=&quot;0&quot; height=&quot;0&quot; type=&quot;application/x-shockwave-flash&quot;&gt;&lt;/embed&gt;';</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l550" name="l550">550</a></td><td><pre><span class="insertion">+</span> <span class="insertion">document.getElementById(flashcopier).innerHTML = divinfo;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l551" name="l551">551</a></td><td><pre><span class="insertion">+</span> <span class="insertion">}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l552" name="l552">552</a></td><td><pre><span class="insertion">+</span> <span class="insertion">}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l553" name="l553">553</a></td><td><pre><span class="insertion">+</span> <span class="insertion">&lt;/script&gt;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l554" name="l554">554</a></td><td><pre><span class="insertion">+</span> <span class="insertion">&lt;/head&gt;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l555" name="l555">555</a></td><td><pre><span class="insertion">+</span> <span class="insertion">&lt;body onload='generateCanvas(80,24); generatePalette();' onkeydown='if(mode == 1) document.getElementById(&quot;textBuffer&quot;).focus();'&gt;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l556" name="l556">556</a></td><td><pre><span class="insertion">+</span> <span class="insertion">&lt;center&gt;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l557" name="l557">557</a></td><td><pre><span class="insertion">+</span> <span class="insertion">&lt;b&gt;ASCII Maker&lt;/b&gt;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l558" name="l558">558</a></td><td><pre><span class="insertion">+</span> <span class="insertion">&lt;br&gt;&lt;small&gt;&lt;i&gt;(&lt;a href=&quot;https://acid.vegas/asciimaker&quot;&gt;source&lt;/a&gt;)&lt;/i&gt;&lt;/small&gt;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l559" name="l559">559</a></td><td><pre><span class="insertion">+</span> <span class="insertion">&lt;br&gt;&lt;br&gt;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l560" name="l560">560</a></td><td><pre><span class="insertion">+</span> <span class="insertion">&lt;/center&gt;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l561" name="l561">561</a></td><td><pre><span class="insertion">+</span> <span class="insertion">&lt;div class='noDrag' id='canvas'&gt;&lt;/div&gt;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l562" name="l562">562</a></td><td><pre><span class="insertion">+</span> <span class="insertion">&lt;div class='noDrag' id='picker'&gt;&lt;/div&gt;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l563" name="l563">563</a></td><td><pre><span class="insertion">+</span> <span class="insertion">&lt;div id='preview'&gt;&lt;/div&gt;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l564" name="l564">564</a></td><td><pre><span class="insertion">+</span> <span class="insertion">&lt;div class='drafts' id='drafts'&gt;&lt;/div&gt;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l565" name="l565">565</a></td><td><pre><span class="insertion">+</span> <span class="insertion">&lt;p align='center'&gt;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l566" name="l566">566</a></td><td><pre><span class="insertion">+</span> <span class="insertion">&lt;button onclick='addDraft();'&gt;Save&lt;/button&gt;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l567" name="l567">567</a></td><td><pre><span class="insertion">+</span> <span class="insertion">&lt;button onclick='loadArt();'&gt;Load&lt;/button&gt;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l568" name="l568">568</a></td><td><pre><span class="insertion">+</span> <span class="insertion">&lt;button onclick='generateCanvas(canvasWidth, canvasHeight);'&gt;Clear&lt;/button&gt;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l569" name="l569">569</a></td><td><pre><span class="insertion">+</span> <span class="insertion">&lt;button onclick='renderArt();'&gt;Render&lt;/button&gt;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l570" name="l570">570</a></td><td><pre><span class="insertion">+</span> <span class="insertion">&lt;button onclick='copyArt();'&gt;Copy&lt;/button&gt;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l571" name="l571">571</a></td><td><pre><span class="insertion">+</span> <span class="insertion">&lt;button onclick='toggleMode();' id='typeButton'&gt;Type&lt;/button&gt;</span> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l572" name="l572">572</a></td><td><pre><span class="insertion">+</span> <span class="insertion">&lt;button onclick='toggleTool();' id='toolButton'&gt;Fill&lt;/button&gt;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l573" name="l573">573</a></td><td><pre><span class="insertion">+</span> <span class="insertion">&lt;button onclick='resizeArt();'&gt;Resize&lt;/button&gt;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l574" name="l574">574</a></td><td><pre><span class="insertion">+</span> <span class="insertion">&lt;button onclick='loadLastUndo();' id='undoButton' DISABLED&gt;Undo&lt;/button&gt;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l575" name="l575">575</a></td><td><pre><span class="insertion">+</span> <span class="insertion">&lt;br&gt;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l576" name="l576">576</a></td><td><pre><span class="insertion">+</span> <span class="insertion">&lt;textarea id='load' cols='30' rows='3' readonly&gt;&lt;/textarea&gt;&lt;br /&gt;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l577" name="l577">577</a></td><td><pre><span class="insertion">+</span> <span class="insertion">&lt;input type='text' id='textBuffer' onkeydown='if(mode != 1) return false;' style='opacity: 0;'&gt;&lt;br /&gt;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l578" name="l578">578</a></td><td><pre><span class="insertion">+</span> <span class="insertion">&lt;/p&gt;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l579" name="l579">579</a></td><td><pre><span class="insertion">+</span> <span class="insertion">&lt;/body&gt;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l580" name="l580">580</a></td><td><pre><span class="insertion">+</span><span class="insertion">&lt;/html&gt;</span></pre></td></tr>
</table>
<div id="footer">site generated by <a href="https://github.com/acidvegas/stagit" target="_blank">stagit</a> on <a href="#">05/03/20</a></div>

View File

@ -1,14 +0,0 @@
<!doctype html>
<link rel="stylesheet" href="../style.css">
<title>asciimaker</title>
<h1><a href="../index.html" title="Home">&#8962;&#xFE0E;</a> asciimaker</h1>
<div style="padding-left:30px">
<h4>draw ascii art straight from your web browser</h4>
<h5>git clone <a href="https://github.com/ircart/asciimaker.git" title="asciimaker clone URL">https://github.com/ircart/asciimaker.git</a></h5>
</div>
<hr>
<table id="main" cellpadding="0" cellspacing="0">
<tr id="navigation"><th></th><th>Hash</th><th>Commit message</th><th>Author</th><th>Date</th><th align="right">Files</th><th align="right">+</th><th align="right">-</th></tr>
<tr class="item"><td></td><td><a href="commit/26f7b8a.html" title="View this commit">26f7b8a</a></td><td>Initial commit</td><td>acidvegas</td><td>2019-06-24 22:43</td><td align="right">3</td><td align="right">+555</td><td align="right">-0</td></tr>
</table>
<div id="footer">site generated by <a href="https://github.com/acidvegas/stagit" target="_blank">stagit</a> on <a href="#">05/03/20</a></div>

File diff suppressed because it is too large Load Diff

View File

@ -1,14 +0,0 @@
<!doctype html>
<link rel="stylesheet" href="../style.css">
<title>asciipumper</title>
<h1><a href="../index.html" title="Home">&#8962;&#xFE0E;</a> asciipumper</h1>
<div style="padding-left:30px">
<h4>mspaint style program to create irc ascii art</h4>
<h5>git clone <a href="https://github.com/ircart/asciipumper.git" title="asciipumper clone URL">https://github.com/ircart/asciipumper.git</a></h5>
</div>
<hr>
<table id="main" cellpadding="0" cellspacing="0">
<tr id="navigation"><th></th><th>Hash</th><th>Commit message</th><th>Author</th><th>Date</th><th align="right">Files</th><th align="right">+</th><th align="right">-</th></tr>
<tr class="item"><td></td><td><a href="commit/85442fe.html" title="View this commit">85442fe</a></td><td>Initial commit</td><td>acidvegas</td><td>2019-06-24 02:33</td><td align="right">39</td><td align="right">+7869</td><td align="right">-0</td></tr>
</table>
<div id="footer">site generated by <a href="https://github.com/acidvegas/stagit" target="_blank">stagit</a> on <a href="#">05/03/20</a></div>

View File

@ -1,736 +0,0 @@
<!doctype html>
<link rel="stylesheet" href="../../style.css">
<title>blackjack :: 6522459</title>
<h1><a href="../index.html" title="Back to Repository">&larr;&#xFE0E;</a> blackjack :: 6522459</h1>
<hr>
<table id="main" cellpadding="0" cellspacing="0">
<tr class="item"><td class="linenumber"><a href="#l1" name="l1">1</a></td><td><pre><span class="commit">commit 652245941e457826b064299377fcb03f06b1c967</span><span class="commit"> (</span><span class="reference">HEAD -&gt; </span><span class="branch">master</span><span class="commit">)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l2" name="l2">2</a></td><td><pre>Author: acidvegas &lt;acid.vegas@acid.vegas&gt;</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l3" name="l3">3</a></td><td><pre>Date: Mon Jun 24 19:00:01 2019 -0400</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l4" name="l4">4</a></td><td><pre></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l5" name="l5">5</a></td><td><pre> Initial commit</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l6" name="l6">6</a></td><td><pre>---</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l7" name="l7">7</a></td><td><pre> LICENSE | 15 <span class="insertion">++</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l8" name="l8">8</a></td><td><pre> README.md | 22 <span class="insertion">+++</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l9" name="l9">9</a></td><td><pre> blackjack/blackjack.py | 20 <span class="insertion">+++</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l10" name="l10">10</a></td><td><pre> blackjack/core/config.py | 34 <span class="insertion">++++</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l11" name="l11">11</a></td><td><pre> blackjack/core/database.py | 27 <span class="insertion">+++</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l12" name="l12">12</a></td><td><pre> blackjack/core/debug.py | 63 <span class="insertion">+++++++</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l13" name="l13">13</a></td><td><pre> blackjack/core/irc.py | 398 <span class="insertion">+++++++++++++++++++++++++++++++++++++++++++++</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l14" name="l14">14</a></td><td><pre> blackjack/data/cheat.txt | 32 <span class="insertion">++++</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l15" name="l15">15</a></td><td><pre> blackjack/data/help.txt | 31 <span class="insertion">++++</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l16" name="l16">16</a></td><td><pre> screens/banner.png | Bin <span class="deletion">0</span> -&gt; <span class="insertion">9111</span> bytes</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l17" name="l17">17</a></td><td><pre> screens/cheat.png | Bin <span class="deletion">0</span> -&gt; <span class="insertion">30389</span> bytes</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l18" name="l18">18</a></td><td><pre> screens/game.png | Bin <span class="deletion">0</span> -&gt; <span class="insertion">19796</span> bytes</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l19" name="l19">19</a></td><td><pre> 12 files changed, 642 insertions(+)</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l20" name="l20">20</a></td><td><pre></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l21" name="l21">21</a></td><td><pre><span class="bold">diff --git a/LICENSE b/LICENSE</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l22" name="l22">22</a></td><td><pre><span class="bold">new file mode 100644</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l23" name="l23">23</a></td><td><pre><span class="bold">index 0000000..69997e8</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l24" name="l24">24</a></td><td><pre><span class="bold">--- /dev/null</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l25" name="l25">25</a></td><td><pre><span class="bold">+++ b/LICENSE</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l26" name="l26">26</a></td><td><pre><span class="hunk">@@ -0,0 +1,15 @@</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l27" name="l27">27</a></td><td><pre><span class="insertion">+</span><span class="insertion">ISC License</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l28" name="l28">28</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l29" name="l29">29</a></td><td><pre><span class="insertion">+</span><span class="insertion">Copyright (c) 2019, acidvegas &lt;acid.vegas@acid.vegas&gt;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l30" name="l30">30</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l31" name="l31">31</a></td><td><pre><span class="insertion">+</span><span class="insertion">Permission to use, copy, modify, and/or distribute this software for any</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l32" name="l32">32</a></td><td><pre><span class="insertion">+</span><span class="insertion">purpose with or without fee is hereby granted, provided that the above</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l33" name="l33">33</a></td><td><pre><span class="insertion">+</span><span class="insertion">copyright notice and this permission notice appear in all copies.</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l34" name="l34">34</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l35" name="l35">35</a></td><td><pre><span class="insertion">+</span><span class="insertion">THE SOFTWARE IS PROVIDED &quot;AS IS&quot; AND THE AUTHOR DISCLAIMS ALL WARRANTIES</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l36" name="l36">36</a></td><td><pre><span class="insertion">+</span><span class="insertion">WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l37" name="l37">37</a></td><td><pre><span class="insertion">+</span><span class="insertion">MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l38" name="l38">38</a></td><td><pre><span class="insertion">+</span><span class="insertion">ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l39" name="l39">39</a></td><td><pre><span class="insertion">+</span><span class="insertion">WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l40" name="l40">40</a></td><td><pre><span class="insertion">+</span><span class="insertion">ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l41" name="l41">41</a></td><td><pre><span class="insertion">+</span><span class="insertion">OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l42" name="l42">42</a></td><td><pre><span class="bold">diff --git a/README.md b/README.md</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l43" name="l43">43</a></td><td><pre><span class="bold">new file mode 100644</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l44" name="l44">44</a></td><td><pre><span class="bold">index 0000000..69f62fe</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l45" name="l45">45</a></td><td><pre><span class="bold">--- /dev/null</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l46" name="l46">46</a></td><td><pre><span class="bold">+++ b/README.md</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l47" name="l47">47</a></td><td><pre><span class="hunk">@@ -0,0 +1,22 @@</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l48" name="l48">48</a></td><td><pre><span class="insertion">+</span><span class="insertion">![](screens/banner.png)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l49" name="l49">49</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l50" name="l50">50</a></td><td><pre><span class="insertion">+</span><span class="insertion">###### Commands</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l51" name="l51">51</a></td><td><pre><span class="insertion">+</span><span class="insertion">| Command | Description |</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l52" name="l52">52</a></td><td><pre><span class="insertion">+</span><span class="insertion">| --- | --- |</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l53" name="l53">53</a></td><td><pre><span class="insertion">+</span><span class="insertion">| @help | Information about the commands. |</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l54" name="l54">54</a></td><td><pre><span class="insertion">+</span><span class="insertion">| @cheat | Betting cheat sheet. |</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l55" name="l55">55</a></td><td><pre><span class="insertion">+</span><span class="insertion">| .hit | Draw a card. |</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l56" name="l56">56</a></td><td><pre><span class="insertion">+</span><span class="insertion">| .mini | Toggle the mini deck. |</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l57" name="l57">57</a></td><td><pre><span class="insertion">+</span><span class="insertion">| .play | Start a game. |</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l58" name="l58">58</a></td><td><pre><span class="insertion">+</span><span class="insertion">| .stand | Stop drawing cards. |</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l59" name="l59">59</a></td><td><pre><span class="insertion">+</span><span class="insertion">| .stop | End the curent game. |</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l60" name="l60">60</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l61" name="l61">61</a></td><td><pre><span class="insertion">+</span><span class="insertion">##### Todo</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l62" name="l62">62</a></td><td><pre><span class="insertion">+</span><span class="insertion">- Add player database / chip system.</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l63" name="l63">63</a></td><td><pre><span class="insertion">+</span><span class="insertion">- Reward chips based on number of lines of chat in a channel. (Cap it to prevent flood.)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l64" name="l64">64</a></td><td><pre><span class="insertion">+</span><span class="insertion">- Add a player versus player and a player versus computer system.</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l65" name="l65">65</a></td><td><pre><span class="insertion">+</span><span class="insertion">- Incorperate splits and double downs, etc.</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l66" name="l66">66</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l67" name="l67">67</a></td><td><pre><span class="insertion">+</span><span class="insertion">##### Screens</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l68" name="l68">68</a></td><td><pre><span class="insertion">+</span><span class="insertion">![](screens/game.png)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l69" name="l69">69</a></td><td><pre><span class="insertion">+</span><span class="insertion">![](screens/cheat.png)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l70" name="l70">70</a></td><td><pre><span class="bold">diff --git a/blackjack/blackjack.py b/blackjack/blackjack.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l71" name="l71">71</a></td><td><pre><span class="bold">new file mode 100644</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l72" name="l72">72</a></td><td><pre><span class="bold">index 0000000..f164d38</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l73" name="l73">73</a></td><td><pre><span class="bold">--- /dev/null</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l74" name="l74">74</a></td><td><pre><span class="bold">+++ b/blackjack/blackjack.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l75" name="l75">75</a></td><td><pre><span class="hunk">@@ -0,0 +1,20 @@</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l76" name="l76">76</a></td><td><pre><span class="insertion">+</span><span class="insertion">#!/usr/bin/env python</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l77" name="l77">77</a></td><td><pre><span class="insertion">+</span><span class="insertion"># BlackJack IRC Bot - Developed by acidvegas in Python (https://acid.vegas/blackjack)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l78" name="l78">78</a></td><td><pre><span class="insertion">+</span><span class="insertion"># blackjack.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l79" name="l79">79</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l80" name="l80">80</a></td><td><pre><span class="insertion">+</span><span class="insertion">import os</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l81" name="l81">81</a></td><td><pre><span class="insertion">+</span><span class="insertion">import sys</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l82" name="l82">82</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l83" name="l83">83</a></td><td><pre><span class="insertion">+</span><span class="insertion">sys.dont_write_bytecode = True</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l84" name="l84">84</a></td><td><pre><span class="insertion">+</span><span class="insertion">os.chdir(sys.path[0] or '.')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l85" name="l85">85</a></td><td><pre><span class="insertion">+</span><span class="insertion">sys.path += ('core',)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l86" name="l86">86</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l87" name="l87">87</a></td><td><pre><span class="insertion">+</span><span class="insertion">import debug</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l88" name="l88">88</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l89" name="l89">89</a></td><td><pre><span class="insertion">+</span><span class="insertion">debug.info()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l90" name="l90">90</a></td><td><pre><span class="insertion">+</span><span class="insertion">if not debug.check_version(3):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l91" name="l91">91</a></td><td><pre><span class="insertion">+</span> <span class="insertion">debug.error_exit('BlackJack requires Python 3!')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l92" name="l92">92</a></td><td><pre><span class="insertion">+</span><span class="insertion">elif debug.check_privileges():</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l93" name="l93">93</a></td><td><pre><span class="insertion">+</span> <span class="insertion">debug.error_exit('Do not run BlackJack as admin/root!')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l94" name="l94">94</a></td><td><pre><span class="insertion">+</span><span class="insertion">import irc</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l95" name="l95">95</a></td><td><pre><span class="insertion">+</span><span class="insertion">irc.BlackJack.connect()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l96" name="l96">96</a></td><td><pre><span class="bold">diff --git a/blackjack/core/config.py b/blackjack/core/config.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l97" name="l97">97</a></td><td><pre><span class="bold">new file mode 100644</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l98" name="l98">98</a></td><td><pre><span class="bold">index 0000000..135af5a</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l99" name="l99">99</a></td><td><pre><span class="bold">--- /dev/null</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l100" name="l100">100</a></td><td><pre><span class="bold">+++ b/blackjack/core/config.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l101" name="l101">101</a></td><td><pre><span class="hunk">@@ -0,0 +1,34 @@</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l102" name="l102">102</a></td><td><pre><span class="insertion">+</span><span class="insertion">#!/usr/bin/env python</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l103" name="l103">103</a></td><td><pre><span class="insertion">+</span><span class="insertion"># BlackJack IRC Bot - Developed by acidvegas in Python (https://acid.vegas/blackjack)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l104" name="l104">104</a></td><td><pre><span class="insertion">+</span><span class="insertion"># config.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l105" name="l105">105</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l106" name="l106">106</a></td><td><pre><span class="insertion">+</span><span class="insertion">class connection:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l107" name="l107">107</a></td><td><pre><span class="insertion">+</span> <span class="insertion">server = 'irc.server.com'</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l108" name="l108">108</a></td><td><pre><span class="insertion">+</span> <span class="insertion">port = 6667</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l109" name="l109">109</a></td><td><pre><span class="insertion">+</span> <span class="insertion">proxy = None</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l110" name="l110">110</a></td><td><pre><span class="insertion">+</span> <span class="insertion">ipv6 = False</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l111" name="l111">111</a></td><td><pre><span class="insertion">+</span> <span class="insertion">ssl = False</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l112" name="l112">112</a></td><td><pre><span class="insertion">+</span> <span class="insertion">ssl_verify = False</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l113" name="l113">113</a></td><td><pre><span class="insertion">+</span> <span class="insertion">vhost = None</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l114" name="l114">114</a></td><td><pre><span class="insertion">+</span> <span class="insertion">channel = '#blackjack'</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l115" name="l115">115</a></td><td><pre><span class="insertion">+</span> <span class="insertion">key = None</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l116" name="l116">116</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l117" name="l117">117</a></td><td><pre><span class="insertion">+</span><span class="insertion">class cert:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l118" name="l118">118</a></td><td><pre><span class="insertion">+</span> <span class="insertion">file = None</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l119" name="l119">119</a></td><td><pre><span class="insertion">+</span> <span class="insertion">key = None</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l120" name="l120">120</a></td><td><pre><span class="insertion">+</span> <span class="insertion">password = None</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l121" name="l121">121</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l122" name="l122">122</a></td><td><pre><span class="insertion">+</span><span class="insertion">class ident:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l123" name="l123">123</a></td><td><pre><span class="insertion">+</span> <span class="insertion">nickname = 'BlackJack'</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l124" name="l124">124</a></td><td><pre><span class="insertion">+</span> <span class="insertion">username = 'blackjack'</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l125" name="l125">125</a></td><td><pre><span class="insertion">+</span> <span class="insertion">realname = 'https://acid.vegas/blackjack'</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l126" name="l126">126</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l127" name="l127">127</a></td><td><pre><span class="insertion">+</span><span class="insertion">class login:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l128" name="l128">128</a></td><td><pre><span class="insertion">+</span> <span class="insertion">network = None</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l129" name="l129">129</a></td><td><pre><span class="insertion">+</span> <span class="insertion">nickserv = None</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l130" name="l130">130</a></td><td><pre><span class="insertion">+</span> <span class="insertion">operator = None</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l131" name="l131">131</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l132" name="l132">132</a></td><td><pre><span class="insertion">+</span><span class="insertion">class settings:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l133" name="l133">133</a></td><td><pre><span class="insertion">+</span> <span class="insertion">cmd_char = '!'</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l134" name="l134">134</a></td><td><pre><span class="insertion">+</span> <span class="insertion">log = False</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l135" name="l135">135</a></td><td><pre><span class="insertion">+</span> <span class="insertion">modes = None</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l136" name="l136">136</a></td><td><pre><span class="bold">diff --git a/blackjack/core/database.py b/blackjack/core/database.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l137" name="l137">137</a></td><td><pre><span class="bold">new file mode 100644</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l138" name="l138">138</a></td><td><pre><span class="bold">index 0000000..72653f1</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l139" name="l139">139</a></td><td><pre><span class="bold">--- /dev/null</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l140" name="l140">140</a></td><td><pre><span class="bold">+++ b/blackjack/core/database.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l141" name="l141">141</a></td><td><pre><span class="hunk">@@ -0,0 +1,27 @@</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l142" name="l142">142</a></td><td><pre><span class="insertion">+</span><span class="insertion">#!/usr/bin/env python</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l143" name="l143">143</a></td><td><pre><span class="insertion">+</span><span class="insertion"># BlackJack IRC Bot - Developed by acidvegas in Python (https://acid.vegas/blackjack)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l144" name="l144">144</a></td><td><pre><span class="insertion">+</span><span class="insertion"># functions.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l145" name="l145">145</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l146" name="l146">146</a></td><td><pre><span class="insertion">+</span><span class="insertion">import datetime</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l147" name="l147">147</a></td><td><pre><span class="insertion">+</span><span class="insertion">import os</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l148" name="l148">148</a></td><td><pre><span class="insertion">+</span><span class="insertion">import sqlite3</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l149" name="l149">149</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l150" name="l150">150</a></td><td><pre><span class="insertion">+</span><span class="insertion"># Globals</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l151" name="l151">151</a></td><td><pre><span class="insertion">+</span><span class="insertion">db = sqlite3.connect(os.path.join('data', 'bot.db'), check_same_thread=False)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l152" name="l152">152</a></td><td><pre><span class="insertion">+</span><span class="insertion">sql = db.cursor()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l153" name="l153">153</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l154" name="l154">154</a></td><td><pre><span class="insertion">+</span><span class="insertion">def check():</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l155" name="l155">155</a></td><td><pre><span class="insertion">+</span> <span class="insertion">tables = sql.execute('SELECT name FROM sqlite_master WHERE type=\'table\'').fetchall()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l156" name="l156">156</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if not len(tables):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l157" name="l157">157</a></td><td><pre><span class="insertion">+</span> <span class="insertion">sql.execute('CREATE TABLE IGNORE (IDENT TEXT NOT NULL);')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l158" name="l158">158</a></td><td><pre><span class="insertion">+</span> <span class="insertion">db.commit()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l159" name="l159">159</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l160" name="l160">160</a></td><td><pre><span class="insertion">+</span><span class="insertion">class Player:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l161" name="l161">161</a></td><td><pre><span class="insertion">+</span><span class="insertion"> def register(nick, ident):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l162" name="l162">162</a></td><td><pre><span class="insertion">+</span><span class="insertion"> now = str(datetime.datetime.now())</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l163" name="l163">163</a></td><td><pre><span class="insertion">+</span><span class="insertion"> sql.execute('INSERT INTO PLAYERS (NICK,IDENT,MONEY,LAST) VALUES (\'{0}\', \'{1}\', \'{2}\', \'{3}\')'.format(nick, ident, '0', now))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l164" name="l164">164</a></td><td><pre><span class="insertion">+</span><span class="insertion"> db.commit()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l165" name="l165">165</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l166" name="l166">166</a></td><td><pre><span class="insertion">+</span><span class="insertion"> def get_money(ident):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l167" name="l167">167</a></td><td><pre><span class="insertion">+</span><span class="insertion"> return sql.execute('SELECT MONEY FROM PLAYERS WHERE IDENT=\'{0}\''.format(ident)).fetchall()[0][0]</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l168" name="l168">168</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l169" name="l169">169</a></td><td><pre><span class="bold">diff --git a/blackjack/core/debug.py b/blackjack/core/debug.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l170" name="l170">170</a></td><td><pre><span class="bold">new file mode 100644</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l171" name="l171">171</a></td><td><pre><span class="bold">index 0000000..6594fb7</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l172" name="l172">172</a></td><td><pre><span class="bold">--- /dev/null</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l173" name="l173">173</a></td><td><pre><span class="bold">+++ b/blackjack/core/debug.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l174" name="l174">174</a></td><td><pre><span class="hunk">@@ -0,0 +1,63 @@</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l175" name="l175">175</a></td><td><pre><span class="insertion">+</span><span class="insertion">#!/usr/bin/env python</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l176" name="l176">176</a></td><td><pre><span class="insertion">+</span><span class="insertion"># BlackJack IRC Bot - Developed by acidvegas in Python (https://acid.vegas/blackjack)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l177" name="l177">177</a></td><td><pre><span class="insertion">+</span><span class="insertion"># debug.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l178" name="l178">178</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l179" name="l179">179</a></td><td><pre><span class="insertion">+</span><span class="insertion">import ctypes</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l180" name="l180">180</a></td><td><pre><span class="insertion">+</span><span class="insertion">import os</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l181" name="l181">181</a></td><td><pre><span class="insertion">+</span><span class="insertion">import sys</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l182" name="l182">182</a></td><td><pre><span class="insertion">+</span><span class="insertion">import time</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l183" name="l183">183</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l184" name="l184">184</a></td><td><pre><span class="insertion">+</span><span class="insertion">def check_privileges():</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l185" name="l185">185</a></td><td><pre><span class="insertion">+</span><span class="insertion"> if check_windows():</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l186" name="l186">186</a></td><td><pre><span class="insertion">+</span><span class="insertion"> if ctypes.windll.shell32.IsUserAnAdmin() != 0:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l187" name="l187">187</a></td><td><pre><span class="insertion">+</span><span class="insertion"> return True</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l188" name="l188">188</a></td><td><pre><span class="insertion">+</span><span class="insertion"> else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l189" name="l189">189</a></td><td><pre><span class="insertion">+</span><span class="insertion"> return False</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l190" name="l190">190</a></td><td><pre><span class="insertion">+</span><span class="insertion"> else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l191" name="l191">191</a></td><td><pre><span class="insertion">+</span><span class="insertion"> if os.getuid() == 0 or os.geteuid() == 0:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l192" name="l192">192</a></td><td><pre><span class="insertion">+</span><span class="insertion"> return True</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l193" name="l193">193</a></td><td><pre><span class="insertion">+</span><span class="insertion"> else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l194" name="l194">194</a></td><td><pre><span class="insertion">+</span><span class="insertion"> return False</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l195" name="l195">195</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l196" name="l196">196</a></td><td><pre><span class="insertion">+</span><span class="insertion">def check_version(major):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l197" name="l197">197</a></td><td><pre><span class="insertion">+</span><span class="insertion"> if sys.version_info.major == major:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l198" name="l198">198</a></td><td><pre><span class="insertion">+</span><span class="insertion"> return True</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l199" name="l199">199</a></td><td><pre><span class="insertion">+</span><span class="insertion"> else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l200" name="l200">200</a></td><td><pre><span class="insertion">+</span><span class="insertion"> return False</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l201" name="l201">201</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l202" name="l202">202</a></td><td><pre><span class="insertion">+</span><span class="insertion">def check_windows():</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l203" name="l203">203</a></td><td><pre><span class="insertion">+</span><span class="insertion"> if os.name == 'nt':</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l204" name="l204">204</a></td><td><pre><span class="insertion">+</span><span class="insertion"> return True</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l205" name="l205">205</a></td><td><pre><span class="insertion">+</span><span class="insertion"> else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l206" name="l206">206</a></td><td><pre><span class="insertion">+</span><span class="insertion"> return False</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l207" name="l207">207</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l208" name="l208">208</a></td><td><pre><span class="insertion">+</span><span class="insertion">def clear():</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l209" name="l209">209</a></td><td><pre><span class="insertion">+</span><span class="insertion"> if check_windows():</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l210" name="l210">210</a></td><td><pre><span class="insertion">+</span><span class="insertion"> os.system('cls')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l211" name="l211">211</a></td><td><pre><span class="insertion">+</span><span class="insertion"> else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l212" name="l212">212</a></td><td><pre><span class="insertion">+</span><span class="insertion"> os.system('clear')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l213" name="l213">213</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l214" name="l214">214</a></td><td><pre><span class="insertion">+</span><span class="insertion">def error(msg, reason=None):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l215" name="l215">215</a></td><td><pre><span class="insertion">+</span><span class="insertion"> if reason:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l216" name="l216">216</a></td><td><pre><span class="insertion">+</span><span class="insertion"> print(f'{get_time()} | [!] - {msg} ({reason})')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l217" name="l217">217</a></td><td><pre><span class="insertion">+</span><span class="insertion"> else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l218" name="l218">218</a></td><td><pre><span class="insertion">+</span><span class="insertion"> print(f'{get_time()} | [!] - {msg}')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l219" name="l219">219</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l220" name="l220">220</a></td><td><pre><span class="insertion">+</span><span class="insertion">def error_exit(msg):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l221" name="l221">221</a></td><td><pre><span class="insertion">+</span><span class="insertion"> raise SystemExit(f'{get_time()} | [!] - {msg}')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l222" name="l222">222</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l223" name="l223">223</a></td><td><pre><span class="insertion">+</span><span class="insertion">def get_time():</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l224" name="l224">224</a></td><td><pre><span class="insertion">+</span><span class="insertion"> return time.strftime('%I:%M:%S')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l225" name="l225">225</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l226" name="l226">226</a></td><td><pre><span class="insertion">+</span><span class="insertion">def info():</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l227" name="l227">227</a></td><td><pre><span class="insertion">+</span><span class="insertion"> clear()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l228" name="l228">228</a></td><td><pre><span class="insertion">+</span><span class="insertion"> print(''.rjust(56, '#'))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l229" name="l229">229</a></td><td><pre><span class="insertion">+</span><span class="insertion"> print('#{0}#'.format(''.center(54)))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l230" name="l230">230</a></td><td><pre><span class="insertion">+</span><span class="insertion"> print('#{0}#'.format('BlackJack IRC Bot'.center(54)))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l231" name="l231">231</a></td><td><pre><span class="insertion">+</span><span class="insertion"> print('#{0}#'.format('Developed by acidvegas in Python'.center(54)))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l232" name="l232">232</a></td><td><pre><span class="insertion">+</span><span class="insertion"> print('#{0}#'.format('https://acid.vegas/blackjack'.center(54)))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l233" name="l233">233</a></td><td><pre><span class="insertion">+</span><span class="insertion"> print('#{0}#'.format(''.center(54)))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l234" name="l234">234</a></td><td><pre><span class="insertion">+</span><span class="insertion"> print(''.rjust(56, '#'))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l235" name="l235">235</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l236" name="l236">236</a></td><td><pre><span class="insertion">+</span><span class="insertion">def irc(msg):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l237" name="l237">237</a></td><td><pre><span class="insertion">+</span><span class="insertion"> print(f'{get_time()} | [~] - {msg}')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l238" name="l238">238</a></td><td><pre><span class="bold">diff --git a/blackjack/core/irc.py b/blackjack/core/irc.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l239" name="l239">239</a></td><td><pre><span class="bold">new file mode 100644</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l240" name="l240">240</a></td><td><pre><span class="bold">index 0000000..819f91c</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l241" name="l241">241</a></td><td><pre><span class="bold">--- /dev/null</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l242" name="l242">242</a></td><td><pre><span class="bold">+++ b/blackjack/core/irc.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l243" name="l243">243</a></td><td><pre><span class="hunk">@@ -0,0 +1,398 @@</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l244" name="l244">244</a></td><td><pre><span class="insertion">+</span><span class="insertion">#!/usr/bin/env python</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l245" name="l245">245</a></td><td><pre><span class="insertion">+</span><span class="insertion"># BlackJack IRC Bot - Developed by acidvegas in Python (https://acid.vegas/blackjack)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l246" name="l246">246</a></td><td><pre><span class="insertion">+</span><span class="insertion"># irc.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l247" name="l247">247</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l248" name="l248">248</a></td><td><pre><span class="insertion">+</span><span class="insertion">import inspect</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l249" name="l249">249</a></td><td><pre><span class="insertion">+</span><span class="insertion">import os</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l250" name="l250">250</a></td><td><pre><span class="insertion">+</span><span class="insertion">import random</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l251" name="l251">251</a></td><td><pre><span class="insertion">+</span><span class="insertion">import socket</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l252" name="l252">252</a></td><td><pre><span class="insertion">+</span><span class="insertion">import ssl</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l253" name="l253">253</a></td><td><pre><span class="insertion">+</span><span class="insertion">import threading</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l254" name="l254">254</a></td><td><pre><span class="insertion">+</span><span class="insertion">import time</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l255" name="l255">255</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l256" name="l256">256</a></td><td><pre><span class="insertion">+</span><span class="insertion">import config</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l257" name="l257">257</a></td><td><pre><span class="insertion">+</span><span class="insertion">import debug</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l258" name="l258">258</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l259" name="l259">259</a></td><td><pre><span class="insertion">+</span><span class="insertion"># Data Directories &amp; Files (DO NOT EDIT)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l260" name="l260">260</a></td><td><pre><span class="insertion">+</span><span class="insertion">data_dir = os.path.join(os.path.dirname(os.path.realpath(inspect.stack()[-1][1])), 'data')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l261" name="l261">261</a></td><td><pre><span class="insertion">+</span><span class="insertion">cheat_file = os.path.join(data_dir, 'cheat.txt')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l262" name="l262">262</a></td><td><pre><span class="insertion">+</span><span class="insertion">help_file = os.path.join(data_dir, 'help.txt')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l263" name="l263">263</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l264" name="l264">264</a></td><td><pre><span class="insertion">+</span><span class="insertion"># Card Types</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l265" name="l265">265</a></td><td><pre><span class="insertion">+</span><span class="insertion">club = ('♣','clubs')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l266" name="l266">266</a></td><td><pre><span class="insertion">+</span><span class="insertion">diamond = ('♦','diamonds')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l267" name="l267">267</a></td><td><pre><span class="insertion">+</span><span class="insertion">heart = ('♥','hearts')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l268" name="l268">268</a></td><td><pre><span class="insertion">+</span><span class="insertion">spade = ('♠','spades')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l269" name="l269">269</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l270" name="l270">270</a></td><td><pre><span class="insertion">+</span><span class="insertion"># Deck Table (Name, ASCII, Value, Remaining Suits)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l271" name="l271">271</a></td><td><pre><span class="insertion">+</span><span class="insertion">deck = {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l272" name="l272">272</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'ace' : [None, 11, [club,diamond,heart,spade]],</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l273" name="l273">273</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'two' : [None, 2, [club,diamond,heart,spade]],</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l274" name="l274">274</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'three' : [None, 3, [club,diamond,heart,spade]],</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l275" name="l275">275</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'four' : [None, 4, [club,diamond,heart,spade]],</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l276" name="l276">276</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'five' : [None, 5, [club,diamond,heart,spade]],</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l277" name="l277">277</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'six' : [None, 6, [club,diamond,heart,spade]],</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l278" name="l278">278</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'seven' : [None, 7, [club,diamond,heart,spade]],</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l279" name="l279">279</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'eight' : [None, 8, [club,diamond,heart,spade]],</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l280" name="l280">280</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'nine' : [None, 9, [club,diamond,heart,spade]],</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l281" name="l281">281</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'ten' : [None, 10, [club,diamond,heart,spade]],</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l282" name="l282">282</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'jack' : [None, 10, [club,diamond,heart,spade]],</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l283" name="l283">283</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'queen' : [None, 10, [club,diamond,heart,spade]],</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l284" name="l284">284</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'king' : [None, 10, [club,diamond,heart,spade]]</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l285" name="l285">285</a></td><td><pre><span class="insertion">+</span><span class="insertion">}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l286" name="l286">286</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l287" name="l287">287</a></td><td><pre><span class="insertion">+</span><span class="insertion"># Formatting Control Characters / Color Codes</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l288" name="l288">288</a></td><td><pre><span class="insertion">+</span><span class="insertion">bold = '\x02'</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l289" name="l289">289</a></td><td><pre><span class="insertion">+</span><span class="insertion">italic = '\x1D'</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l290" name="l290">290</a></td><td><pre><span class="insertion">+</span><span class="insertion">underline = '\x1F'</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l291" name="l291">291</a></td><td><pre><span class="insertion">+</span><span class="insertion">reverse = '\x16'</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l292" name="l292">292</a></td><td><pre><span class="insertion">+</span><span class="insertion">reset = '\x0f'</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l293" name="l293">293</a></td><td><pre><span class="insertion">+</span><span class="insertion">white = '00'</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l294" name="l294">294</a></td><td><pre><span class="insertion">+</span><span class="insertion">black = '01'</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l295" name="l295">295</a></td><td><pre><span class="insertion">+</span><span class="insertion">blue = '02'</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l296" name="l296">296</a></td><td><pre><span class="insertion">+</span><span class="insertion">green = '03'</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l297" name="l297">297</a></td><td><pre><span class="insertion">+</span><span class="insertion">red = '04'</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l298" name="l298">298</a></td><td><pre><span class="insertion">+</span><span class="insertion">brown = '05'</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l299" name="l299">299</a></td><td><pre><span class="insertion">+</span><span class="insertion">purple = '06'</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l300" name="l300">300</a></td><td><pre><span class="insertion">+</span><span class="insertion">orange = '07'</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l301" name="l301">301</a></td><td><pre><span class="insertion">+</span><span class="insertion">yellow = '08'</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l302" name="l302">302</a></td><td><pre><span class="insertion">+</span><span class="insertion">light_green = '09'</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l303" name="l303">303</a></td><td><pre><span class="insertion">+</span><span class="insertion">cyan = '10'</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l304" name="l304">304</a></td><td><pre><span class="insertion">+</span><span class="insertion">light_cyan = '11'</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l305" name="l305">305</a></td><td><pre><span class="insertion">+</span><span class="insertion">light_blue = '12'</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l306" name="l306">306</a></td><td><pre><span class="insertion">+</span><span class="insertion">pink = '13'</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l307" name="l307">307</a></td><td><pre><span class="insertion">+</span><span class="insertion">grey = '14'</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l308" name="l308">308</a></td><td><pre><span class="insertion">+</span><span class="insertion">light_grey = '15'</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l309" name="l309">309</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l310" name="l310">310</a></td><td><pre><span class="insertion">+</span><span class="insertion">def color(msg, foreground, background=None):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l311" name="l311">311</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if background:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l312" name="l312">312</a></td><td><pre><span class="insertion">+</span> <span class="insertion">return '\x03{0},{1}{2}{3}'.format(foreground, background, msg, reset)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l313" name="l313">313</a></td><td><pre><span class="insertion">+</span> <span class="insertion">else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l314" name="l314">314</a></td><td><pre><span class="insertion">+</span> <span class="insertion">return '\x03{0}{1}{2}'.format(foreground, msg, reset)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l315" name="l315">315</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l316" name="l316">316</a></td><td><pre><span class="insertion">+</span><span class="insertion">class IRC(object):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l317" name="l317">317</a></td><td><pre><span class="insertion">+</span> <span class="insertion">def __init__(self):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l318" name="l318">318</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.ace_minus = False</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l319" name="l319">319</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.hand = None</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l320" name="l320">320</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.last_move = 0</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l321" name="l321">321</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.last_time = 0</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l322" name="l322">322</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.player = None</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l323" name="l323">323</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.total = 0</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l324" name="l324">324</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.mini_deck = False</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l325" name="l325">325</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.sock = None</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l326" name="l326">326</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l327" name="l327">327</a></td><td><pre><span class="insertion">+</span> <span class="insertion">def action(self, chan, msg):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l328" name="l328">328</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.sendmsg(chan, '\x01ACTION {0}\x01'.format(msg))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l329" name="l329">329</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l330" name="l330">330</a></td><td><pre><span class="insertion">+</span> <span class="insertion">def connect(self):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l331" name="l331">331</a></td><td><pre><span class="insertion">+</span> <span class="insertion">try:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l332" name="l332">332</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.create_socket()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l333" name="l333">333</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.sock.connect((config.connection.server, config.connection.port))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l334" name="l334">334</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if config.login.network:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l335" name="l335">335</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.raw('PASS ' + config.login.network)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l336" name="l336">336</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.raw('USER {0} 0 * :{1}'.format(config.ident.username, config.ident.realname))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l337" name="l337">337</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.raw('NICK ' + config.ident.nickname)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l338" name="l338">338</a></td><td><pre><span class="insertion">+</span> <span class="insertion">except socket.error as ex:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l339" name="l339">339</a></td><td><pre><span class="insertion">+</span> <span class="insertion">debug.error('Failed to connect to IRC server.', ex)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l340" name="l340">340</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.event_disconnect()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l341" name="l341">341</a></td><td><pre><span class="insertion">+</span> <span class="insertion">else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l342" name="l342">342</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.listen()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l343" name="l343">343</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l344" name="l344">344</a></td><td><pre><span class="insertion">+</span> <span class="insertion">def create_socket(self):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l345" name="l345">345</a></td><td><pre><span class="insertion">+</span> <span class="insertion">family = socket.AF_INET6 if config.connection.ipv6 else socket.AF_INET</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l346" name="l346">346</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.sock = socket.socket(family, socket.SOCK_STREAM)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l347" name="l347">347</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if config.connection.vhost:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l348" name="l348">348</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.sock.bind((config.connection.vhost, 0))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l349" name="l349">349</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if config.connection.ssl:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l350" name="l350">350</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.sock = ssl.wrap_socket(self.sock)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l351" name="l351">351</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l352" name="l352">352</a></td><td><pre><span class="insertion">+</span> <span class="insertion">def draw(self):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l353" name="l353">353</a></td><td><pre><span class="insertion">+</span> <span class="insertion">card_type = random.choice(list(deck.keys()))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l354" name="l354">354</a></td><td><pre><span class="insertion">+</span> <span class="insertion">remaining = deck[card_type][2]</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l355" name="l355">355</a></td><td><pre><span class="insertion">+</span> <span class="insertion">while not remaining:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l356" name="l356">356</a></td><td><pre><span class="insertion">+</span> <span class="insertion">card_type = random.choice(list(deck.keys()))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l357" name="l357">357</a></td><td><pre><span class="insertion">+</span> <span class="insertion">remaining = deck[card_type][2]</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l358" name="l358">358</a></td><td><pre><span class="insertion">+</span> <span class="insertion">card_suit = random.choice(remaining)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l359" name="l359">359</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if card_suit in (heart,diamond):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l360" name="l360">360</a></td><td><pre><span class="insertion">+</span> <span class="insertion">card_color = red</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l361" name="l361">361</a></td><td><pre><span class="insertion">+</span> <span class="insertion">else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l362" name="l362">362</a></td><td><pre><span class="insertion">+</span> <span class="insertion">card_color = black</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l363" name="l363">363</a></td><td><pre><span class="insertion">+</span> <span class="insertion">card_value = deck[card_type][1]</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l364" name="l364">364</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if self.mini_deck:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l365" name="l365">365</a></td><td><pre><span class="insertion">+</span> <span class="insertion">card = deck[card_type][0].replace('X', card_suit[0])</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l366" name="l366">366</a></td><td><pre><span class="insertion">+</span> <span class="insertion">card = color(card, card_color, white)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l367" name="l367">367</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.hand.append(card)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l368" name="l368">368</a></td><td><pre><span class="insertion">+</span> <span class="insertion">else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l369" name="l369">369</a></td><td><pre><span class="insertion">+</span> <span class="insertion">for i in range(5):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l370" name="l370">370</a></td><td><pre><span class="insertion">+</span> <span class="insertion">card = deck[card_type][0][i].replace('X', card_suit[0])</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l371" name="l371">371</a></td><td><pre><span class="insertion">+</span> <span class="insertion">card = color(card, card_color, white)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l372" name="l372">372</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.hand[i].append(card)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l373" name="l373">373</a></td><td><pre><span class="insertion">+</span> <span class="insertion">deck[card_type][2].remove(card_suit)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l374" name="l374">374</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.total += card_value</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l375" name="l375">375</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if card_type == 'ace' and deck['ace'][1] != 1:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l376" name="l376">376</a></td><td><pre><span class="insertion">+</span> <span class="insertion">deck['ace'][1] = 1</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l377" name="l377">377</a></td><td><pre><span class="insertion">+</span> <span class="insertion">return (card_type, card_suit)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l378" name="l378">378</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l379" name="l379">379</a></td><td><pre><span class="insertion">+</span> <span class="insertion">def error(self, chan, msg, reason=None):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l380" name="l380">380</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if reason:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l381" name="l381">381</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.sendmsg(chan, '[{0}] {1} {2}'.format(color('ERROR', red), msg, color('({0})'.format(str(reason)), grey)))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l382" name="l382">382</a></td><td><pre><span class="insertion">+</span> <span class="insertion">else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l383" name="l383">383</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.sendmsg(chan, '[{0}] {1}'.format(color('ERROR', red), msg))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l384" name="l384">384</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l385" name="l385">385</a></td><td><pre><span class="insertion">+</span> <span class="insertion">def event_connect(self):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l386" name="l386">386</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.setup_deck('normal')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l387" name="l387">387</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if config.login.nickserv:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l388" name="l388">388</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.identify(self.username, config.login.nickserv)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l389" name="l389">389</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if config.login.operator:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l390" name="l390">390</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.oper(config.ident.username, config.login.operator)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l391" name="l391">391</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.join(config.connection.channel, config.connection.key)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l392" name="l392">392</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l393" name="l393">393</a></td><td><pre><span class="insertion">+</span> <span class="insertion">def event_disconnect(self):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l394" name="l394">394</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.sock.close()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l395" name="l395">395</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.reset()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l396" name="l396">396</a></td><td><pre><span class="insertion">+</span> <span class="insertion">time.sleep(10)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l397" name="l397">397</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.connect()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l398" name="l398">398</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l399" name="l399">399</a></td><td><pre><span class="insertion">+</span> <span class="insertion">def event_kick(self, nick, chan, kicked):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l400" name="l400">400</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if kicked == config.ident.nickname and chan == config.connection.channel:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l401" name="l401">401</a></td><td><pre><span class="insertion">+</span> <span class="insertion">time.sleep(3)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l402" name="l402">402</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.join(config.connection.channel, config.connection.key)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l403" name="l403">403</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l404" name="l404">404</a></td><td><pre><span class="insertion">+</span> <span class="insertion">def event_message(self, nick, chan, msg):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l405" name="l405">405</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if chan == config.connection.channel:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l406" name="l406">406</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if not msg.startswith('.'):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l407" name="l407">407</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if msg == '@help':</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l408" name="l408">408</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.action(chan, 'Sending help in a private message...')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l409" name="l409">409</a></td><td><pre><span class="insertion">+</span> <span class="insertion">help = [line.strip() for line in open(help_file).readlines() if line]</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l410" name="l410">410</a></td><td><pre><span class="insertion">+</span> <span class="insertion">for line in help:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l411" name="l411">411</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.sendmsg(chan, line)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l412" name="l412">412</a></td><td><pre><span class="insertion">+</span> <span class="insertion">elif msg == '@cheat':</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l413" name="l413">413</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.action(chan, 'Sending cheat sheet in a private message...')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l414" name="l414">414</a></td><td><pre><span class="insertion">+</span> <span class="insertion">cheat_sheet = [line.strip() for line in open(cheat_file).readlines() if line]</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l415" name="l415">415</a></td><td><pre><span class="insertion">+</span> <span class="insertion">for line in cheat_sheet:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l416" name="l416">416</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.sendmsg(chan, line)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l417" name="l417">417</a></td><td><pre><span class="insertion">+</span> <span class="insertion">else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l418" name="l418">418</a></td><td><pre><span class="insertion">+</span> <span class="insertion">cmd = msg.split()[0][1:]</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l419" name="l419">419</a></td><td><pre><span class="insertion">+</span> <span class="insertion">args = msg[len(cmd)+2:]</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l420" name="l420">420</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if time.time() - self.last_time &lt; 2:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l421" name="l421">421</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.sendmsg(chan, color('Slow down nerd!', red))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l422" name="l422">422</a></td><td><pre><span class="insertion">+</span> <span class="insertion">elif cmd == 'hit':</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l423" name="l423">423</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if self.player:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l424" name="l424">424</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if self.player == nick:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l425" name="l425">425</a></td><td><pre><span class="insertion">+</span> <span class="insertion">card_type, card_suit = self.draw()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l426" name="l426">426</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if self.mini_deck:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l427" name="l427">427</a></td><td><pre><span class="insertion">+</span> <span class="insertion">msg_str = ''</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l428" name="l428">428</a></td><td><pre><span class="insertion">+</span> <span class="insertion">for i in self.hand:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l429" name="l429">429</a></td><td><pre><span class="insertion">+</span> <span class="insertion">msg_str += ' ' + i</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l430" name="l430">430</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.sendmsg(chan, msg_str)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l431" name="l431">431</a></td><td><pre><span class="insertion">+</span> <span class="insertion">else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l432" name="l432">432</a></td><td><pre><span class="insertion">+</span> <span class="insertion">for i in range(5):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l433" name="l433">433</a></td><td><pre><span class="insertion">+</span> <span class="insertion">msg_str = ''</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l434" name="l434">434</a></td><td><pre><span class="insertion">+</span> <span class="insertion">for i in self.hand[i]:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l435" name="l435">435</a></td><td><pre><span class="insertion">+</span> <span class="insertion">msg_str += ' ' + i</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l436" name="l436">436</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.sendmsg(chan, msg_str)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l437" name="l437">437</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if self.total &gt; 21:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l438" name="l438">438</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if deck['ace'][1] == 1 and not self.ace_minus:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l439" name="l439">439</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.total = self.total - 10</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l440" name="l440">440</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.ace_minus = True</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l441" name="l441">441</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if self.total &gt; 21:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l442" name="l442">442</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.sendmsg(chan, '{0} {1}'.format(color('BUST!', red), color('You went over 21 and lost!', grey)))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l443" name="l443">443</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.reset()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l444" name="l444">444</a></td><td><pre><span class="insertion">+</span> <span class="insertion">else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l445" name="l445">445</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.sendmsg(chan, '{0} {1}'.format(color('You drew a {0} of {1}! Your total is now:'.format(card_type, card_suit[1]), yellow), color(str(self.total), light_blue)))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l446" name="l446">446</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.last_move = time.time()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l447" name="l447">447</a></td><td><pre><span class="insertion">+</span> <span class="insertion">else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l448" name="l448">448</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.sendmsg(chan, '{0} {1}'.format(color('BUST!', red), color('You went over 21 and lost!', grey)))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l449" name="l449">449</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.reset()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l450" name="l450">450</a></td><td><pre><span class="insertion">+</span> <span class="insertion">else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l451" name="l451">451</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.sendmsg(chan, '{0} {1}'.format(color('You drew a {0} of {1}! Your total is now:'.format(card_type, card_suit[1]), yellow), color(str(self.total), light_blue)))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l452" name="l452">452</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.last_move = time.time()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l453" name="l453">453</a></td><td><pre><span class="insertion">+</span> <span class="insertion">else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l454" name="l454">454</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.error(chan, 'You are not currently playing!', '{0} is playing still'.format(self.player))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l455" name="l455">455</a></td><td><pre><span class="insertion">+</span> <span class="insertion">else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l456" name="l456">456</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.error(chan, 'You are not currently playing!')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l457" name="l457">457</a></td><td><pre><span class="insertion">+</span> <span class="insertion">elif cmd == 'mini':</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l458" name="l458">458</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if not self.player:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l459" name="l459">459</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if self.mini_deck:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l460" name="l460">460</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.setup_deck('normal')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l461" name="l461">461</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.sendmsg(chan, '{0} {1}'.format(color('Mini deck has been', yellow), color('DISABLED', red)))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l462" name="l462">462</a></td><td><pre><span class="insertion">+</span> <span class="insertion">else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l463" name="l463">463</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.setup_deck('mini')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l464" name="l464">464</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.sendmsg(chan, '{0} {1}'.format(color('Mini deck has been', yellow), color('ENABLED', green)))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l465" name="l465">465</a></td><td><pre><span class="insertion">+</span> <span class="insertion">else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l466" name="l466">466</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.error(chan, 'You can not change the deck in game!')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l467" name="l467">467</a></td><td><pre><span class="insertion">+</span> <span class="insertion">elif cmd == 'play':</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l468" name="l468">468</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if not self.player:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l469" name="l469">469</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.player = nick</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l470" name="l470">470</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.action(chan, 'Starting a game of blackjack with {0}!'.format(nick))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l471" name="l471">471</a></td><td><pre><span class="insertion">+</span> <span class="insertion">for i in range(2):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l472" name="l472">472</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.draw()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l473" name="l473">473</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if self.mini_deck:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l474" name="l474">474</a></td><td><pre><span class="insertion">+</span> <span class="insertion">msg_str = ''</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l475" name="l475">475</a></td><td><pre><span class="insertion">+</span> <span class="insertion">for i in self.hand:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l476" name="l476">476</a></td><td><pre><span class="insertion">+</span> <span class="insertion">msg_str += ' ' + i</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l477" name="l477">477</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.sendmsg(chan, msg_str)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l478" name="l478">478</a></td><td><pre><span class="insertion">+</span> <span class="insertion">else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l479" name="l479">479</a></td><td><pre><span class="insertion">+</span> <span class="insertion">for i in range(5):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l480" name="l480">480</a></td><td><pre><span class="insertion">+</span> <span class="insertion">msg_str = ''</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l481" name="l481">481</a></td><td><pre><span class="insertion">+</span> <span class="insertion">for i in self.hand[i]:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l482" name="l482">482</a></td><td><pre><span class="insertion">+</span> <span class="insertion">msg_str += ' ' + i</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l483" name="l483">483</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.sendmsg(chan, msg_str)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l484" name="l484">484</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.sendmsg(chan, '{0} {1}'.format(color('Your total is now:', yellow), color(str(self.total), light_blue)))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l485" name="l485">485</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.last_move = time.time()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l486" name="l486">486</a></td><td><pre><span class="insertion">+</span> <span class="insertion">threading.Thread(target=self.timer).start()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l487" name="l487">487</a></td><td><pre><span class="insertion">+</span> <span class="insertion">elif self.player == nick:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l488" name="l488">488</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.error(chan, 'You have already started a game, please finish or stop the game!'.format(self.player))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l489" name="l489">489</a></td><td><pre><span class="insertion">+</span> <span class="insertion">else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l490" name="l490">490</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.error(chan, '{0} is currently playing a game, please wait!'.format(self.player))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l491" name="l491">491</a></td><td><pre><span class="insertion">+</span> <span class="insertion">elif cmd == 'stand':</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l492" name="l492">492</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if self.player:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l493" name="l493">493</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if self.player == nick:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l494" name="l494">494</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.sendmsg(chan, 'You have chosen to stand with {0} as your total.'.format(self.total))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l495" name="l495">495</a></td><td><pre><span class="insertion">+</span> <span class="insertion">else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l496" name="l496">496</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.error(chan, 'You are not currently playing!', '{0} is playing still'.format(self.player))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l497" name="l497">497</a></td><td><pre><span class="insertion">+</span> <span class="insertion">else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l498" name="l498">498</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.error(chan, 'You are not currently playing!')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l499" name="l499">499</a></td><td><pre><span class="insertion">+</span> <span class="insertion">elif cmd == 'stop':</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l500" name="l500">500</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if self.player:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l501" name="l501">501</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if self.player == nick:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l502" name="l502">502</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.action(chan, 'Ending current game with {0}!'.format(nick))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l503" name="l503">503</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.reset()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l504" name="l504">504</a></td><td><pre><span class="insertion">+</span> <span class="insertion">else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l505" name="l505">505</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.error(chan, 'You are not currently playing!', '{0} is playing still'.format(self.player))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l506" name="l506">506</a></td><td><pre><span class="insertion">+</span> <span class="insertion">else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l507" name="l507">507</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.error(chan, 'You are not currently playing!')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l508" name="l508">508</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.last_time = time.time()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l509" name="l509">509</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l510" name="l510">510</a></td><td><pre><span class="insertion">+</span> <span class="insertion">def event_nick_in_use(self):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l511" name="l511">511</a></td><td><pre><span class="insertion">+</span> <span class="insertion">debug.error_exit('BlackJack is already running.')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l512" name="l512">512</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l513" name="l513">513</a></td><td><pre><span class="insertion">+</span> <span class="insertion">def event_part(self, nick, chan):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l514" name="l514">514</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if self.player == nick:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l515" name="l515">515</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.sendmsg(chan, 'The game with {0} has ended.'.format(color(self.nick, light_blue)))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l516" name="l516">516</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.reset()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l517" name="l517">517</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l518" name="l518">518</a></td><td><pre><span class="insertion">+</span> <span class="insertion">def event_quit(self, nick):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l519" name="l519">519</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if self.player == nick:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l520" name="l520">520</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.sendmsg(chan, 'The game with {0} has ended.'.format(color(self.nick, light_blue)))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l521" name="l521">521</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.reset()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l522" name="l522">522</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l523" name="l523">523</a></td><td><pre><span class="insertion">+</span> <span class="insertion">def handle_events(self, data):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l524" name="l524">524</a></td><td><pre><span class="insertion">+</span> <span class="insertion">args = data.split()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l525" name="l525">525</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if args[0] == 'PING':</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l526" name="l526">526</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.raw('PONG ' + args[1][1:])</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l527" name="l527">527</a></td><td><pre><span class="insertion">+</span> <span class="insertion">elif args[1] == '001': # Use 002 or 003 if you run into issues.</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l528" name="l528">528</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.event_connect()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l529" name="l529">529</a></td><td><pre><span class="insertion">+</span> <span class="insertion">elif args[1] == '433':</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l530" name="l530">530</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.event_nick_in_use()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l531" name="l531">531</a></td><td><pre><span class="insertion">+</span> <span class="insertion">elif args[1] in ('KICK','PART','PRIVMSG','QUIT'):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l532" name="l532">532</a></td><td><pre><span class="insertion">+</span> <span class="insertion">nick = args[0].split('!')[0][1:]</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l533" name="l533">533</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if nick != config.ident.nickname:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l534" name="l534">534</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if args[1] == 'KICK':</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l535" name="l535">535</a></td><td><pre><span class="insertion">+</span> <span class="insertion">chan = args[2]</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l536" name="l536">536</a></td><td><pre><span class="insertion">+</span> <span class="insertion">kicked = args[3]</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l537" name="l537">537</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.event_kick(nick, chan, kicked)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l538" name="l538">538</a></td><td><pre><span class="insertion">+</span> <span class="insertion">elif args[1] == 'PART':</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l539" name="l539">539</a></td><td><pre><span class="insertion">+</span> <span class="insertion">chan = args[2]</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l540" name="l540">540</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.event_part(nick, chan)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l541" name="l541">541</a></td><td><pre><span class="insertion">+</span> <span class="insertion">elif args[1] == 'PRIVMSG':</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l542" name="l542">542</a></td><td><pre><span class="insertion">+</span> <span class="insertion">chan = args[2]</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l543" name="l543">543</a></td><td><pre><span class="insertion">+</span> <span class="insertion">msg = data.split('{0} PRIVMSG {1} :'.format(args[0], chan))[1]</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l544" name="l544">544</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if chan != config.ident.nickname:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l545" name="l545">545</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.event_message(nick, chan, msg)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l546" name="l546">546</a></td><td><pre><span class="insertion">+</span> <span class="insertion">elif args[1] == 'QUIT':</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l547" name="l547">547</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.event_quit(nick)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l548" name="l548">548</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l549" name="l549">549</a></td><td><pre><span class="insertion">+</span> <span class="insertion">def identify(self, username, password):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l550" name="l550">550</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.sendmsg('nickserv', f'identify {username} {password}')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l551" name="l551">551</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l552" name="l552">552</a></td><td><pre><span class="insertion">+</span> <span class="insertion">def join(self, chan, key=None):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l553" name="l553">553</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.raw(f'JOIN {chan} {key}') if key else self.raw('JOIN ' + chan)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l554" name="l554">554</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l555" name="l555">555</a></td><td><pre><span class="insertion">+</span> <span class="insertion">def listen(self):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l556" name="l556">556</a></td><td><pre><span class="insertion">+</span> <span class="insertion">while True:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l557" name="l557">557</a></td><td><pre><span class="insertion">+</span> <span class="insertion">try:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l558" name="l558">558</a></td><td><pre><span class="insertion">+</span> <span class="insertion">data = self.sock.recv(1024).decode('utf-8')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l559" name="l559">559</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if data:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l560" name="l560">560</a></td><td><pre><span class="insertion">+</span> <span class="insertion">for line in (line for line in data.split('\r\n') if line):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l561" name="l561">561</a></td><td><pre><span class="insertion">+</span> <span class="insertion">debug.irc(line)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l562" name="l562">562</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if line.startswith('ERROR :Closing Link:') and config.ident.nickname in data:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l563" name="l563">563</a></td><td><pre><span class="insertion">+</span> <span class="insertion">raise Exception('Connection has closed.')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l564" name="l564">564</a></td><td><pre><span class="insertion">+</span> <span class="insertion">elif len(line.split()) &gt;= 2:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l565" name="l565">565</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.handle_events(line)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l566" name="l566">566</a></td><td><pre><span class="insertion">+</span> <span class="insertion">else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l567" name="l567">567</a></td><td><pre><span class="insertion">+</span> <span class="insertion">debug.error('No data recieved from server.')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l568" name="l568">568</a></td><td><pre><span class="insertion">+</span> <span class="insertion">break</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l569" name="l569">569</a></td><td><pre><span class="insertion">+</span> <span class="insertion">except (UnicodeDecodeError,UnicodeEncodeError):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l570" name="l570">570</a></td><td><pre><span class="insertion">+</span> <span class="insertion">debug.error('Unicode error has occured.')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l571" name="l571">571</a></td><td><pre><span class="insertion">+</span> <span class="insertion">except Exception as ex:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l572" name="l572">572</a></td><td><pre><span class="insertion">+</span> <span class="insertion">debug.error('Unexpected error occured.', ex)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l573" name="l573">573</a></td><td><pre><span class="insertion">+</span> <span class="insertion">break</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l574" name="l574">574</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.event_disconnect()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l575" name="l575">575</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l576" name="l576">576</a></td><td><pre><span class="insertion">+</span> <span class="insertion">def mode(self, target, mode):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l577" name="l577">577</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.raw(f'MODE {target} {mode}')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l578" name="l578">578</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l579" name="l579">579</a></td><td><pre><span class="insertion">+</span> <span class="insertion">def raw(self, msg):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l580" name="l580">580</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.sock.send(bytes(msg + '\r\n', 'utf-8'))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l581" name="l581">581</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l582" name="l582">582</a></td><td><pre><span class="insertion">+</span> <span class="insertion">def reset(self):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l583" name="l583">583</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.ace = [False,False]</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l584" name="l584">584</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.last_move = 0</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l585" name="l585">585</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.player = None</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l586" name="l586">586</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.total = 0</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l587" name="l587">587</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if self.mini_deck:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l588" name="l588">588</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.hand = []</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l589" name="l589">589</a></td><td><pre><span class="insertion">+</span> <span class="insertion">else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l590" name="l590">590</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.hand = {0:[],1:[],2:[],3:[],4:[]}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l591" name="l591">591</a></td><td><pre><span class="insertion">+</span> <span class="insertion">deck['ace'][1] = 11</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l592" name="l592">592</a></td><td><pre><span class="insertion">+</span> <span class="insertion">for card in deck:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l593" name="l593">593</a></td><td><pre><span class="insertion">+</span> <span class="insertion">deck[card][2] = [club,diamond,heart,spade]</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l594" name="l594">594</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l595" name="l595">595</a></td><td><pre><span class="insertion">+</span> <span class="insertion">def sendmsg(self, target, msg):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l596" name="l596">596</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.raw(f'PRIVMSG {target} :{msg}')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l597" name="l597">597</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l598" name="l598">598</a></td><td><pre><span class="insertion">+</span> <span class="insertion">def setup_deck(self, deck_type):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l599" name="l599">599</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if deck_type == 'mini':</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l600" name="l600">600</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.hand = []</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l601" name="l601">601</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.mini_deck = True</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l602" name="l602">602</a></td><td><pre><span class="insertion">+</span> <span class="insertion">deck['ace'][0] = 'A X'</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l603" name="l603">603</a></td><td><pre><span class="insertion">+</span> <span class="insertion">deck['two'][0] = '2 X'</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l604" name="l604">604</a></td><td><pre><span class="insertion">+</span> <span class="insertion">deck['three'][0] = '3 X'</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l605" name="l605">605</a></td><td><pre><span class="insertion">+</span> <span class="insertion">deck['four'][0] = '4 X'</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l606" name="l606">606</a></td><td><pre><span class="insertion">+</span> <span class="insertion">deck['five'][0] = '5 X'</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l607" name="l607">607</a></td><td><pre><span class="insertion">+</span> <span class="insertion">deck['six'][0] = '6 X'</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l608" name="l608">608</a></td><td><pre><span class="insertion">+</span> <span class="insertion">deck['seven'][0] = '7 X'</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l609" name="l609">609</a></td><td><pre><span class="insertion">+</span> <span class="insertion">deck['eight'][0] = '8 X'</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l610" name="l610">610</a></td><td><pre><span class="insertion">+</span> <span class="insertion">deck['nine'][0] = '9 X'</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l611" name="l611">611</a></td><td><pre><span class="insertion">+</span> <span class="insertion">deck['ten'][0] = '10X'</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l612" name="l612">612</a></td><td><pre><span class="insertion">+</span> <span class="insertion">deck['jack'][0] = 'J X'</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l613" name="l613">613</a></td><td><pre><span class="insertion">+</span> <span class="insertion">deck['queen'][0] = 'Q X'</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l614" name="l614">614</a></td><td><pre><span class="insertion">+</span> <span class="insertion">deck['king'][0] = 'K X'</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l615" name="l615">615</a></td><td><pre><span class="insertion">+</span> <span class="insertion">elif deck_type == 'normal':</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l616" name="l616">616</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.hand = {0:[],1:[],2:[],3:[],4:[]}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l617" name="l617">617</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.mini_deck = False</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l618" name="l618">618</a></td><td><pre><span class="insertion">+</span> <span class="insertion">deck['ace'][0] = ('A ',' ',' X ',' ',' A')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l619" name="l619">619</a></td><td><pre><span class="insertion">+</span> <span class="insertion">deck['two'][0] = ('2 ',' X ',' ',' X ',' 2')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l620" name="l620">620</a></td><td><pre><span class="insertion">+</span> <span class="insertion">deck['three'][0] = ('3 ',' X ',' X ',' X ',' 3')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l621" name="l621">621</a></td><td><pre><span class="insertion">+</span> <span class="insertion">deck['four'][0] = ('4 ',' X X ',' ',' X X ',' 4')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l622" name="l622">622</a></td><td><pre><span class="insertion">+</span> <span class="insertion">deck['five'][0] = ('5 ',' X X ',' X ',' X X ',' 5')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l623" name="l623">623</a></td><td><pre><span class="insertion">+</span> <span class="insertion">deck['six'][0] = ('6 ',' X X ',' X X ',' X X ',' 6')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l624" name="l624">624</a></td><td><pre><span class="insertion">+</span> <span class="insertion">deck['seven'][0] = ('7 ',' X X ',' XXX ',' X X ',' 7')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l625" name="l625">625</a></td><td><pre><span class="insertion">+</span> <span class="insertion">deck['eight'][0] = ('8 ',' XXX ',' X X ',' XXX ',' 8')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l626" name="l626">626</a></td><td><pre><span class="insertion">+</span> <span class="insertion">deck['nine'][0] = ('9 ',' XXX ',' XXX ',' XXX ',' 9')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l627" name="l627">627</a></td><td><pre><span class="insertion">+</span> <span class="insertion">deck['ten'][0] = ('10 ',' XXX ',' XX XX ',' XXX ',' 10')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l628" name="l628">628</a></td><td><pre><span class="insertion">+</span> <span class="insertion">deck['jack'][0] = ('J ',' ',' X ',' ',' J')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l629" name="l629">629</a></td><td><pre><span class="insertion">+</span> <span class="insertion">deck['queen'][0] = ('Q ',' ',' X ',' ',' Q')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l630" name="l630">630</a></td><td><pre><span class="insertion">+</span> <span class="insertion">deck['king'][0] = ('K ',' ',' X ',' ',' K')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l631" name="l631">631</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l632" name="l632">632</a></td><td><pre><span class="insertion">+</span> <span class="insertion">def timer(self):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l633" name="l633">633</a></td><td><pre><span class="insertion">+</span> <span class="insertion">while self.player:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l634" name="l634">634</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if time.time() - self.last_move &gt; self.game_timeout:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l635" name="l635">635</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.sendmsg(config.connection.channel, '{0}, you took too long! The game has ended.'.format(self.player))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l636" name="l636">636</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.reset()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l637" name="l637">637</a></td><td><pre><span class="insertion">+</span> <span class="insertion">break</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l638" name="l638">638</a></td><td><pre><span class="insertion">+</span> <span class="insertion">else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l639" name="l639">639</a></td><td><pre><span class="insertion">+</span> <span class="insertion">time.sleep(1)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l640" name="l640">640</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l641" name="l641">641</a></td><td><pre><span class="insertion">+</span><span class="insertion">BlackJack = IRC()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l642" name="l642">642</a></td><td><pre><span class="bold">diff --git a/blackjack/data/cheat.txt b/blackjack/data/cheat.txt</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l643" name="l643">643</a></td><td><pre><span class="bold">new file mode 100644</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l644" name="l644">644</a></td><td><pre><span class="bold">index 0000000..bf2500d</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l645" name="l645">645</a></td><td><pre><span class="bold">--- /dev/null</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l646" name="l646">646</a></td><td><pre><span class="bold">+++ b/blackjack/data/cheat.txt</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l647" name="l647">647</a></td><td><pre><span class="hunk">@@ -0,0 +1,32 @@</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l648" name="l648">648</a></td><td><pre><span class="insertion">+</span><span class="insertion">0,10 1 BLACKJACK CHEAT SHEET 0</span> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l649" name="l649">649</a></td><td><pre><span class="insertion">+</span><span class="insertion">0,10 1,9 H 0,10HIT 0,4 S 0,10STAND 1,8 D 0,10DOUBLE 0,12 P 0,10SPLIT 1</span> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l650" name="l650">650</a></td><td><pre><span class="insertion">+</span><span class="insertion">0,1 1 0 DEALERS HAND 1</span> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l651" name="l651">651</a></td><td><pre><span class="insertion">+</span><span class="insertion">0,1 1,0 1,15 A 1,14 101,15 9 1,14 8 1,15 7 1,14 6 1,15 5 1,14 4 1,15 3 1,14 2</span> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l652" name="l652">652</a></td><td><pre><span class="insertion">+</span><span class="insertion">0,1 1,5 1,15 A A 0,12 P P P P P P P P P P14</span> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l653" name="l653">653</a></td><td><pre><span class="insertion">+</span><span class="insertion">0,1 1,5 1,1410 100,4 S S S S S S S S S S</span> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l654" name="l654">654</a></td><td><pre><span class="insertion">+</span><span class="insertion">0,1 0,5 1,15 9 9 0,4 S S 0,12 P P 0,4 S 0,12 P P P P P</span> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l655" name="l655">655</a></td><td><pre><span class="insertion">+</span><span class="insertion">0,1 0,5P1,14 8 8 0,12 P P P P P P P P P P</span> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l656" name="l656">656</a></td><td><pre><span class="insertion">+</span><span class="insertion">0,1 0,5A1,15 7 7 1,9 H H H H 0,12 P P P P P P</span> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l657" name="l657">657</a></td><td><pre><span class="insertion">+</span><span class="insertion">0,1 0,5I1,14 6 6 1,9 H H H H H H H H H H</span> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l658" name="l658">658</a></td><td><pre><span class="insertion">+</span><span class="insertion">0,1 0,5R1,15 5 5 1,9 H H 1,8 D D D D D D D D</span> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l659" name="l659">659</a></td><td><pre><span class="insertion">+</span><span class="insertion">0,1P1,5 1,14 4 4 0,9 1H H H H H0 0,12 P P 0,9 1H H H</span> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l660" name="l660">660</a></td><td><pre><span class="insertion">+</span><span class="insertion">0,1L1,5 1,15 3 3 0,9 1H0 1H H H0 0,12 P P P P P P</span> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l661" name="l661">661</a></td><td><pre><span class="insertion">+</span><span class="insertion">0,1A1,5 1,14 2 2 0,9 1H H H H0 0,12 P P P P P P</span> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l662" name="l662">662</a></td><td><pre><span class="insertion">+</span><span class="insertion">0,1Y1,7 1,15 17+ 0,4 S S S S S S S S S S</span> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l663" name="l663">663</a></td><td><pre><span class="insertion">+</span><span class="insertion">0,1E1,7 1,14 16 0,9 1H H H H0 1H0 0,4 S S S S S</span> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l664" name="l664">664</a></td><td><pre><span class="insertion">+</span><span class="insertion">0,1R1,7 1,15 15 0,9 1H H H H0 1H0 0,4 S S S S S</span> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l665" name="l665">665</a></td><td><pre><span class="insertion">+</span><span class="insertion">0,1S1,7H1,14 14 0,9 1H H H H0 1H0 0,4 S S S S S</span> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l666" name="l666">666</a></td><td><pre><span class="insertion">+</span><span class="insertion">0,1 1,7A1,15 13 0,9 1H H H H0 1H0 0,4 S S S S S</span> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l667" name="l667">667</a></td><td><pre><span class="insertion">+</span><span class="insertion">0,1H1,7R1,14 12 0,9 1H H H H H 0,4 S S S 0,9 1H H</span> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l668" name="l668">668</a></td><td><pre><span class="insertion">+</span><span class="insertion">0,1A1,7D1,15 11 0 0,9 1H0 1,8 D D D D D D D D D</span> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l669" name="l669">669</a></td><td><pre><span class="insertion">+</span><span class="insertion">0,1N1,7 1,14 10 0,9 1H0 1H0 1,8 D D D D D D D D</span> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l670" name="l670">670</a></td><td><pre><span class="insertion">+</span><span class="insertion">0,1D1,7 1,15 9 0,9 1H0 1H H H H0 1,8 D D D D 0,9 1H0</span> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l671" name="l671">671</a></td><td><pre><span class="insertion">+</span><span class="insertion">0,1 1,7 1,14 8- 0,9 1H H H H H H H H H H0</span> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l672" name="l672">672</a></td><td><pre><span class="insertion">+</span><span class="insertion">0,1 0,5 1,15 A-9 0,4 S S S S S 1,8 D D D D D</span> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l673" name="l673">673</a></td><td><pre><span class="insertion">+</span><span class="insertion">0,1 0,5 1,14 A-8 0,4 S S S S S 1,8 D D D D D</span> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l674" name="l674">674</a></td><td><pre><span class="insertion">+</span><span class="insertion">0,1 0,5S1,15 A-7 1,9 H H H0 0,4 S S 1,8 D D D D D</span> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l675" name="l675">675</a></td><td><pre><span class="insertion">+</span><span class="insertion">0,1 0,5O1,14 A-6 1,9 H H 0 1H H H0 1,8 D D D D 1,9 H</span> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l676" name="l676">676</a></td><td><pre><span class="insertion">+</span><span class="insertion">0,1 0,5F1,15 A-5 1,9 H H H H H0 1,8 D D D 0,9 1H H</span> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l677" name="l677">677</a></td><td><pre><span class="insertion">+</span><span class="insertion">0,1 0,5T1,14 A-4 1,9 H H H H0 1H0 1,8 D D D 0,9 1H0 1 H</span> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l678" name="l678">678</a></td><td><pre><span class="insertion">+</span><span class="insertion">0,1 0,5 1,15 A-3 0,9 1H 0 1H0 1 H0 1H0 1H0 1,8 D D 1,9 H H H</span> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l679" name="l679">679</a></td><td><pre><span class="insertion">+</span><span class="insertion">0,1 0,5 1,14 A-2 0,9 1H H H H H0 1,8 D D 1,9 H H H0</span> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l680" name="l680">680</a></td><td><pre><span class="bold">diff --git a/blackjack/data/help.txt b/blackjack/data/help.txt</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l681" name="l681">681</a></td><td><pre><span class="bold">new file mode 100644</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l682" name="l682">682</a></td><td><pre><span class="bold">index 0000000..ac3a3f7</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l683" name="l683">683</a></td><td><pre><span class="bold">--- /dev/null</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l684" name="l684">684</a></td><td><pre><span class="bold">+++ b/blackjack/data/help.txt</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l685" name="l685">685</a></td><td><pre><span class="hunk">@@ -0,0 +1,31 @@</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l686" name="l686">686</a></td><td><pre><span class="insertion">+</span><span class="insertion"> 1,0 1,1 1,0 1,1 1,0 1,1</span> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l687" name="l687">687</a></td><td><pre><span class="insertion">+</span><span class="insertion"> 1,1 1,0 1,1 1,0 1,1 1,0 1,1 1,0 1,1 1,0</span> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l688" name="l688">688</a></td><td><pre><span class="insertion">+</span><span class="insertion"> 1,1 1,0 1,1 1,0 1,1 1,0 1,1</span> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l689" name="l689">689</a></td><td><pre><span class="insertion">+</span><span class="insertion"> 1,1 1,0 1,1 1,0 1,1 1,0 1,1 1,0 1,1 1,0</span> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l690" name="l690">690</a></td><td><pre><span class="insertion">+</span><span class="insertion"> 1,0 1,1 1,0 1,1 0 1,0 1,1 1,0 1,1</span> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l691" name="l691">691</a></td><td><pre><span class="insertion">+</span> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l692" name="l692">692</a></td><td><pre><span class="insertion">+</span><span class="insertion">12,00▓▓▓▓▓▓▓ 04,00▓▓▓▓▓▓▓ 12,00▓▓▓▓▓▓▓ 04,00▓▓▓▓▓▓▓ 12,00▓▓▓▓▓▓▓ 04,00▓▓▓▓▓▓▓ 12,00▓▓▓▓▓▓▓ 04,00▓▓▓▓▓▓▓ 12,00▓▓▓▓▓▓▓</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l693" name="l693">693</a></td><td><pre><span class="insertion">+</span><span class="insertion">12,00▓▓▓▓▓▓▓ 04,00▓▓▓▓▓▓▓ 12,00▓▓▓▓▓▓▓ 04,00▓▓▓▓▓▓▓ 12,00▓▓▓▓▓▓▓ 04,00▓▓▓▓▓▓▓ 12,00▓▓▓▓▓▓▓ 04,00▓▓▓▓▓▓▓ 12,00▓▓▓▓▓▓▓</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l694" name="l694">694</a></td><td><pre><span class="insertion">+</span><span class="insertion">12,00▓▓▓00,12B12,00▓▓▓ 04,00▓▓▓00,04L04,00▓▓▓ 12,00▓▓▓00,12A12,00▓▓▓ 04,00▓▓▓00,04C04,00▓▓▓ 12,00▓▓▓00,12K12,00▓▓▓ 04,00▓▓▓00,04J04,00▓▓▓ 12,00▓▓▓00,12A12,00▓▓▓ 04,00▓▓▓00,04C04,00▓▓▓ 12,00▓▓▓00,12K12,00▓▓▓</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l695" name="l695">695</a></td><td><pre><span class="insertion">+</span><span class="insertion">12,00▓▓▓▓▓▓▓ 04,00▓▓▓▓▓▓▓ 12,00▓▓▓▓▓▓▓ 04,00▓▓▓▓▓▓▓ 12,00▓▓▓▓▓▓▓ 04,00▓▓▓▓▓▓▓ 12,00▓▓▓▓▓▓▓ 04,00▓▓▓▓▓▓▓ 12,00▓▓▓▓▓▓▓</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l696" name="l696">696</a></td><td><pre><span class="insertion">+</span><span class="insertion">12,00▓▓▓▓▓▓▓ 04,00▓▓▓▓▓▓▓ 12,00▓▓▓▓▓▓▓ 04,00▓▓▓▓▓▓▓ 12,00▓▓▓▓▓▓▓ 04,00▓▓▓▓▓▓▓ 12,00▓▓▓▓▓▓▓ 04,00▓▓▓▓▓▓▓ 12,00▓▓▓▓▓▓▓</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l697" name="l697">697</a></td><td><pre><span class="insertion">+</span> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l698" name="l698">698</a></td><td><pre><span class="insertion">+</span><span class="insertion">00┌─────────────────────────────────────────────────────────────────────┐</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l699" name="l699">699</a></td><td><pre><span class="insertion">+</span><span class="insertion">00│ 08.: HOW TO PLAY :. 00 │</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l700" name="l700">700</a></td><td><pre><span class="insertion">+</span><span class="insertion">00├─────────────────────────────────────────────────────────────────────┤</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l701" name="l701">701</a></td><td><pre><span class="insertion">+</span><span class="insertion">00│ │</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l702" name="l702">702</a></td><td><pre><span class="insertion">+</span><span class="insertion">00│ Type in the chat @help to see this message displayed.00 │</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l703" name="l703">703</a></td><td><pre><span class="insertion">+</span><span class="insertion">00│ │</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l704" name="l704">704</a></td><td><pre><span class="insertion">+</span><span class="insertion">00│ Start a game of BlackJack with the .play command. 00 │</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l705" name="l705">705</a></td><td><pre><span class="insertion">+</span><span class="insertion">00│ │</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l706" name="l706">706</a></td><td><pre><span class="insertion">+</span><span class="insertion">00│ You can end the game at any time with the .stop command. 00 │</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l707" name="l707">707</a></td><td><pre><span class="insertion">+</span><span class="insertion">00│ │</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l708" name="l708">708</a></td><td><pre><span class="insertion">+</span><span class="insertion">00│ The limit is 1 player at a time, and games will end if the player 00 │</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l709" name="l709">709</a></td><td><pre><span class="insertion">+</span><span class="insertion">00│ has not executed a command after 20 seconds since the last command.00 │</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l710" name="l710">710</a></td><td><pre><span class="insertion">+</span><span class="insertion">00│ │</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l711" name="l711">711</a></td><td><pre><span class="insertion">+</span><span class="insertion">00│ │</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l712" name="l712">712</a></td><td><pre><span class="insertion">+</span><span class="insertion">00│ Once in a game, you can use the .hit command to draw another card. 00 │</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l713" name="l713">713</a></td><td><pre><span class="insertion">+</span><span class="insertion">00│ │</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l714" name="l714">714</a></td><td><pre><span class="insertion">+</span><span class="insertion">00│ You can stop drawing cards with the .stand command. 00 │</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l715" name="l715">715</a></td><td><pre><span class="insertion">+</span><span class="insertion">00│ │</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l716" name="l716">716</a></td><td><pre><span class="insertion">+</span><span class="insertion">00└─────────────────────────────────────────────────────────────────────┘</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l717" name="l717">717</a></td><td><pre><span class="bold">diff --git a/screens/banner.png b/screens/banner.png</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l718" name="l718">718</a></td><td><pre><span class="bold">new file mode 100644</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l719" name="l719">719</a></td><td><pre><span class="bold">index 0000000..34a925c</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l720" name="l720">720</a></td><td><pre>Binary files /dev/null and b/screens/banner.png differ</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l721" name="l721">721</a></td><td><pre><span class="bold">diff --git a/screens/cheat.png b/screens/cheat.png</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l722" name="l722">722</a></td><td><pre><span class="bold">new file mode 100644</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l723" name="l723">723</a></td><td><pre><span class="bold">index 0000000..1474313</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l724" name="l724">724</a></td><td><pre>Binary files /dev/null and b/screens/cheat.png differ</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l725" name="l725">725</a></td><td><pre><span class="bold">diff --git a/screens/game.png b/screens/game.png</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l726" name="l726">726</a></td><td><pre><span class="bold">new file mode 100644</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l727" name="l727">727</a></td><td><pre><span class="bold">index 0000000..e4d50fb</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l728" name="l728">728</a></td><td><pre>Binary files /dev/null and b/screens/game.png differ</pre></td></tr>
</table>
<div id="footer">site generated by <a href="https://github.com/acidvegas/stagit" target="_blank">stagit</a> on <a href="#">05/03/20</a></div>

View File

@ -1,14 +0,0 @@
<!doctype html>
<link rel="stylesheet" href="../style.css">
<title>blackjack</title>
<h1><a href="../index.html" title="Home">&#8962;&#xFE0E;</a> blackjack</h1>
<div style="padding-left:30px">
<h4>irc bot to play blackjack</h4>
<h5>git clone <a href="https://github.com/acidvegas/blackjack.git" title="blackjack clone URL">https://github.com/acidvegas/blackjack.git</a></h5>
</div>
<hr>
<table id="main" cellpadding="0" cellspacing="0">
<tr id="navigation"><th></th><th>Hash</th><th>Commit message</th><th>Author</th><th>Date</th><th align="right">Files</th><th align="right">+</th><th align="right">-</th></tr>
<tr class="item"><td></td><td><a href="commit/6522459.html" title="View this commit">6522459</a></td><td>Initial commit</td><td>acidvegas</td><td>2019-06-24 19:00</td><td align="right">12</td><td align="right">+642</td><td align="right">-0</td></tr>
</table>
<div id="footer">site generated by <a href="https://github.com/acidvegas/stagit" target="_blank">stagit</a> on <a href="#">05/03/20</a></div>

16
blog/index.html Normal file
View File

@ -0,0 +1,16 @@
<!doctype html>
<link rel="stylesheet" href="../style.css">
<title>acidvegas x blog</title>
<center>
<br><img src="../i/acidvegas.png">
<br><img src="../i/mostdangerous.png">
<br><a href="../hardcore.wav"><img src="../i/crowdkill.gif"></a>
<table>
<tr>
<td><img src="../i/x.png"></td>
<td><img src="../i/blog.png"></td>
<td><img src="../i/x.png"></td>
</tr>
</table>
<br><b>under construction</b>
</center>

View File

@ -1,433 +0,0 @@
<!doctype html>
<link rel="stylesheet" href="../../style.css">
<title>booster :: 624276b</title>
<h1><a href="../index.html" title="Back to Repository">&larr;&#xFE0E;</a> booster :: 624276b</h1>
<hr>
<table id="main" cellpadding="0" cellspacing="0">
<tr class="item"><td class="linenumber"><a href="#l1" name="l1">1</a></td><td><pre><span class="commit">commit 624276b81844714a8fde292489b879b4aa7da91b</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l2" name="l2">2</a></td><td><pre>Author: acidvegas &lt;acid.vegas@acid.vegas&gt;</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l3" name="l3">3</a></td><td><pre>Date: Thu Jun 27 23:41:18 2019 -0400</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l4" name="l4">4</a></td><td><pre></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l5" name="l5">5</a></td><td><pre> Initial commit</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l6" name="l6">6</a></td><td><pre>---</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l7" name="l7">7</a></td><td><pre> LICENSE | 15 <span class="insertion">+++++</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l8" name="l8">8</a></td><td><pre> README.md | 23 <span class="insertion">+++++++</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l9" name="l9">9</a></td><td><pre> booster/booster.py | 20 <span class="insertion">++++++</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l10" name="l10">10</a></td><td><pre> booster/config.py | 26 <span class="insertion">++++++++</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l11" name="l11">11</a></td><td><pre> booster/debug.py | 93 <span class="insertion">++++++++++++++++++++++++++++</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l12" name="l12">12</a></td><td><pre> booster/functions.py | 23 <span class="insertion">+++++++</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l13" name="l13">13</a></td><td><pre> booster/twitter.py | 168 <span class="insertion">+++++++++++++++++++++++++++++++++++++++++++++++++++</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l14" name="l14">14</a></td><td><pre> 7 files changed, 368 insertions(+)</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l15" name="l15">15</a></td><td><pre></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l16" name="l16">16</a></td><td><pre><span class="bold">diff --git a/LICENSE b/LICENSE</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l17" name="l17">17</a></td><td><pre><span class="bold">new file mode 100644</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l18" name="l18">18</a></td><td><pre><span class="bold">index 0000000..69997e8</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l19" name="l19">19</a></td><td><pre><span class="bold">--- /dev/null</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l20" name="l20">20</a></td><td><pre><span class="bold">+++ b/LICENSE</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l21" name="l21">21</a></td><td><pre><span class="hunk">@@ -0,0 +1,15 @@</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l22" name="l22">22</a></td><td><pre><span class="insertion">+</span><span class="insertion">ISC License</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l23" name="l23">23</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l24" name="l24">24</a></td><td><pre><span class="insertion">+</span><span class="insertion">Copyright (c) 2019, acidvegas &lt;acid.vegas@acid.vegas&gt;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l25" name="l25">25</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l26" name="l26">26</a></td><td><pre><span class="insertion">+</span><span class="insertion">Permission to use, copy, modify, and/or distribute this software for any</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l27" name="l27">27</a></td><td><pre><span class="insertion">+</span><span class="insertion">purpose with or without fee is hereby granted, provided that the above</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l28" name="l28">28</a></td><td><pre><span class="insertion">+</span><span class="insertion">copyright notice and this permission notice appear in all copies.</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l29" name="l29">29</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l30" name="l30">30</a></td><td><pre><span class="insertion">+</span><span class="insertion">THE SOFTWARE IS PROVIDED &quot;AS IS&quot; AND THE AUTHOR DISCLAIMS ALL WARRANTIES</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l31" name="l31">31</a></td><td><pre><span class="insertion">+</span><span class="insertion">WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l32" name="l32">32</a></td><td><pre><span class="insertion">+</span><span class="insertion">MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l33" name="l33">33</a></td><td><pre><span class="insertion">+</span><span class="insertion">ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l34" name="l34">34</a></td><td><pre><span class="insertion">+</span><span class="insertion">WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l35" name="l35">35</a></td><td><pre><span class="insertion">+</span><span class="insertion">ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l36" name="l36">36</a></td><td><pre><span class="insertion">+</span><span class="insertion">OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l37" name="l37">37</a></td><td><pre><span class="bold">diff --git a/README.md b/README.md</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l38" name="l38">38</a></td><td><pre><span class="bold">new file mode 100644</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l39" name="l39">39</a></td><td><pre><span class="bold">index 0000000..2a46e03</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l40" name="l40">40</a></td><td><pre><span class="bold">--- /dev/null</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l41" name="l41">41</a></td><td><pre><span class="bold">+++ b/README.md</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l42" name="l42">42</a></td><td><pre><span class="hunk">@@ -0,0 +1,23 @@</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l43" name="l43">43</a></td><td><pre><span class="insertion">+</span><span class="insertion">###### Requirments</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l44" name="l44">44</a></td><td><pre><span class="insertion">+</span><span class="insertion">* [Tweepy](http://pypi.python.org/pypi/tweepy)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l45" name="l45">45</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l46" name="l46">46</a></td><td><pre><span class="insertion">+</span><span class="insertion">###### Instructions</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l47" name="l47">47</a></td><td><pre><span class="insertion">+</span><span class="insertion">Register a Twitter account, and [sign up](http://dev.twitter.com/apps/new) for a new developer application.</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l48" name="l48">48</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l49" name="l49">49</a></td><td><pre><span class="insertion">+</span><span class="insertion">Go to your new application settings &quot;Keys and Access Tokens&quot; tab.</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l50" name="l50">50</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l51" name="l51">51</a></td><td><pre><span class="insertion">+</span><span class="insertion">Click the &quot;Create Your Access Token&quot; button on the bottom.</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l52" name="l52">52</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l53" name="l53">53</a></td><td><pre><span class="insertion">+</span><span class="insertion">These will be used in the config to connect to your Twitter account.</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l54" name="l54">54</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l55" name="l55">55</a></td><td><pre><span class="insertion">+</span><span class="insertion">Go to your new application settings &quot;Permissions&quot;.</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l56" name="l56">56</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l57" name="l57">57</a></td><td><pre><span class="insertion">+</span><span class="insertion">Change your access to &quot;Read, Write and Access direct messages&quot;.</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l58" name="l58">58</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l59" name="l59">59</a></td><td><pre><span class="insertion">+</span><span class="insertion">Edit your `config.py` and change the Twitter API settings.</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l60" name="l60">60</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l61" name="l61">61</a></td><td><pre><span class="insertion">+</span><span class="insertion">###### Mirrors</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l62" name="l62">62</a></td><td><pre><span class="insertion">+</span><span class="insertion">- [acid.vegas](https://acid.vegas/booster) *(main)*</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l63" name="l63">63</a></td><td><pre><span class="insertion">+</span><span class="insertion">- [SuperNETs](https://git.supernets.org/acidvegas/booster)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l64" name="l64">64</a></td><td><pre><span class="insertion">+</span><span class="insertion">- [GitHub](https://github.com/acidvegas/booster)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l65" name="l65">65</a></td><td><pre><span class="insertion">+</span><span class="insertion">- [GitLab](https://gitlab.com/acidvegas/booster)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l66" name="l66">66</a></td><td><pre><span class="bold">diff --git a/booster/booster.py b/booster/booster.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l67" name="l67">67</a></td><td><pre><span class="bold">new file mode 100644</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l68" name="l68">68</a></td><td><pre><span class="bold">index 0000000..d28b7d2</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l69" name="l69">69</a></td><td><pre><span class="bold">--- /dev/null</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l70" name="l70">70</a></td><td><pre><span class="bold">+++ b/booster/booster.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l71" name="l71">71</a></td><td><pre><span class="hunk">@@ -0,0 +1,20 @@</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l72" name="l72">72</a></td><td><pre><span class="insertion">+</span><span class="insertion">#!/usr/bin/env python</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l73" name="l73">73</a></td><td><pre><span class="insertion">+</span><span class="insertion"># Booster Twitter Bot - Developed by acidvegas in Python (https://acid.vegas/booster)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l74" name="l74">74</a></td><td><pre><span class="insertion">+</span><span class="insertion"># booster.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l75" name="l75">75</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l76" name="l76">76</a></td><td><pre><span class="insertion">+</span><span class="insertion">import sys</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l77" name="l77">77</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l78" name="l78">78</a></td><td><pre><span class="insertion">+</span><span class="insertion">sys.dont_write_bytecode = True</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l79" name="l79">79</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l80" name="l80">80</a></td><td><pre><span class="insertion">+</span><span class="insertion">import debug</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l81" name="l81">81</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l82" name="l82">82</a></td><td><pre><span class="insertion">+</span><span class="insertion">debug.info()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l83" name="l83">83</a></td><td><pre><span class="insertion">+</span><span class="insertion">if not debug.check_version(3):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l84" name="l84">84</a></td><td><pre><span class="insertion">+</span><span class="insertion"> debug.error_exit('Requires Python version 3 to run!')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l85" name="l85">85</a></td><td><pre><span class="insertion">+</span><span class="insertion">if debug.check_privileges():</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l86" name="l86">86</a></td><td><pre><span class="insertion">+</span><span class="insertion"> debug.error_exit('Do not run as admin/root!')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l87" name="l87">87</a></td><td><pre><span class="insertion">+</span><span class="insertion">debug.check_imports()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l88" name="l88">88</a></td><td><pre><span class="insertion">+</span><span class="insertion">debug.check_config()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l89" name="l89">89</a></td><td><pre><span class="insertion">+</span><span class="insertion">import twitter</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l90" name="l90">90</a></td><td><pre><span class="insertion">+</span><span class="insertion">twitter.Booster().run()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l91" name="l91">91</a></td><td><pre><span class="insertion">+</span><span class="insertion">debug.keep_alive()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l92" name="l92">92</a></td><td><pre><span class="bold">diff --git a/booster/config.py b/booster/config.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l93" name="l93">93</a></td><td><pre><span class="bold">new file mode 100644</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l94" name="l94">94</a></td><td><pre><span class="bold">index 0000000..0a9a261</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l95" name="l95">95</a></td><td><pre><span class="bold">--- /dev/null</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l96" name="l96">96</a></td><td><pre><span class="bold">+++ b/booster/config.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l97" name="l97">97</a></td><td><pre><span class="hunk">@@ -0,0 +1,26 @@</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l98" name="l98">98</a></td><td><pre><span class="insertion">+</span><span class="insertion">#!/usr/bin/env python</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l99" name="l99">99</a></td><td><pre><span class="insertion">+</span><span class="insertion"># Booster Twitter Bot - Developed by acidvegas in Python (https://acid.vegas/booster)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l100" name="l100">100</a></td><td><pre><span class="insertion">+</span><span class="insertion"># config.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l101" name="l101">101</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l102" name="l102">102</a></td><td><pre><span class="insertion">+</span><span class="insertion"># API Settings</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l103" name="l103">103</a></td><td><pre><span class="insertion">+</span><span class="insertion">consumer_key = 'CHANGEME'</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l104" name="l104">104</a></td><td><pre><span class="insertion">+</span><span class="insertion">consumer_secret = 'CHANGEME'</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l105" name="l105">105</a></td><td><pre><span class="insertion">+</span><span class="insertion">access_token = 'CHANGEME'</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l106" name="l106">106</a></td><td><pre><span class="insertion">+</span><span class="insertion">access_token_secret = 'CHANGEME'</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l107" name="l107">107</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l108" name="l108">108</a></td><td><pre><span class="insertion">+</span><span class="insertion"># Boost Keywords</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l109" name="l109">109</a></td><td><pre><span class="insertion">+</span><span class="insertion">boost_keywords = ['500aday','autofollow','autofollowback','f4f','follow','follow4follow','followback','followtrain','instantfollow','instantfollowback','teamfollowback','wefollowback']</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l110" name="l110">110</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l111" name="l111">111</a></td><td><pre><span class="insertion">+</span><span class="insertion"># Throttling</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l112" name="l112">112</a></td><td><pre><span class="insertion">+</span><span class="insertion">max_favorites = 75 # Only use up to 100 to avoid suspension.</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l113" name="l113">113</a></td><td><pre><span class="insertion">+</span><span class="insertion">max_follows = 75 # Only use up to 100 to avoid suspension.</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l114" name="l114">114</a></td><td><pre><span class="insertion">+</span><span class="insertion">max_messages = 750 # Only use up to 1000 to avoid suspension.</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l115" name="l115">115</a></td><td><pre><span class="insertion">+</span><span class="insertion">max_tweets = 750 # Only use up to 1000 to avoid suspension.</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l116" name="l116">116</a></td><td><pre><span class="insertion">+</span><span class="insertion">max_unfollows = 75 # Only use up to 100 to avoid suspension.</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l117" name="l117">117</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l118" name="l118">118</a></td><td><pre><span class="insertion">+</span><span class="insertion"># Messaging</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l119" name="l119">119</a></td><td><pre><span class="insertion">+</span><span class="insertion">send_message = False # Send a message to anyone who follows you.</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l120" name="l120">120</a></td><td><pre><span class="insertion">+</span><span class="insertion">message = 'Thank you for following our Twitter account!'</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l121" name="l121">121</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l122" name="l122">122</a></td><td><pre><span class="insertion">+</span><span class="insertion"># Where On Earth ID's (http://www.woeidlookup.com/)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l123" name="l123">123</a></td><td><pre><span class="insertion">+</span><span class="insertion">woeid = 23424975 # United States</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l124" name="l124">124</a></td><td><pre><span class="bold">diff --git a/booster/debug.py b/booster/debug.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l125" name="l125">125</a></td><td><pre><span class="bold">new file mode 100644</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l126" name="l126">126</a></td><td><pre><span class="bold">index 0000000..904f181</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l127" name="l127">127</a></td><td><pre><span class="bold">--- /dev/null</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l128" name="l128">128</a></td><td><pre><span class="bold">+++ b/booster/debug.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l129" name="l129">129</a></td><td><pre><span class="hunk">@@ -0,0 +1,93 @@</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l130" name="l130">130</a></td><td><pre><span class="insertion">+</span><span class="insertion">#!/usr/bin/env python</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l131" name="l131">131</a></td><td><pre><span class="insertion">+</span><span class="insertion"># Booster Twitter Bot - Developed by acidvegas in Python (https://acid.vegas/booster)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l132" name="l132">132</a></td><td><pre><span class="insertion">+</span><span class="insertion"># debug.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l133" name="l133">133</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l134" name="l134">134</a></td><td><pre><span class="insertion">+</span><span class="insertion">import ctypes</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l135" name="l135">135</a></td><td><pre><span class="insertion">+</span><span class="insertion">import os</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l136" name="l136">136</a></td><td><pre><span class="insertion">+</span><span class="insertion">import sys</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l137" name="l137">137</a></td><td><pre><span class="insertion">+</span><span class="insertion">import time</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l138" name="l138">138</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l139" name="l139">139</a></td><td><pre><span class="insertion">+</span><span class="insertion">import config</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l140" name="l140">140</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l141" name="l141">141</a></td><td><pre><span class="insertion">+</span><span class="insertion">def action(msg):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l142" name="l142">142</a></td><td><pre><span class="insertion">+</span><span class="insertion"> print('%s | [#] - %s' % (get_time(), msg))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l143" name="l143">143</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l144" name="l144">144</a></td><td><pre><span class="insertion">+</span><span class="insertion">def alert(msg):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l145" name="l145">145</a></td><td><pre><span class="insertion">+</span><span class="insertion"> print('%s | [+] - %s' % (get_time(), msg))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l146" name="l146">146</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l147" name="l147">147</a></td><td><pre><span class="insertion">+</span><span class="insertion">def check_config():</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l148" name="l148">148</a></td><td><pre><span class="insertion">+</span><span class="insertion"> for item in (config.consumer_key, config.consumer_secret, config.access_token, config.access_token_secret):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l149" name="l149">149</a></td><td><pre><span class="insertion">+</span><span class="insertion"> if item == 'CHANGEME':</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l150" name="l150">150</a></td><td><pre><span class="insertion">+</span><span class="insertion"> error_exit('Edit your config file!')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l151" name="l151">151</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l152" name="l152">152</a></td><td><pre><span class="insertion">+</span><span class="insertion">def check_imports():</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l153" name="l153">153</a></td><td><pre><span class="insertion">+</span><span class="insertion"> try:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l154" name="l154">154</a></td><td><pre><span class="insertion">+</span><span class="insertion"> import tweepy</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l155" name="l155">155</a></td><td><pre><span class="insertion">+</span><span class="insertion"> except ImportError:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l156" name="l156">156</a></td><td><pre><span class="insertion">+</span><span class="insertion"> error_exit('Failed to import the Tweepy library! (http://pypi.python.org/pypi/tweepy)')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l157" name="l157">157</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l158" name="l158">158</a></td><td><pre><span class="insertion">+</span><span class="insertion">def check_privileges():</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l159" name="l159">159</a></td><td><pre><span class="insertion">+</span><span class="insertion"> if check_windows():</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l160" name="l160">160</a></td><td><pre><span class="insertion">+</span><span class="insertion"> if ctypes.windll.shell32.IsUserAnAdmin() != 0:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l161" name="l161">161</a></td><td><pre><span class="insertion">+</span><span class="insertion"> return True</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l162" name="l162">162</a></td><td><pre><span class="insertion">+</span><span class="insertion"> else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l163" name="l163">163</a></td><td><pre><span class="insertion">+</span><span class="insertion"> return False</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l164" name="l164">164</a></td><td><pre><span class="insertion">+</span><span class="insertion"> else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l165" name="l165">165</a></td><td><pre><span class="insertion">+</span><span class="insertion"> if os.getuid() == 0 or os.geteuid() == 0:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l166" name="l166">166</a></td><td><pre><span class="insertion">+</span><span class="insertion"> return True</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l167" name="l167">167</a></td><td><pre><span class="insertion">+</span><span class="insertion"> else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l168" name="l168">168</a></td><td><pre><span class="insertion">+</span><span class="insertion"> return False</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l169" name="l169">169</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l170" name="l170">170</a></td><td><pre><span class="insertion">+</span><span class="insertion">def check_version(major):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l171" name="l171">171</a></td><td><pre><span class="insertion">+</span><span class="insertion"> if sys.version_info.major == major:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l172" name="l172">172</a></td><td><pre><span class="insertion">+</span><span class="insertion"> return True</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l173" name="l173">173</a></td><td><pre><span class="insertion">+</span><span class="insertion"> else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l174" name="l174">174</a></td><td><pre><span class="insertion">+</span><span class="insertion"> return False</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l175" name="l175">175</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l176" name="l176">176</a></td><td><pre><span class="insertion">+</span><span class="insertion">def check_windows():</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l177" name="l177">177</a></td><td><pre><span class="insertion">+</span><span class="insertion"> if os.name == 'nt':</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l178" name="l178">178</a></td><td><pre><span class="insertion">+</span><span class="insertion"> return True</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l179" name="l179">179</a></td><td><pre><span class="insertion">+</span><span class="insertion"> else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l180" name="l180">180</a></td><td><pre><span class="insertion">+</span><span class="insertion"> return False</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l181" name="l181">181</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l182" name="l182">182</a></td><td><pre><span class="insertion">+</span><span class="insertion">def clear():</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l183" name="l183">183</a></td><td><pre><span class="insertion">+</span><span class="insertion"> if check_windows():</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l184" name="l184">184</a></td><td><pre><span class="insertion">+</span><span class="insertion"> os.system('cls')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l185" name="l185">185</a></td><td><pre><span class="insertion">+</span><span class="insertion"> else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l186" name="l186">186</a></td><td><pre><span class="insertion">+</span><span class="insertion"> os.system('clear')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l187" name="l187">187</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l188" name="l188">188</a></td><td><pre><span class="insertion">+</span><span class="insertion">def error(msg, reason=None):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l189" name="l189">189</a></td><td><pre><span class="insertion">+</span><span class="insertion"> if reason:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l190" name="l190">190</a></td><td><pre><span class="insertion">+</span><span class="insertion"> print('%s | [!] - %s (%s)' % (get_time(), msg, str(reason)))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l191" name="l191">191</a></td><td><pre><span class="insertion">+</span><span class="insertion"> else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l192" name="l192">192</a></td><td><pre><span class="insertion">+</span><span class="insertion"> print('%s | [!] - %s' % (get_time(), msg))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l193" name="l193">193</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l194" name="l194">194</a></td><td><pre><span class="insertion">+</span><span class="insertion">def error_exit(msg):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l195" name="l195">195</a></td><td><pre><span class="insertion">+</span><span class="insertion"> raise SystemExit('%s | [!] - %s' % (get_time(), msg))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l196" name="l196">196</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l197" name="l197">197</a></td><td><pre><span class="insertion">+</span><span class="insertion">def get_time():</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l198" name="l198">198</a></td><td><pre><span class="insertion">+</span><span class="insertion"> return time.strftime('%I:%M:%S')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l199" name="l199">199</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l200" name="l200">200</a></td><td><pre><span class="insertion">+</span><span class="insertion">def get_windows():</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l201" name="l201">201</a></td><td><pre><span class="insertion">+</span><span class="insertion"> if os.name == 'nt':</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l202" name="l202">202</a></td><td><pre><span class="insertion">+</span><span class="insertion"> return True</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l203" name="l203">203</a></td><td><pre><span class="insertion">+</span><span class="insertion"> else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l204" name="l204">204</a></td><td><pre><span class="insertion">+</span><span class="insertion"> return False</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l205" name="l205">205</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l206" name="l206">206</a></td><td><pre><span class="insertion">+</span><span class="insertion">def info():</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l207" name="l207">207</a></td><td><pre><span class="insertion">+</span><span class="insertion"> clear()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l208" name="l208">208</a></td><td><pre><span class="insertion">+</span><span class="insertion"> print(''.rjust(56, '#'))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l209" name="l209">209</a></td><td><pre><span class="insertion">+</span><span class="insertion"> print('#{0}#'.format(''.center(54)))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l210" name="l210">210</a></td><td><pre><span class="insertion">+</span><span class="insertion"> print('#{0}#'.format('Booster Twitter Bot'.center(54)))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l211" name="l211">211</a></td><td><pre><span class="insertion">+</span><span class="insertion"> print('#{0}#'.format('Developed by acidvegas in Python 3'.center(54)))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l212" name="l212">212</a></td><td><pre><span class="insertion">+</span><span class="insertion"> print('#{0}#'.format('https://acid.vegas/booster'.center(54)))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l213" name="l213">213</a></td><td><pre><span class="insertion">+</span><span class="insertion"> print('#{0}#'.format(''.center(54)))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l214" name="l214">214</a></td><td><pre><span class="insertion">+</span><span class="insertion"> print(''.rjust(56, '#'))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l215" name="l215">215</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l216" name="l216">216</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l217" name="l217">217</a></td><td><pre><span class="insertion">+</span><span class="insertion">def keep_alive():</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l218" name="l218">218</a></td><td><pre><span class="insertion">+</span><span class="insertion"> try:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l219" name="l219">219</a></td><td><pre><span class="insertion">+</span><span class="insertion"> while True:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l220" name="l220">220</a></td><td><pre><span class="insertion">+</span><span class="insertion"> input('')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l221" name="l221">221</a></td><td><pre><span class="insertion">+</span><span class="insertion"> except KeyboardInterrupt:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l222" name="l222">222</a></td><td><pre><span class="insertion">+</span><span class="insertion"> sys.exit()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l223" name="l223">223</a></td><td><pre><span class="bold">diff --git a/booster/functions.py b/booster/functions.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l224" name="l224">224</a></td><td><pre><span class="bold">new file mode 100644</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l225" name="l225">225</a></td><td><pre><span class="bold">index 0000000..956cb06</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l226" name="l226">226</a></td><td><pre><span class="bold">--- /dev/null</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l227" name="l227">227</a></td><td><pre><span class="bold">+++ b/booster/functions.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l228" name="l228">228</a></td><td><pre><span class="hunk">@@ -0,0 +1,23 @@</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l229" name="l229">229</a></td><td><pre><span class="insertion">+</span><span class="insertion">#!/usr/bin/env python</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l230" name="l230">230</a></td><td><pre><span class="insertion">+</span><span class="insertion"># Booster Twitter Bot - Developed by acidvegas in Python (https://acid.vegas/booster)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l231" name="l231">231</a></td><td><pre><span class="insertion">+</span><span class="insertion"># functions.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l232" name="l232">232</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l233" name="l233">233</a></td><td><pre><span class="insertion">+</span><span class="insertion">import datetime</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l234" name="l234">234</a></td><td><pre><span class="insertion">+</span><span class="insertion">import random</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l235" name="l235">235</a></td><td><pre><span class="insertion">+</span><span class="insertion">import urllib.request</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l236" name="l236">236</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l237" name="l237">237</a></td><td><pre><span class="insertion">+</span><span class="insertion">def get_day():</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l238" name="l238">238</a></td><td><pre><span class="insertion">+</span><span class="insertion"> return datetime.datetime.today().weekday()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l239" name="l239">239</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l240" name="l240">240</a></td><td><pre><span class="insertion">+</span><span class="insertion">def get_source(url):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l241" name="l241">241</a></td><td><pre><span class="insertion">+</span><span class="insertion"> req = urllib.request.Request(url)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l242" name="l242">242</a></td><td><pre><span class="insertion">+</span><span class="insertion"> req.add_header('User-Agent', 'Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l243" name="l243">243</a></td><td><pre><span class="insertion">+</span><span class="insertion"> source = urllib.request.urlopen(req, timeout=10)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l244" name="l244">244</a></td><td><pre><span class="insertion">+</span><span class="insertion"> charset = source.headers.get_content_charset()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l245" name="l245">245</a></td><td><pre><span class="insertion">+</span><span class="insertion"> if charset:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l246" name="l246">246</a></td><td><pre><span class="insertion">+</span><span class="insertion"> return source.read().decode(charset)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l247" name="l247">247</a></td><td><pre><span class="insertion">+</span><span class="insertion"> else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l248" name="l248">248</a></td><td><pre><span class="insertion">+</span><span class="insertion"> return source.read().decode()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l249" name="l249">249</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l250" name="l250">250</a></td><td><pre><span class="insertion">+</span><span class="insertion">def random_int(min, max):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l251" name="l251">251</a></td><td><pre><span class="insertion">+</span><span class="insertion"> return random.randint(min, max)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l252" name="l252">252</a></td><td><pre><span class="bold">diff --git a/booster/twitter.py b/booster/twitter.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l253" name="l253">253</a></td><td><pre><span class="bold">new file mode 100644</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l254" name="l254">254</a></td><td><pre><span class="bold">index 0000000..e2ba905</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l255" name="l255">255</a></td><td><pre><span class="bold">--- /dev/null</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l256" name="l256">256</a></td><td><pre><span class="bold">+++ b/booster/twitter.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l257" name="l257">257</a></td><td><pre><span class="hunk">@@ -0,0 +1,168 @@</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l258" name="l258">258</a></td><td><pre><span class="insertion">+</span><span class="insertion">#!/usr/bin/env python</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l259" name="l259">259</a></td><td><pre><span class="insertion">+</span><span class="insertion"># Booster Twitter Bot - Developed by acidvegas in Python (https://acid.vegas/booster)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l260" name="l260">260</a></td><td><pre><span class="insertion">+</span><span class="insertion"># twitter.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l261" name="l261">261</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l262" name="l262">262</a></td><td><pre><span class="insertion">+</span><span class="insertion">import random</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l263" name="l263">263</a></td><td><pre><span class="insertion">+</span><span class="insertion">import threading</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l264" name="l264">264</a></td><td><pre><span class="insertion">+</span><span class="insertion">import time</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l265" name="l265">265</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l266" name="l266">266</a></td><td><pre><span class="insertion">+</span><span class="insertion">import tweepy</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l267" name="l267">267</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l268" name="l268">268</a></td><td><pre><span class="insertion">+</span><span class="insertion">import config</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l269" name="l269">269</a></td><td><pre><span class="insertion">+</span><span class="insertion">import debug</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l270" name="l270">270</a></td><td><pre><span class="insertion">+</span><span class="insertion">import functions</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l271" name="l271">271</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l272" name="l272">272</a></td><td><pre><span class="insertion">+</span><span class="insertion">class Booster(object):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l273" name="l273">273</a></td><td><pre><span class="insertion">+</span><span class="insertion"> def __init__(self):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l274" name="l274">274</a></td><td><pre><span class="insertion">+</span><span class="insertion"> self.api = None</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l275" name="l275">275</a></td><td><pre><span class="insertion">+</span><span class="insertion"> self.me = None</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l276" name="l276">276</a></td><td><pre><span class="insertion">+</span><span class="insertion"> self.favorites = 0</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l277" name="l277">277</a></td><td><pre><span class="insertion">+</span><span class="insertion"> self.max_favorites = config.max_favorites</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l278" name="l278">278</a></td><td><pre><span class="insertion">+</span><span class="insertion"> self.follows = 0</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l279" name="l279">279</a></td><td><pre><span class="insertion">+</span><span class="insertion"> self.max_follows = config.max_follows</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l280" name="l280">280</a></td><td><pre><span class="insertion">+</span><span class="insertion"> self.messages = 0</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l281" name="l281">281</a></td><td><pre><span class="insertion">+</span><span class="insertion"> self.max_messages = config.max_messages</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l282" name="l282">282</a></td><td><pre><span class="insertion">+</span><span class="insertion"> self.tweets = 0</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l283" name="l283">283</a></td><td><pre><span class="insertion">+</span><span class="insertion"> self.max_tweets = config.max_tweets</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l284" name="l284">284</a></td><td><pre><span class="insertion">+</span><span class="insertion"> self.unfollows = 0</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l285" name="l285">285</a></td><td><pre><span class="insertion">+</span><span class="insertion"> self.max_unfollows = config.max_unfollows</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l286" name="l286">286</a></td><td><pre><span class="insertion">+</span><span class="insertion"> self.send_message = config.send_message</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l287" name="l287">287</a></td><td><pre><span class="insertion">+</span><span class="insertion"> self.message = config.message</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l288" name="l288">288</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l289" name="l289">289</a></td><td><pre><span class="insertion">+</span><span class="insertion"> def run(self):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l290" name="l290">290</a></td><td><pre><span class="insertion">+</span><span class="insertion"> self.login()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l291" name="l291">291</a></td><td><pre><span class="insertion">+</span><span class="insertion"> threading.Thread(target=self.loop_boost).start()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l292" name="l292">292</a></td><td><pre><span class="insertion">+</span><span class="insertion"> threading.Thread(target=self.loop_favorite).start()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l293" name="l293">293</a></td><td><pre><span class="insertion">+</span><span class="insertion"> threading.Thread(target=self.loop_follow).start()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l294" name="l294">294</a></td><td><pre><span class="insertion">+</span><span class="insertion"> threading.Thread(target=self.loop_search).start()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l295" name="l295">295</a></td><td><pre><span class="insertion">+</span><span class="insertion"># threading.Thread(target=self.loop_trend).start()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l296" name="l296">296</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l297" name="l297">297</a></td><td><pre><span class="insertion">+</span><span class="insertion"> def login(self):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l298" name="l298">298</a></td><td><pre><span class="insertion">+</span><span class="insertion"> try:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l299" name="l299">299</a></td><td><pre><span class="insertion">+</span><span class="insertion"> auth = tweepy.OAuthHandler(config.consumer_key, config.consumer_secret)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l300" name="l300">300</a></td><td><pre><span class="insertion">+</span><span class="insertion"> auth.set_access_token(config.access_token, config.access_token_secret)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l301" name="l301">301</a></td><td><pre><span class="insertion">+</span><span class="insertion"> self.api = tweepy.API(auth, wait_on_rate_limit=True, wait_on_rate_limit_notify=True)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l302" name="l302">302</a></td><td><pre><span class="insertion">+</span><span class="insertion"> self.me = self.api.me()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l303" name="l303">303</a></td><td><pre><span class="insertion">+</span><span class="insertion"> except tweepy.TweepError as ex:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l304" name="l304">304</a></td><td><pre><span class="insertion">+</span><span class="insertion"> debug.error_exit('Failed to login to Twitter! ({0})'.format(str(ex)))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l305" name="l305">305</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l306" name="l306">306</a></td><td><pre><span class="insertion">+</span><span class="insertion"> def loop_boost(self):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l307" name="l307">307</a></td><td><pre><span class="insertion">+</span><span class="insertion"> while True:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l308" name="l308">308</a></td><td><pre><span class="insertion">+</span><span class="insertion"> try:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l309" name="l309">309</a></td><td><pre><span class="insertion">+</span><span class="insertion"> if 'boost_tweet' in locals(): self.api.destroy_status(boost_tweet.id)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l310" name="l310">310</a></td><td><pre><span class="insertion">+</span><span class="insertion"> boost_tweet = self.api.update_status('RT for followers! #' + ' #'.join(config.boost_keywords))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l311" name="l311">311</a></td><td><pre><span class="insertion">+</span><span class="insertion"> self.tweets += 1</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l312" name="l312">312</a></td><td><pre><span class="insertion">+</span><span class="insertion"> debug.alert('Re-posted boost tweet.')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l313" name="l313">313</a></td><td><pre><span class="insertion">+</span><span class="insertion"> except tweepy.TweepError as ex:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l314" name="l314">314</a></td><td><pre><span class="insertion">+</span><span class="insertion"> debug.error('Error occured in the boost loop', ex)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l315" name="l315">315</a></td><td><pre><span class="insertion">+</span><span class="insertion"> finally:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l316" name="l316">316</a></td><td><pre><span class="insertion">+</span><span class="insertion"> random.shuffle(config.boost_keywords)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l317" name="l317">317</a></td><td><pre><span class="insertion">+</span><span class="insertion"> time.sleep(60*5)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l318" name="l318">318</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l319" name="l319">319</a></td><td><pre><span class="insertion">+</span><span class="insertion"> def loop_favorite(self):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l320" name="l320">320</a></td><td><pre><span class="insertion">+</span><span class="insertion"> while True:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l321" name="l321">321</a></td><td><pre><span class="insertion">+</span><span class="insertion"> try:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l322" name="l322">322</a></td><td><pre><span class="insertion">+</span><span class="insertion"> for tweet in tweepy.Cursor(api.home_timeline, exclude_replies=True).items(50):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l323" name="l323">323</a></td><td><pre><span class="insertion">+</span><span class="insertion"> if tweet.user.screen_name != me.screen_name:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l324" name="l324">324</a></td><td><pre><span class="insertion">+</span><span class="insertion"> if not tweet.favorited:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l325" name="l325">325</a></td><td><pre><span class="insertion">+</span><span class="insertion"> if random.choice((True, False, False, False, False)):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l326" name="l326">326</a></td><td><pre><span class="insertion">+</span><span class="insertion"> api.create_favorite(tweet.id)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l327" name="l327">327</a></td><td><pre><span class="insertion">+</span><span class="insertion"> self.favorites += 1</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l328" name="l328">328</a></td><td><pre><span class="insertion">+</span><span class="insertion"> debug.alert('Favorited a friends tweet!')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l329" name="l329">329</a></td><td><pre><span class="insertion">+</span><span class="insertion"> time.sleep(30)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l330" name="l330">330</a></td><td><pre><span class="insertion">+</span><span class="insertion"> except tweepy.TweepError as ex:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l331" name="l331">331</a></td><td><pre><span class="insertion">+</span><span class="insertion"> debug.error('Error occured in the favorite loop!', ex)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l332" name="l332">332</a></td><td><pre><span class="insertion">+</span><span class="insertion"> finally:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l333" name="l333">333</a></td><td><pre><span class="insertion">+</span><span class="insertion"> time.sleep(60*15)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l334" name="l334">334</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l335" name="l335">335</a></td><td><pre><span class="insertion">+</span><span class="insertion"> def loop_follow(self):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l336" name="l336">336</a></td><td><pre><span class="insertion">+</span><span class="insertion"> while True:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l337" name="l337">337</a></td><td><pre><span class="insertion">+</span><span class="insertion"> try:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l338" name="l338">338</a></td><td><pre><span class="insertion">+</span><span class="insertion"> followers = api.followers_ids(me.screen_name)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l339" name="l339">339</a></td><td><pre><span class="insertion">+</span><span class="insertion"> friends = api.friends_ids(me.screen_name)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l340" name="l340">340</a></td><td><pre><span class="insertion">+</span><span class="insertion"> non_friends = [friend for friend in followers if friend not in friends]</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l341" name="l341">341</a></td><td><pre><span class="insertion">+</span><span class="insertion"> debug.action('Following back {0} supporters...'.format(len(non_friends)))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l342" name="l342">342</a></td><td><pre><span class="insertion">+</span><span class="insertion"> for follower in non_friends:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l343" name="l343">343</a></td><td><pre><span class="insertion">+</span><span class="insertion"> api.create_friendship(follower)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l344" name="l344">344</a></td><td><pre><span class="insertion">+</span><span class="insertion"> self.follows += 1</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l345" name="l345">345</a></td><td><pre><span class="insertion">+</span><span class="insertion"> debug.alert('Followed back a follower!')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l346" name="l346">346</a></td><td><pre><span class="insertion">+</span><span class="insertion"> if self.follows &gt;= self.max_follows:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l347" name="l347">347</a></td><td><pre><span class="insertion">+</span><span class="insertion"> break</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l348" name="l348">348</a></td><td><pre><span class="insertion">+</span><span class="insertion"> if self.send_message:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l349" name="l349">349</a></td><td><pre><span class="insertion">+</span><span class="insertion"> api.send_direct_message(screen_name=follower, text=self.message)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l350" name="l350">350</a></td><td><pre><span class="insertion">+</span><span class="insertion"> time.sleep(30)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l351" name="l351">351</a></td><td><pre><span class="insertion">+</span><span class="insertion"> except tweepy.TweepError as ex:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l352" name="l352">352</a></td><td><pre><span class="insertion">+</span><span class="insertion"> debug.error('Error occured in the follow loop!', ex)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l353" name="l353">353</a></td><td><pre><span class="insertion">+</span><span class="insertion"> finally:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l354" name="l354">354</a></td><td><pre><span class="insertion">+</span><span class="insertion"> time.sleep(60*15)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l355" name="l355">355</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l356" name="l356">356</a></td><td><pre><span class="insertion">+</span><span class="insertion"> def loop_search(self):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l357" name="l357">357</a></td><td><pre><span class="insertion">+</span><span class="insertion"> while True:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l358" name="l358">358</a></td><td><pre><span class="insertion">+</span><span class="insertion"> try:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l359" name="l359">359</a></td><td><pre><span class="insertion">+</span><span class="insertion"> query = random.choice(config.boost_keywords)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l360" name="l360">360</a></td><td><pre><span class="insertion">+</span><span class="insertion"> for item in api.search(q='#' + query, count=50, lang='en', result_type='recent'):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l361" name="l361">361</a></td><td><pre><span class="insertion">+</span><span class="insertion"> if not item.user.following and not item.favorited:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l362" name="l362">362</a></td><td><pre><span class="insertion">+</span><span class="insertion"> try:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l363" name="l363">363</a></td><td><pre><span class="insertion">+</span><span class="insertion"> api.create_favorite(item.id)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l364" name="l364">364</a></td><td><pre><span class="insertion">+</span><span class="insertion"> api.create_friendship(item.user.screen_name)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l365" name="l365">365</a></td><td><pre><span class="insertion">+</span><span class="insertion"> self.favorites += 1</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l366" name="l366">366</a></td><td><pre><span class="insertion">+</span><span class="insertion"> self.follows += 1</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l367" name="l367">367</a></td><td><pre><span class="insertion">+</span><span class="insertion"> debug.alert('Followed a booster twitter!')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l368" name="l368">368</a></td><td><pre><span class="insertion">+</span><span class="insertion"> except tweepy.TweepError as ex:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l369" name="l369">369</a></td><td><pre><span class="insertion">+</span><span class="insertion"> debug.error('Unknown error occured in the search loop!', ex)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l370" name="l370">370</a></td><td><pre><span class="insertion">+</span><span class="insertion"> time.sleep(30)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l371" name="l371">371</a></td><td><pre><span class="insertion">+</span><span class="insertion"> except tweepy.TweepError as ex:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l372" name="l372">372</a></td><td><pre><span class="insertion">+</span><span class="insertion"> debug.error('Error occured in the search loop!', ex)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l373" name="l373">373</a></td><td><pre><span class="insertion">+</span><span class="insertion"> finally:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l374" name="l374">374</a></td><td><pre><span class="insertion">+</span><span class="insertion"> time.sleep(60*15)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l375" name="l375">375</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l376" name="l376">376</a></td><td><pre><span class="insertion">+</span><span class="insertion"> def loop_trend(self):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l377" name="l377">377</a></td><td><pre><span class="insertion">+</span><span class="insertion"> while True:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l378" name="l378">378</a></td><td><pre><span class="insertion">+</span><span class="insertion"> try:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l379" name="l379">379</a></td><td><pre><span class="insertion">+</span><span class="insertion"> trends = self.api.trends_place(str(config.woeid))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l380" name="l380">380</a></td><td><pre><span class="insertion">+</span><span class="insertion"> hashtags = [x['name'] for x in trends[0]['trends'] if x['name'].startswith('#')]</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l381" name="l381">381</a></td><td><pre><span class="insertion">+</span><span class="insertion"> for trend in hashtags:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l382" name="l382">382</a></td><td><pre><span class="insertion">+</span><span class="insertion"> for item in self.api.search(q=trend, count=5, lang='en', result_type='top'):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l383" name="l383">383</a></td><td><pre><span class="insertion">+</span><span class="insertion"> #self.api.update_status(item.tweet) # FIX THIS PART</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l384" name="l384">384</a></td><td><pre><span class="insertion">+</span><span class="insertion"> time.sleep(30)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l385" name="l385">385</a></td><td><pre><span class="insertion">+</span><span class="insertion"> except tweepy.TweepError as ex:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l386" name="l386">386</a></td><td><pre><span class="insertion">+</span><span class="insertion"> debug.error('Error occured in the trend loop!', ex)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l387" name="l387">387</a></td><td><pre><span class="insertion">+</span><span class="insertion"> finally:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l388" name="l388">388</a></td><td><pre><span class="insertion">+</span><span class="insertion"> time.sleep(60*15)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l389" name="l389">389</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l390" name="l390">390</a></td><td><pre><span class="insertion">+</span><span class="insertion"> def loop_unfollow(self):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l391" name="l391">391</a></td><td><pre><span class="insertion">+</span><span class="insertion"> try:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l392" name="l392">392</a></td><td><pre><span class="insertion">+</span><span class="insertion"> followers = self.api.followers_ids(self.me.screen_name)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l393" name="l393">393</a></td><td><pre><span class="insertion">+</span><span class="insertion"> friends = self.api.friends_ids(self.me.screen_name)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l394" name="l394">394</a></td><td><pre><span class="insertion">+</span><span class="insertion"> non_friends = [friend for friend in friends if friend not in followers]</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l395" name="l395">395</a></td><td><pre><span class="insertion">+</span><span class="insertion"> non_friends.reverse()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l396" name="l396">396</a></td><td><pre><span class="insertion">+</span><span class="insertion"> debug.action('Unfollowing {0} unsupporting friends...'.format(len(non_friends)))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l397" name="l397">397</a></td><td><pre><span class="insertion">+</span><span class="insertion"> for friend in non_friends:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l398" name="l398">398</a></td><td><pre><span class="insertion">+</span><span class="insertion"> self.api.destroy_friendship(friend)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l399" name="l399">399</a></td><td><pre><span class="insertion">+</span><span class="insertion"> self.unfollows += 1</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l400" name="l400">400</a></td><td><pre><span class="insertion">+</span><span class="insertion"> debug.alert('Unfollowed an unsupporting friend!')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l401" name="l401">401</a></td><td><pre><span class="insertion">+</span><span class="insertion"> if self.unfollows == self.max_unfollows:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l402" name="l402">402</a></td><td><pre><span class="insertion">+</span><span class="insertion"> break</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l403" name="l403">403</a></td><td><pre><span class="insertion">+</span><span class="insertion"> else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l404" name="l404">404</a></td><td><pre><span class="insertion">+</span><span class="insertion"> time.sleep(60*functions.random_int(10,15))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l405" name="l405">405</a></td><td><pre><span class="insertion">+</span><span class="insertion"> except tweepy.TweepError as ex:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l406" name="l406">406</a></td><td><pre><span class="insertion">+</span><span class="insertion"> debug.error('Error occured in the unfollow loop!', ex)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l407" name="l407">407</a></td><td><pre><span class="insertion">+</span><span class="insertion"> finally:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l408" name="l408">408</a></td><td><pre><span class="insertion">+</span><span class="insertion"> self.unfollows = 0</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l409" name="l409">409</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l410" name="l410">410</a></td><td><pre><span class="insertion">+</span><span class="insertion"> def ratio_check(self):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l411" name="l411">411</a></td><td><pre><span class="insertion">+</span><span class="insertion"> if self.follows &gt;= max_follows:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l412" name="l412">412</a></td><td><pre><span class="insertion">+</span><span class="insertion"> time.sleep(86400)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l413" name="l413">413</a></td><td><pre><span class="insertion">+</span><span class="insertion"> if me.friends_count &gt;= 2000:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l414" name="l414">414</a></td><td><pre><span class="insertion">+</span><span class="insertion"> ratio = me.friends_count + (me.followers_count/10)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l415" name="l415">415</a></td><td><pre><span class="insertion">+</span><span class="insertion"> if me.friends_count &gt;= ratio:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l416" name="l416">416</a></td><td><pre><span class="insertion">+</span><span class="insertion"> debug.action('Following to follower ratio is off! Starting the unfollow loop...')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l417" name="l417">417</a></td><td><pre><span class="insertion">+</span><span class="insertion"> unfollow_loop()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l418" name="l418">418</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l419" name="l419">419</a></td><td><pre><span class="insertion">+</span><span class="insertion"> def stats(self):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l420" name="l420">420</a></td><td><pre><span class="insertion">+</span><span class="insertion"> debug.action('SceenName : ' + self.me.screen_name)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l421" name="l421">421</a></td><td><pre><span class="insertion">+</span><span class="insertion"> debug.action('Registered : ' + self.me.created_at)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l422" name="l422">422</a></td><td><pre><span class="insertion">+</span><span class="insertion"> debug.action('Favorites : ' + self.me.favourites_count)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l423" name="l423">423</a></td><td><pre><span class="insertion">+</span><span class="insertion"> debug.action('Following : ' + self.me.friends_count)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l424" name="l424">424</a></td><td><pre><span class="insertion">+</span><span class="insertion"> debug.action('Followers : ' + self.me.followers_count)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l425" name="l425">425</a></td><td><pre><span class="insertion">+</span><span class="insertion"> debug.action('Tweets : ' + self.me.statuses_count)</span></pre></td></tr>
</table>
<div id="footer">site generated by <a href="https://github.com/acidvegas/stagit" target="_blank">stagit</a> on <a href="#">05/03/20</a></div>

View File

@ -1,550 +0,0 @@
<!doctype html>
<link rel="stylesheet" href="../../style.css">
<title>booster :: 7c68368</title>
<h1><a href="../index.html" title="Back to Repository">&larr;&#xFE0E;</a> booster :: 7c68368</h1>
<hr>
<table id="main" cellpadding="0" cellspacing="0">
<tr class="item"><td class="linenumber"><a href="#l1" name="l1">1</a></td><td><pre><span class="commit">commit 7c683687119d32dec413d005c0d3e76c69a25b02</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l2" name="l2">2</a></td><td><pre>Author: acidvegas &lt;acid.vegas@acid.vegas&gt;</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l3" name="l3">3</a></td><td><pre>Date: Thu Apr 9 21:54:54 2020 -0400</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l4" name="l4">4</a></td><td><pre></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l5" name="l5">5</a></td><td><pre> Revived and fixed a lot of things</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l6" name="l6">6</a></td><td><pre>---</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l7" name="l7">7</a></td><td><pre> LICENSE | 2 <span class="insertion">+</span><span class="deletion">-</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l8" name="l8">8</a></td><td><pre> README.md | 12 <span class="insertion">+++</span><span class="deletion">-</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l9" name="l9">9</a></td><td><pre> booster/booster.py | 153 <span class="insertion">++++++++++++++++++++++++++++++++++++++++++</span><span class="deletion">----</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l10" name="l10">10</a></td><td><pre> booster/config.py | 35 <span class="insertion">+++++</span><span class="deletion">------</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l11" name="l11">11</a></td><td><pre> booster/debug.py | 70 <span class="deletion">---------------------</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l12" name="l12">12</a></td><td><pre> booster/functions.py | 21 <span class="deletion">-------</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l13" name="l13">13</a></td><td><pre> booster/twitter.py | 168 <span class="deletion">---------------------------------------------------</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l14" name="l14">14</a></td><td><pre> 7 files changed, 167 insertions(+), 294 deletions(-)</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l15" name="l15">15</a></td><td><pre></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l16" name="l16">16</a></td><td><pre><span class="bold">diff --git a/LICENSE b/LICENSE</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l17" name="l17">17</a></td><td><pre><span class="bold">index 69997e8..d521bd0 100644</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l18" name="l18">18</a></td><td><pre><span class="bold">--- a/LICENSE</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l19" name="l19">19</a></td><td><pre><span class="bold">+++ b/LICENSE</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l20" name="l20">20</a></td><td><pre><span class="hunk">@@ -1,6 +1,6 @@</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l21" name="l21">21</a></td><td><pre> ISC License</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l22" name="l22">22</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l23" name="l23">23</a></td><td><pre><span class="deletion">-Copyright (c) 2019, acidvegas &lt;acid.vegas@acid.vegas&gt;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l24" name="l24">24</a></td><td><pre><span class="insertion">+</span><span class="insertion">Copyright (c) 2020, acidvegas &lt;acid.vegas@acid.vegas&gt;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l25" name="l25">25</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l26" name="l26">26</a></td><td><pre> Permission to use, copy, modify, and/or distribute this software for any</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l27" name="l27">27</a></td><td><pre> purpose with or without fee is hereby granted, provided that the above</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l28" name="l28">28</a></td><td><pre><span class="bold">diff --git a/README.md b/README.md</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l29" name="l29">29</a></td><td><pre><span class="bold">index a2a5e96..327f18d 100644</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l30" name="l30">30</a></td><td><pre><span class="bold">--- a/README.md</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l31" name="l31">31</a></td><td><pre><span class="bold">+++ b/README.md</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l32" name="l32">32</a></td><td><pre><span class="hunk">@@ -1,6 +1,15 @@</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l33" name="l33">33</a></td><td><pre><span class="insertion">+</span><span class="insertion"># Booster</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l34" name="l34">34</a></td><td><pre><span class="insertion">+</span><span class="insertion">&gt; twitter bot that builds followers</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l35" name="l35">35</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l36" name="l36">36</a></td><td><pre> ## Requirments</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l37" name="l37">37</a></td><td><pre><span class="insertion">+</span><span class="insertion">- [Python](https://www.python.org/downloads/) *(**Note:** This script was developed to be used with the latest version of Python)*</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l38" name="l38">38</a></td><td><pre> - [Tweepy](http://pypi.python.org/pypi/tweepy)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l39" name="l39">39</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l40" name="l40">40</a></td><td><pre><span class="insertion">+</span><span class="insertion">## Information</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l41" name="l41">41</a></td><td><pre><span class="insertion">+</span><span class="insertion">This bot will build you followers on Twitter automatically by doing a number of things. Every 5 minutes the bot will tweet a status with a bunch of &quot;follow-for-follow&quot; type hashtags. This way anyone searching for those hashtags to gain follows will always see your tweet as one of the most recent. Before it posts a new tweet, it will delete the previous tweet, so you dont spam your followers. All of the hashtags the bot tweets for followers are also searched for on Twitter and the most recent are followed and favorited. It will favorite tweets of the people you follow. Anyone that follows your Twitter will be followed back, and optionally messaged. People who you follow that are not following you back are unfollowed eventually. Trending tweets are randomly stolen and tweeted as your own.</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l42" name="l42">42</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l43" name="l43">43</a></td><td><pre><span class="insertion">+</span><span class="insertion">Everything this bot does is extremely throttles to prevent getting your account suspended. It is meant to be running 24/7 without any interaction needed.</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l44" name="l44">44</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l45" name="l45">45</a></td><td><pre> ## Instructions</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l46" name="l46">46</a></td><td><pre> Create a Twitter account &amp; [sign up](http://dev.twitter.com/apps/new) for a new developer application.</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l47" name="l47">47</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l48" name="l48">48</a></td><td><pre><span class="hunk">@@ -18,6 +27,5 @@</span> </span>Edit your `config.py` and change the Twitter API settings.</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l49" name="l49">49</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l50" name="l50">50</a></td><td><pre> ## Mirrors</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l51" name="l51">51</a></td><td><pre> - [acid.vegas](https://acid.vegas/booster) *(main)*</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l52" name="l52">52</a></td><td><pre><span class="deletion">-- [SuperNETs](https://git.supernets.org/acidvegas/booster)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l53" name="l53">53</a></td><td><pre> - [GitHub](https://github.com/acidvegas/booster)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l54" name="l54">54</a></td><td><pre><span class="deletion">-- [GitLab](https://gitlab.com/acidvegas/booster)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l55" name="l55">55</a></td><td><pre><span class="insertion">+</span><span class="insertion">- [GitLab](https://gitlab.com/acidvegas/booster)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l56" name="l56">56</a></td><td><pre><span class="bold">diff --git a/booster/booster.py b/booster/booster.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l57" name="l57">57</a></td><td><pre><span class="bold">index 7176c93..675cc90 100644</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l58" name="l58">58</a></td><td><pre><span class="bold">--- a/booster/booster.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l59" name="l59">59</a></td><td><pre><span class="bold">+++ b/booster/booster.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l60" name="l60">60</a></td><td><pre><span class="hunk">@@ -2,19 +2,148 @@</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l61" name="l61">61</a></td><td><pre> # Booster Twitter Bot - Developed by acidvegas in Python (https://acid.vegas/booster)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l62" name="l62">62</a></td><td><pre> # booster.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l63" name="l63">63</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l64" name="l64">64</a></td><td><pre><span class="insertion">+</span><span class="insertion">import random</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l65" name="l65">65</a></td><td><pre><span class="insertion">+</span><span class="insertion">import threading</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l66" name="l66">66</a></td><td><pre><span class="insertion">+</span><span class="insertion">import time</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l67" name="l67">67</a></td><td><pre> import sys</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l68" name="l68">68</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l69" name="l69">69</a></td><td><pre> sys.dont_write_bytecode = True</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l70" name="l70">70</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l71" name="l71">71</a></td><td><pre><span class="deletion">-import debug</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l72" name="l72">72</a></td><td><pre><span class="deletion">-</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l73" name="l73">73</a></td><td><pre><span class="deletion">-debug.info()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l74" name="l74">74</a></td><td><pre><span class="deletion">-if not debug.check_version(3):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l75" name="l75">75</a></td><td><pre><span class="deletion">- debug.error_exit('Requires Python version 3 to run!')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l76" name="l76">76</a></td><td><pre><span class="deletion">-if debug.check_privileges():</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l77" name="l77">77</a></td><td><pre><span class="deletion">- debug.error_exit('Do not run as admin/root!')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l78" name="l78">78</a></td><td><pre><span class="deletion">-debug.check_imports()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l79" name="l79">79</a></td><td><pre><span class="deletion">-debug.check_config()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l80" name="l80">80</a></td><td><pre><span class="deletion">-import twitter</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l81" name="l81">81</a></td><td><pre><span class="deletion">-twitter.Booster().run()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l82" name="l82">82</a></td><td><pre><span class="deletion">-debug.keep_alive()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l83" name="l83">83</a></td><td><pre><span class="insertion">+</span><span class="insertion">import config</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l84" name="l84">84</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l85" name="l85">85</a></td><td><pre><span class="insertion">+</span><span class="insertion">class Booster(object):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l86" name="l86">86</a></td><td><pre><span class="insertion">+</span> <span class="insertion">def __init__(self):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l87" name="l87">87</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.api = None</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l88" name="l88">88</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.me = None</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l89" name="l89">89</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l90" name="l90">90</a></td><td><pre><span class="insertion">+</span> <span class="insertion">def run(self):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l91" name="l91">91</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.login()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l92" name="l92">92</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.stats()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l93" name="l93">93</a></td><td><pre><span class="insertion">+</span> <span class="insertion">threading.Thread(target=self.loop_boost).start()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l94" name="l94">94</a></td><td><pre><span class="insertion">+</span> <span class="insertion">threading.Thread(target=self.loop_favorite).start()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l95" name="l95">95</a></td><td><pre><span class="insertion">+</span> <span class="insertion">threading.Thread(target=self.loop_follow).start()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l96" name="l96">96</a></td><td><pre><span class="insertion">+</span> <span class="insertion">threading.Thread(target=self.loop_search).start()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l97" name="l97">97</a></td><td><pre><span class="insertion">+</span> <span class="insertion">threading.Thread(target=self.loop_trend).start()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l98" name="l98">98</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l99" name="l99">99</a></td><td><pre><span class="insertion">+</span> <span class="insertion">def login(self):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l100" name="l100">100</a></td><td><pre><span class="insertion">+</span> <span class="insertion">try:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l101" name="l101">101</a></td><td><pre><span class="insertion">+</span> <span class="insertion">auth = tweepy.OAuthHandler(config.api.consumer_key, config.api.consumer_secret)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l102" name="l102">102</a></td><td><pre><span class="insertion">+</span> <span class="insertion">auth.set_access_token(config.api.access_token, config.api.access_token_secret)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l103" name="l103">103</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.api = tweepy.API(auth, wait_on_rate_limit=True, wait_on_rate_limit_notify=True)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l104" name="l104">104</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.me = self.api.me()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l105" name="l105">105</a></td><td><pre><span class="insertion">+</span> <span class="insertion">except tweepy.TweepError as ex:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l106" name="l106">106</a></td><td><pre><span class="insertion">+</span> <span class="insertion">raise SystemExit(f'Failed to login to Twitter! ({ex!s})')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l107" name="l107">107</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l108" name="l108">108</a></td><td><pre><span class="insertion">+</span> <span class="insertion">def loop_boost(self):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l109" name="l109">109</a></td><td><pre><span class="insertion">+</span> <span class="insertion">while True:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l110" name="l110">110</a></td><td><pre><span class="insertion">+</span> <span class="insertion">try:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l111" name="l111">111</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if 'boost_tweet' in locals():</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l112" name="l112">112</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.api.destroy_status(boost_tweet.id)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l113" name="l113">113</a></td><td><pre><span class="insertion">+</span> <span class="insertion">boost_tweet = self.api.update_status('RT for followers! #' + ' #'.join(random.sample(config.settings.keywords, len(config.settings.keywords))))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l114" name="l114">114</a></td><td><pre><span class="insertion">+</span> <span class="insertion">print('[+] - Reposted boost tweet.')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l115" name="l115">115</a></td><td><pre><span class="insertion">+</span> <span class="insertion">except tweepy.TweepError as ex:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l116" name="l116">116</a></td><td><pre><span class="insertion">+</span> <span class="insertion">print(f'[!] - Error occured in the boost loop ({ex!s})')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l117" name="l117">117</a></td><td><pre><span class="insertion">+</span> <span class="insertion">finally:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l118" name="l118">118</a></td><td><pre><span class="insertion">+</span> <span class="insertion">time.sleep(60*5)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l119" name="l119">119</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l120" name="l120">120</a></td><td><pre><span class="insertion">+</span> <span class="insertion">def loop_favorite(self):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l121" name="l121">121</a></td><td><pre><span class="insertion">+</span> <span class="insertion">while True:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l122" name="l122">122</a></td><td><pre><span class="insertion">+</span> <span class="insertion">try:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l123" name="l123">123</a></td><td><pre><span class="insertion">+</span> <span class="insertion">for tweet in tweepy.Cursor(self.api.home_timeline, exclude_replies=True).items(50):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l124" name="l124">124</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if tweet.user.screen_name != self.me.screen_name:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l125" name="l125">125</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if not tweet.favorited:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l126" name="l126">126</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if random.choice((True, False, False, False, False)):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l127" name="l127">127</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.api.create_favorite(tweet.id)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l128" name="l128">128</a></td><td><pre><span class="insertion">+</span> <span class="insertion">print('[+] - Favorited a friends tweet!')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l129" name="l129">129</a></td><td><pre><span class="insertion">+</span> <span class="insertion">time.sleep(60*60)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l130" name="l130">130</a></td><td><pre><span class="insertion">+</span> <span class="insertion">except tweepy.TweepError as ex:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l131" name="l131">131</a></td><td><pre><span class="insertion">+</span> <span class="insertion">print(f'[!] - Error occured in the favorite loop! ({ex!s})')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l132" name="l132">132</a></td><td><pre><span class="insertion">+</span> <span class="insertion">finally:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l133" name="l133">133</a></td><td><pre><span class="insertion">+</span> <span class="insertion">time.sleep(60*15)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l134" name="l134">134</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l135" name="l135">135</a></td><td><pre><span class="insertion">+</span> <span class="insertion">def loop_follow(self):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l136" name="l136">136</a></td><td><pre><span class="insertion">+</span> <span class="insertion">while True:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l137" name="l137">137</a></td><td><pre><span class="insertion">+</span> <span class="insertion">try:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l138" name="l138">138</a></td><td><pre><span class="insertion">+</span> <span class="insertion">followers = self.api.followers_ids(self.me.screen_name)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l139" name="l139">139</a></td><td><pre><span class="insertion">+</span> <span class="insertion">friends = self.api.friends_ids(self.me.screen_name)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l140" name="l140">140</a></td><td><pre><span class="insertion">+</span> <span class="insertion">non_friends = [friend for friend in followers if friend not in friends]</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l141" name="l141">141</a></td><td><pre><span class="insertion">+</span> <span class="insertion">print(f'[~] - Following back {len(non_friends)} supporters...')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l142" name="l142">142</a></td><td><pre><span class="insertion">+</span> <span class="insertion">for follower in non_friends:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l143" name="l143">143</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.api.create_friendship(follower)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l144" name="l144">144</a></td><td><pre><span class="insertion">+</span> <span class="insertion">print('[+] - Followed back a follower!')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l145" name="l145">145</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if config.settings.message:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l146" name="l146">146</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.api.send_direct_message(screen_name=follower, text=self.message)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l147" name="l147">147</a></td><td><pre><span class="insertion">+</span> <span class="insertion">time.sleep(60*60)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l148" name="l148">148</a></td><td><pre><span class="insertion">+</span> <span class="insertion">except tweepy.TweepError as ex:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l149" name="l149">149</a></td><td><pre><span class="insertion">+</span> <span class="insertion">print(f'[!] - Error occured in the follow loop! ({ex!s})')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l150" name="l150">150</a></td><td><pre><span class="insertion">+</span> <span class="insertion">finally:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l151" name="l151">151</a></td><td><pre><span class="insertion">+</span> <span class="insertion">time.sleep(60*15)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l152" name="l152">152</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l153" name="l153">153</a></td><td><pre><span class="insertion">+</span> <span class="insertion">def loop_search(self):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l154" name="l154">154</a></td><td><pre><span class="insertion">+</span> <span class="insertion">while True:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l155" name="l155">155</a></td><td><pre><span class="insertion">+</span> <span class="insertion">try:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l156" name="l156">156</a></td><td><pre><span class="insertion">+</span> <span class="insertion">query = random.choice(config.settings.keywords)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l157" name="l157">157</a></td><td><pre><span class="insertion">+</span> <span class="insertion">for item in self.api.search(q='#' + query, count=50, lang='en', result_type='recent'):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l158" name="l158">158</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if not item.user.following and not item.favorited:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l159" name="l159">159</a></td><td><pre><span class="insertion">+</span> <span class="insertion">try:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l160" name="l160">160</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.api.create_favorite(item.id)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l161" name="l161">161</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.api.create_friendship(item.user.screen_name)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l162" name="l162">162</a></td><td><pre><span class="insertion">+</span> <span class="insertion">print('[+] - Followed a booster twitter!')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l163" name="l163">163</a></td><td><pre><span class="insertion">+</span> <span class="insertion">except tweepy.TweepError as ex:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l164" name="l164">164</a></td><td><pre><span class="insertion">+</span> <span class="insertion">print('[!] - Unknown error occured in the search loop! ({ex!s})')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l165" name="l165">165</a></td><td><pre><span class="insertion">+</span> <span class="insertion">time.sleep(60*60)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l166" name="l166">166</a></td><td><pre><span class="insertion">+</span> <span class="insertion">except tweepy.TweepError as ex:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l167" name="l167">167</a></td><td><pre><span class="insertion">+</span> <span class="insertion">debug.error('Error occured in the search loop!', ex)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l168" name="l168">168</a></td><td><pre><span class="insertion">+</span> <span class="insertion">finally:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l169" name="l169">169</a></td><td><pre><span class="insertion">+</span> <span class="insertion">time.sleep(60*15)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l170" name="l170">170</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l171" name="l171">171</a></td><td><pre><span class="insertion">+</span> <span class="insertion">def loop_trend(self):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l172" name="l172">172</a></td><td><pre><span class="insertion">+</span> <span class="insertion">while True:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l173" name="l173">173</a></td><td><pre><span class="insertion">+</span> <span class="insertion">try:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l174" name="l174">174</a></td><td><pre><span class="insertion">+</span> <span class="insertion">trends = self.api.trends_place(str(config.settings.woeid))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l175" name="l175">175</a></td><td><pre><span class="insertion">+</span> <span class="insertion">hashtags = [x['name'] for x in trends[0]['trends'] if x['name'].startswith('#')]</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l176" name="l176">176</a></td><td><pre><span class="insertion">+</span> <span class="insertion">for trend in hashtags:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l177" name="l177">177</a></td><td><pre><span class="insertion">+</span> <span class="insertion">for item in self.api.search(q=trend, count=5, lang='en', result_type='top'):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l178" name="l178">178</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.api.update_status(item.tweet)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l179" name="l179">179</a></td><td><pre><span class="insertion">+</span> <span class="insertion">time.sleep(60*60)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l180" name="l180">180</a></td><td><pre><span class="insertion">+</span> <span class="insertion">except tweepy.TweepError as ex:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l181" name="l181">181</a></td><td><pre><span class="insertion">+</span> <span class="insertion">print('[!] - Error occured in the trend loop! ({ex!s})')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l182" name="l182">182</a></td><td><pre><span class="insertion">+</span> <span class="insertion">finally:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l183" name="l183">183</a></td><td><pre><span class="insertion">+</span> <span class="insertion">time.sleep(60*15)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l184" name="l184">184</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l185" name="l185">185</a></td><td><pre><span class="insertion">+</span> <span class="insertion">def loop_unfollow(self):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l186" name="l186">186</a></td><td><pre><span class="insertion">+</span> <span class="insertion">try:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l187" name="l187">187</a></td><td><pre><span class="insertion">+</span> <span class="insertion">followers = self.api.followers_ids(self.me.screen_name)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l188" name="l188">188</a></td><td><pre><span class="insertion">+</span> <span class="insertion">friends = self.api.friends_ids(self.me.screen_name)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l189" name="l189">189</a></td><td><pre><span class="insertion">+</span> <span class="insertion">non_friends = [friend for friend in friends if friend not in followers]</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l190" name="l190">190</a></td><td><pre><span class="insertion">+</span> <span class="insertion">non_friends.reverse()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l191" name="l191">191</a></td><td><pre><span class="insertion">+</span> <span class="insertion">print(f'[~] - Unfollowing {len(non_friends)} unsupporting friends...')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l192" name="l192">192</a></td><td><pre><span class="insertion">+</span> <span class="insertion">for friend in non_friends:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l193" name="l193">193</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.api.destroy_friendship(friend)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l194" name="l194">194</a></td><td><pre><span class="insertion">+</span> <span class="insertion">print('[+] - Unfollowed an unsupporting friend!')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l195" name="l195">195</a></td><td><pre><span class="insertion">+</span> <span class="insertion">time.sleep(60*30)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l196" name="l196">196</a></td><td><pre><span class="insertion">+</span> <span class="insertion">except tweepy.TweepError as ex:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l197" name="l197">197</a></td><td><pre><span class="insertion">+</span> <span class="insertion">debug.error('Error occured in the unfollow loop!', ex)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l198" name="l198">198</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l199" name="l199">199</a></td><td><pre><span class="insertion">+</span> <span class="insertion">def stats(self):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l200" name="l200">200</a></td><td><pre><span class="insertion">+</span> <span class="insertion">print('[~] - SceenName : ' + self.me.screen_name)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l201" name="l201">201</a></td><td><pre><span class="insertion">+</span> <span class="insertion">print('[~] - Registered : ' + self.me.created_at)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l202" name="l202">202</a></td><td><pre><span class="insertion">+</span> <span class="insertion">print('[~] - Favorites : ' + self.me.favourites_count)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l203" name="l203">203</a></td><td><pre><span class="insertion">+</span> <span class="insertion">print('[~] - Following : ' + self.me.friends_count)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l204" name="l204">204</a></td><td><pre><span class="insertion">+</span> <span class="insertion">print('[~] - Followers : ' + self.me.followers_count)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l205" name="l205">205</a></td><td><pre><span class="insertion">+</span> <span class="insertion">print('[~] - Tweets : ' + self.me.statuses_count)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l206" name="l206">206</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l207" name="l207">207</a></td><td><pre><span class="insertion">+</span><span class="insertion"># Main</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l208" name="l208">208</a></td><td><pre><span class="insertion">+</span><span class="insertion">print('#'*56)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l209" name="l209">209</a></td><td><pre><span class="insertion">+</span><span class="insertion">print('#{:^54}#'.format(''))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l210" name="l210">210</a></td><td><pre><span class="insertion">+</span><span class="insertion">print('#{:^54}#'.format('Booster Twitter Bot'))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l211" name="l211">211</a></td><td><pre><span class="insertion">+</span><span class="insertion">print('#{:^54}#'.format('Developed by acidvegas in Python'))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l212" name="l212">212</a></td><td><pre><span class="insertion">+</span><span class="insertion">print('#{:^54}#'.format('https://acid.vegas/booster'))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l213" name="l213">213</a></td><td><pre><span class="insertion">+</span><span class="insertion">print('#{:^54}#'.format(''))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l214" name="l214">214</a></td><td><pre><span class="insertion">+</span><span class="insertion">print('#'*56)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l215" name="l215">215</a></td><td><pre><span class="insertion">+</span><span class="insertion">try:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l216" name="l216">216</a></td><td><pre><span class="insertion">+</span> <span class="insertion">import tweepy</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l217" name="l217">217</a></td><td><pre><span class="insertion">+</span><span class="insertion">except ImportError:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l218" name="l218">218</a></td><td><pre><span class="insertion">+</span> <span class="insertion">raise SystemExit('Failed to import the Tweepy library! (http://pypi.python.org/pypi/tweepy)')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l219" name="l219">219</a></td><td><pre><span class="insertion">+</span><span class="insertion">Booster.run()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l220" name="l220">220</a></td><td><pre><span class="insertion">+</span><span class="insertion">while True:input('')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l221" name="l221">221</a></td><td><pre><span class="bold">diff --git a/booster/config.py b/booster/config.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l222" name="l222">222</a></td><td><pre><span class="bold">index 0a9a261..f4b4504 100644</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l223" name="l223">223</a></td><td><pre><span class="bold">--- a/booster/config.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l224" name="l224">224</a></td><td><pre><span class="bold">+++ b/booster/config.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l225" name="l225">225</a></td><td><pre><span class="hunk">@@ -2,25 +2,20 @@</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l226" name="l226">226</a></td><td><pre> # Booster Twitter Bot - Developed by acidvegas in Python (https://acid.vegas/booster)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l227" name="l227">227</a></td><td><pre> # config.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l228" name="l228">228</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l229" name="l229">229</a></td><td><pre><span class="deletion">-# API Settings</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l230" name="l230">230</a></td><td><pre><span class="deletion">-consumer_key = 'CHANGEME'</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l231" name="l231">231</a></td><td><pre><span class="deletion">-consumer_secret = 'CHANGEME'</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l232" name="l232">232</a></td><td><pre><span class="deletion">-access_token = 'CHANGEME'</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l233" name="l233">233</a></td><td><pre><span class="deletion">-access_token_secret = 'CHANGEME'</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l234" name="l234">234</a></td><td><pre><span class="insertion">+</span><span class="insertion">class api:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l235" name="l235">235</a></td><td><pre><span class="insertion">+</span> <span class="insertion">consumer_key = 'CHANGEME'</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l236" name="l236">236</a></td><td><pre><span class="insertion">+</span> <span class="insertion">consumer_secret = 'CHANGEME'</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l237" name="l237">237</a></td><td><pre><span class="insertion">+</span> <span class="insertion">access_token = 'CHANGEME'</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l238" name="l238">238</a></td><td><pre><span class="insertion">+</span> <span class="insertion">access_token_secret = 'CHANGEME'</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l239" name="l239">239</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l240" name="l240">240</a></td><td><pre><span class="deletion">-# Boost Keywords</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l241" name="l241">241</a></td><td><pre><span class="deletion">-boost_keywords = ['500aday','autofollow','autofollowback','f4f','follow','follow4follow','followback','followtrain','instantfollow','instantfollowback','teamfollowback','wefollowback']</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l242" name="l242">242</a></td><td><pre><span class="insertion">+</span><span class="insertion">class throttle:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l243" name="l243">243</a></td><td><pre><span class="insertion">+</span> <span class="insertion">favorite = 75</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l244" name="l244">244</a></td><td><pre><span class="insertion">+</span> <span class="insertion">follow = 75</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l245" name="l245">245</a></td><td><pre><span class="insertion">+</span> <span class="insertion">message = 750</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l246" name="l246">246</a></td><td><pre><span class="insertion">+</span> <span class="insertion">tweet = 750</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l247" name="l247">247</a></td><td><pre><span class="insertion">+</span> <span class="insertion">unfollow = 75</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l248" name="l248">248</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l249" name="l249">249</a></td><td><pre><span class="deletion">-# Throttling</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l250" name="l250">250</a></td><td><pre><span class="deletion">-max_favorites = 75 # Only use up to 100 to avoid suspension.</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l251" name="l251">251</a></td><td><pre><span class="deletion">-max_follows = 75 # Only use up to 100 to avoid suspension.</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l252" name="l252">252</a></td><td><pre><span class="deletion">-max_messages = 750 # Only use up to 1000 to avoid suspension.</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l253" name="l253">253</a></td><td><pre><span class="deletion">-max_tweets = 750 # Only use up to 1000 to avoid suspension.</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l254" name="l254">254</a></td><td><pre><span class="deletion">-max_unfollows = 75 # Only use up to 100 to avoid suspension.</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l255" name="l255">255</a></td><td><pre><span class="deletion">-</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l256" name="l256">256</a></td><td><pre><span class="deletion">-# Messaging</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l257" name="l257">257</a></td><td><pre><span class="deletion">-send_message = False # Send a message to anyone who follows you.</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l258" name="l258">258</a></td><td><pre><span class="deletion">-message = 'Thank you for following our Twitter account!'</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l259" name="l259">259</a></td><td><pre><span class="deletion">-</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l260" name="l260">260</a></td><td><pre><span class="deletion">-# Where On Earth ID's (http://www.woeidlookup.com/)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l261" name="l261">261</a></td><td><pre><span class="deletion">-woeid = 23424975 # United States</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l262" name="l262">262</a></td><td><pre><span class="insertion">+</span><span class="insertion">class settings:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l263" name="l263">263</a></td><td><pre><span class="insertion">+</span> <span class="insertion">keywords = ['500aday','autofollow','autofollowback','f4f','follow','follow4follow','followback','followtrain','instantfollow','instantfollowback','teamfollowback','wefollowback']</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l264" name="l264">264</a></td><td><pre><span class="insertion">+</span> <span class="insertion">message = 'Thank you for following our Twitter account!' # Set to None to disable sending messages to new followers</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l265" name="l265">265</a></td><td><pre><span class="insertion">+</span> <span class="insertion">woeid = 23424975 # Where On Earth ID (http://www.woeidlookup.com/)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l266" name="l266">266</a></td><td><pre><span class="bold">diff --git a/booster/debug.py b/booster/debug.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l267" name="l267">267</a></td><td><pre><span class="bold">deleted file mode 100644</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l268" name="l268">268</a></td><td><pre><span class="bold">index 8220cc5..0000000</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l269" name="l269">269</a></td><td><pre><span class="bold">--- a/booster/debug.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l270" name="l270">270</a></td><td><pre><span class="bold">+++ /dev/null</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l271" name="l271">271</a></td><td><pre><span class="hunk">@@ -1,70 +0,0 @@</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l272" name="l272">272</a></td><td><pre><span class="deletion">-#!/usr/bin/env python</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l273" name="l273">273</a></td><td><pre><span class="deletion">-# Booster Twitter Bot - Developed by acidvegas in Python (https://acid.vegas/booster)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l274" name="l274">274</a></td><td><pre><span class="deletion">-# debug.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l275" name="l275">275</a></td><td><pre><span class="deletion">-</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l276" name="l276">276</a></td><td><pre><span class="deletion">-import ctypes</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l277" name="l277">277</a></td><td><pre><span class="deletion">-import os</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l278" name="l278">278</a></td><td><pre><span class="deletion">-import sys</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l279" name="l279">279</a></td><td><pre><span class="deletion">-import time</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l280" name="l280">280</a></td><td><pre><span class="deletion">-</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l281" name="l281">281</a></td><td><pre><span class="deletion">-import config</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l282" name="l282">282</a></td><td><pre><span class="deletion">-</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l283" name="l283">283</a></td><td><pre><span class="deletion">-def action(msg):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l284" name="l284">284</a></td><td><pre><span class="deletion">- print(f'{get_time()} | [#] - {msg}')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l285" name="l285">285</a></td><td><pre><span class="deletion">-</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l286" name="l286">286</a></td><td><pre><span class="deletion">-def alert(msg):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l287" name="l287">287</a></td><td><pre><span class="deletion">- print(f'{get_time()} | [+] - {msg}')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l288" name="l288">288</a></td><td><pre><span class="deletion">-</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l289" name="l289">289</a></td><td><pre><span class="deletion">-def check_config():</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l290" name="l290">290</a></td><td><pre><span class="deletion">- if 'CHANGEME' in (config.consumer_key, config.consumer_secret, config.access_token, config.access_token_secret):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l291" name="l291">291</a></td><td><pre><span class="deletion">- error_exit('Edit your config file!')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l292" name="l292">292</a></td><td><pre><span class="deletion">-</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l293" name="l293">293</a></td><td><pre><span class="deletion">-def check_imports():</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l294" name="l294">294</a></td><td><pre><span class="deletion">- try:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l295" name="l295">295</a></td><td><pre><span class="deletion">- import tweepy</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l296" name="l296">296</a></td><td><pre><span class="deletion">- except ImportError:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l297" name="l297">297</a></td><td><pre><span class="deletion">- error_exit('Failed to import the Tweepy library! (http://pypi.python.org/pypi/tweepy)')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l298" name="l298">298</a></td><td><pre><span class="deletion">-</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l299" name="l299">299</a></td><td><pre><span class="deletion">-def check_privileges():</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l300" name="l300">300</a></td><td><pre><span class="deletion">- if check_windows():</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l301" name="l301">301</a></td><td><pre><span class="deletion">- return True if ctypes.windll.shell32.IsUserAnAdmin() != 0 else return False</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l302" name="l302">302</a></td><td><pre><span class="deletion">- else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l303" name="l303">303</a></td><td><pre><span class="deletion">- return True if os.getuid() == 0 or os.geteuid() == 0 else return False</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l304" name="l304">304</a></td><td><pre><span class="deletion">-</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l305" name="l305">305</a></td><td><pre><span class="deletion">-def check_version(major):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l306" name="l306">306</a></td><td><pre><span class="deletion">- return True if sys.version_info.major == major else return False</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l307" name="l307">307</a></td><td><pre><span class="deletion">-</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l308" name="l308">308</a></td><td><pre><span class="deletion">-def check_windows():</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l309" name="l309">309</a></td><td><pre><span class="deletion">- return True if os.name == 'nt' else return False</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l310" name="l310">310</a></td><td><pre><span class="deletion">-</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l311" name="l311">311</a></td><td><pre><span class="deletion">-def clear():</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l312" name="l312">312</a></td><td><pre><span class="deletion">- os.system('cls') if check_windows() else os.system('clear')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l313" name="l313">313</a></td><td><pre><span class="deletion">-</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l314" name="l314">314</a></td><td><pre><span class="deletion">-def error(msg, reason=None):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l315" name="l315">315</a></td><td><pre><span class="deletion">- print(f'{get_time()} | [!] - {msg} ({str(reason)})') if reason else print(f'{get_time()} | [!] - {msg}')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l316" name="l316">316</a></td><td><pre><span class="deletion">-</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l317" name="l317">317</a></td><td><pre><span class="deletion">-def error_exit(msg):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l318" name="l318">318</a></td><td><pre><span class="deletion">- raise SystemExit(f'{get_time()} | [!] - {msg}')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l319" name="l319">319</a></td><td><pre><span class="deletion">-</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l320" name="l320">320</a></td><td><pre><span class="deletion">-def get_time():</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l321" name="l321">321</a></td><td><pre><span class="deletion">- return time.strftime('%I:%M:%S')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l322" name="l322">322</a></td><td><pre><span class="deletion">-</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l323" name="l323">323</a></td><td><pre><span class="deletion">-def get_windows():</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l324" name="l324">324</a></td><td><pre><span class="deletion">- return True if os.name == 'nt' else False</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l325" name="l325">325</a></td><td><pre><span class="deletion">-</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l326" name="l326">326</a></td><td><pre><span class="deletion">-def info():</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l327" name="l327">327</a></td><td><pre><span class="deletion">- clear()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l328" name="l328">328</a></td><td><pre><span class="deletion">- print(''.rjust(56, '#'))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l329" name="l329">329</a></td><td><pre><span class="deletion">- print('#{0}#'.format(''.center(54)))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l330" name="l330">330</a></td><td><pre><span class="deletion">- print('#{0}#'.format('Booster Twitter Bot'.center(54)))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l331" name="l331">331</a></td><td><pre><span class="deletion">- print('#{0}#'.format('Developed by acidvegas in Python'.center(54)))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l332" name="l332">332</a></td><td><pre><span class="deletion">- print('#{0}#'.format('https://acid.vegas/booster'.center(54)))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l333" name="l333">333</a></td><td><pre><span class="deletion">- print('#{0}#'.format(''.center(54)))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l334" name="l334">334</a></td><td><pre><span class="deletion">- print(''.rjust(56, '#'))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l335" name="l335">335</a></td><td><pre><span class="deletion">-</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l336" name="l336">336</a></td><td><pre><span class="deletion">-def keep_alive():</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l337" name="l337">337</a></td><td><pre><span class="deletion">- try:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l338" name="l338">338</a></td><td><pre><span class="deletion">- while True:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l339" name="l339">339</a></td><td><pre><span class="deletion">- input('')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l340" name="l340">340</a></td><td><pre><span class="deletion">- except KeyboardInterrupt:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l341" name="l341">341</a></td><td><pre><span class="deletion">- sys.exit()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l342" name="l342">342</a></td><td><pre><span class="bold">diff --git a/booster/functions.py b/booster/functions.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l343" name="l343">343</a></td><td><pre><span class="bold">deleted file mode 100644</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l344" name="l344">344</a></td><td><pre><span class="bold">index 6033fa7..0000000</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l345" name="l345">345</a></td><td><pre><span class="bold">--- a/booster/functions.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l346" name="l346">346</a></td><td><pre><span class="bold">+++ /dev/null</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l347" name="l347">347</a></td><td><pre><span class="hunk">@@ -1,21 +0,0 @@</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l348" name="l348">348</a></td><td><pre><span class="deletion">-#!/usr/bin/env python</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l349" name="l349">349</a></td><td><pre><span class="deletion">-# Booster Twitter Bot - Developed by acidvegas in Python (https://acid.vegas/booster)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l350" name="l350">350</a></td><td><pre><span class="deletion">-# functions.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l351" name="l351">351</a></td><td><pre><span class="deletion">-</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l352" name="l352">352</a></td><td><pre><span class="deletion">-import datetime</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l353" name="l353">353</a></td><td><pre><span class="deletion">-import random</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l354" name="l354">354</a></td><td><pre><span class="deletion">-import urllib.request</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l355" name="l355">355</a></td><td><pre><span class="deletion">-</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l356" name="l356">356</a></td><td><pre><span class="deletion">-def get_day():</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l357" name="l357">357</a></td><td><pre><span class="deletion">- return datetime.datetime.today().weekday()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l358" name="l358">358</a></td><td><pre><span class="deletion">-</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l359" name="l359">359</a></td><td><pre><span class="deletion">-def get_source(url):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l360" name="l360">360</a></td><td><pre><span class="deletion">- req = urllib.request.Request(url)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l361" name="l361">361</a></td><td><pre><span class="deletion">- req.add_header('User-Agent', 'Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l362" name="l362">362</a></td><td><pre><span class="deletion">- source = urllib.request.urlopen(req, timeout=10)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l363" name="l363">363</a></td><td><pre><span class="deletion">- charset = source.headers.get_content_charset()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l364" name="l364">364</a></td><td><pre><span class="deletion">- if charset:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l365" name="l365">365</a></td><td><pre><span class="deletion">- return source.read().decode(charset) if charset else return source.read().decode()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l366" name="l366">366</a></td><td><pre><span class="deletion">-</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l367" name="l367">367</a></td><td><pre><span class="deletion">-def random_int(min, max):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l368" name="l368">368</a></td><td><pre><span class="deletion">- return random.randint(min, max)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l369" name="l369">369</a></td><td><pre><span class="bold">diff --git a/booster/twitter.py b/booster/twitter.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l370" name="l370">370</a></td><td><pre><span class="bold">deleted file mode 100644</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l371" name="l371">371</a></td><td><pre><span class="bold">index 8ee255b..0000000</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l372" name="l372">372</a></td><td><pre><span class="bold">--- a/booster/twitter.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l373" name="l373">373</a></td><td><pre><span class="bold">+++ /dev/null</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l374" name="l374">374</a></td><td><pre><span class="hunk">@@ -1,168 +0,0 @@</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l375" name="l375">375</a></td><td><pre><span class="deletion">-#!/usr/bin/env python</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l376" name="l376">376</a></td><td><pre><span class="deletion">-# Booster Twitter Bot - Developed by acidvegas in Python (https://acid.vegas/booster)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l377" name="l377">377</a></td><td><pre><span class="deletion">-# twitter.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l378" name="l378">378</a></td><td><pre><span class="deletion">-</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l379" name="l379">379</a></td><td><pre><span class="deletion">-import random</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l380" name="l380">380</a></td><td><pre><span class="deletion">-import threading</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l381" name="l381">381</a></td><td><pre><span class="deletion">-import time</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l382" name="l382">382</a></td><td><pre><span class="deletion">-</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l383" name="l383">383</a></td><td><pre><span class="deletion">-import tweepy</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l384" name="l384">384</a></td><td><pre><span class="deletion">-</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l385" name="l385">385</a></td><td><pre><span class="deletion">-import config</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l386" name="l386">386</a></td><td><pre><span class="deletion">-import debug</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l387" name="l387">387</a></td><td><pre><span class="deletion">-import functions</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l388" name="l388">388</a></td><td><pre><span class="deletion">-</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l389" name="l389">389</a></td><td><pre><span class="deletion">-class Booster(object):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l390" name="l390">390</a></td><td><pre><span class="deletion">- def __init__(self):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l391" name="l391">391</a></td><td><pre><span class="deletion">- self.api = None</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l392" name="l392">392</a></td><td><pre><span class="deletion">- self.me = None</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l393" name="l393">393</a></td><td><pre><span class="deletion">- self.favorites = 0</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l394" name="l394">394</a></td><td><pre><span class="deletion">- self.max_favorites = config.max_favorites</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l395" name="l395">395</a></td><td><pre><span class="deletion">- self.follows = 0</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l396" name="l396">396</a></td><td><pre><span class="deletion">- self.max_follows = config.max_follows</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l397" name="l397">397</a></td><td><pre><span class="deletion">- self.messages = 0</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l398" name="l398">398</a></td><td><pre><span class="deletion">- self.max_messages = config.max_messages</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l399" name="l399">399</a></td><td><pre><span class="deletion">- self.tweets = 0</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l400" name="l400">400</a></td><td><pre><span class="deletion">- self.max_tweets = config.max_tweets</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l401" name="l401">401</a></td><td><pre><span class="deletion">- self.unfollows = 0</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l402" name="l402">402</a></td><td><pre><span class="deletion">- self.max_unfollows = config.max_unfollows</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l403" name="l403">403</a></td><td><pre><span class="deletion">- self.send_message = config.send_message</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l404" name="l404">404</a></td><td><pre><span class="deletion">- self.message = config.message</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l405" name="l405">405</a></td><td><pre><span class="deletion">-</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l406" name="l406">406</a></td><td><pre><span class="deletion">- def run(self):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l407" name="l407">407</a></td><td><pre><span class="deletion">- self.login()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l408" name="l408">408</a></td><td><pre><span class="deletion">- threading.Thread(target=self.loop_boost).start()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l409" name="l409">409</a></td><td><pre><span class="deletion">- threading.Thread(target=self.loop_favorite).start()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l410" name="l410">410</a></td><td><pre><span class="deletion">- threading.Thread(target=self.loop_follow).start()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l411" name="l411">411</a></td><td><pre><span class="deletion">- threading.Thread(target=self.loop_search).start()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l412" name="l412">412</a></td><td><pre><span class="deletion">- threading.Thread(target=self.loop_trend).start()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l413" name="l413">413</a></td><td><pre><span class="deletion">-</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l414" name="l414">414</a></td><td><pre><span class="deletion">- def login(self):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l415" name="l415">415</a></td><td><pre><span class="deletion">- try:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l416" name="l416">416</a></td><td><pre><span class="deletion">- auth = tweepy.OAuthHandler(config.consumer_key, config.consumer_secret)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l417" name="l417">417</a></td><td><pre><span class="deletion">- auth.set_access_token(config.access_token, config.access_token_secret)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l418" name="l418">418</a></td><td><pre><span class="deletion">- self.api = tweepy.API(auth, wait_on_rate_limit=True, wait_on_rate_limit_notify=True)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l419" name="l419">419</a></td><td><pre><span class="deletion">- self.me = self.api.me()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l420" name="l420">420</a></td><td><pre><span class="deletion">- except tweepy.TweepError as ex:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l421" name="l421">421</a></td><td><pre><span class="deletion">- debug.error_exit('Failed to login to Twitter! ({0})'.format(str(ex)))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l422" name="l422">422</a></td><td><pre><span class="deletion">-</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l423" name="l423">423</a></td><td><pre><span class="deletion">- def loop_boost(self):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l424" name="l424">424</a></td><td><pre><span class="deletion">- while True:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l425" name="l425">425</a></td><td><pre><span class="deletion">- try:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l426" name="l426">426</a></td><td><pre><span class="deletion">- if 'boost_tweet' in locals(): self.api.destroy_status(boost_tweet.id)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l427" name="l427">427</a></td><td><pre><span class="deletion">- boost_tweet = self.api.update_status('RT for followers! #' + ' #'.join(config.boost_keywords))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l428" name="l428">428</a></td><td><pre><span class="deletion">- self.tweets += 1</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l429" name="l429">429</a></td><td><pre><span class="deletion">- debug.alert('Re-posted boost tweet.')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l430" name="l430">430</a></td><td><pre><span class="deletion">- except tweepy.TweepError as ex:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l431" name="l431">431</a></td><td><pre><span class="deletion">- debug.error('Error occured in the boost loop', ex)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l432" name="l432">432</a></td><td><pre><span class="deletion">- finally:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l433" name="l433">433</a></td><td><pre><span class="deletion">- random.shuffle(config.boost_keywords)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l434" name="l434">434</a></td><td><pre><span class="deletion">- time.sleep(60*5)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l435" name="l435">435</a></td><td><pre><span class="deletion">-</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l436" name="l436">436</a></td><td><pre><span class="deletion">- def loop_favorite(self):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l437" name="l437">437</a></td><td><pre><span class="deletion">- while True:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l438" name="l438">438</a></td><td><pre><span class="deletion">- try:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l439" name="l439">439</a></td><td><pre><span class="deletion">- for tweet in tweepy.Cursor(self.api.home_timeline, exclude_replies=True).items(50):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l440" name="l440">440</a></td><td><pre><span class="deletion">- if tweet.user.screen_name != self.me.screen_name:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l441" name="l441">441</a></td><td><pre><span class="deletion">- if not tweet.favorited:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l442" name="l442">442</a></td><td><pre><span class="deletion">- if random.choice((True, False, False, False, False)):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l443" name="l443">443</a></td><td><pre><span class="deletion">- self.api.create_favorite(tweet.id)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l444" name="l444">444</a></td><td><pre><span class="deletion">- self.favorites += 1</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l445" name="l445">445</a></td><td><pre><span class="deletion">- debug.alert('Favorited a friends tweet!')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l446" name="l446">446</a></td><td><pre><span class="deletion">- time.sleep(30)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l447" name="l447">447</a></td><td><pre><span class="deletion">- except tweepy.TweepError as ex:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l448" name="l448">448</a></td><td><pre><span class="deletion">- debug.error('Error occured in the favorite loop!', ex)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l449" name="l449">449</a></td><td><pre><span class="deletion">- finally:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l450" name="l450">450</a></td><td><pre><span class="deletion">- time.sleep(60*15)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l451" name="l451">451</a></td><td><pre><span class="deletion">-</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l452" name="l452">452</a></td><td><pre><span class="deletion">- def loop_follow(self):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l453" name="l453">453</a></td><td><pre><span class="deletion">- while True:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l454" name="l454">454</a></td><td><pre><span class="deletion">- try:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l455" name="l455">455</a></td><td><pre><span class="deletion">- followers = self.api.followers_ids(self.me.screen_name)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l456" name="l456">456</a></td><td><pre><span class="deletion">- friends = self.api.friends_ids(self.me.screen_name)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l457" name="l457">457</a></td><td><pre><span class="deletion">- non_friends = [friend for friend in followers if friend not in friends]</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l458" name="l458">458</a></td><td><pre><span class="deletion">- debug.action('Following back {0} supporters...'.format(len(non_friends)))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l459" name="l459">459</a></td><td><pre><span class="deletion">- for follower in non_friends:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l460" name="l460">460</a></td><td><pre><span class="deletion">- self.api.create_friendship(follower)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l461" name="l461">461</a></td><td><pre><span class="deletion">- self.follows += 1</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l462" name="l462">462</a></td><td><pre><span class="deletion">- debug.alert('Followed back a follower!')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l463" name="l463">463</a></td><td><pre><span class="deletion">- if self.follows &gt;= self.max_follows:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l464" name="l464">464</a></td><td><pre><span class="deletion">- break</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l465" name="l465">465</a></td><td><pre><span class="deletion">- if self.send_message:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l466" name="l466">466</a></td><td><pre><span class="deletion">- self.api.send_direct_message(screen_name=follower, text=self.message)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l467" name="l467">467</a></td><td><pre><span class="deletion">- time.sleep(30)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l468" name="l468">468</a></td><td><pre><span class="deletion">- except tweepy.TweepError as ex:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l469" name="l469">469</a></td><td><pre><span class="deletion">- debug.error('Error occured in the follow loop!', ex)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l470" name="l470">470</a></td><td><pre><span class="deletion">- finally:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l471" name="l471">471</a></td><td><pre><span class="deletion">- time.sleep(60*15)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l472" name="l472">472</a></td><td><pre><span class="deletion">-</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l473" name="l473">473</a></td><td><pre><span class="deletion">- def loop_search(self):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l474" name="l474">474</a></td><td><pre><span class="deletion">- while True:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l475" name="l475">475</a></td><td><pre><span class="deletion">- try:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l476" name="l476">476</a></td><td><pre><span class="deletion">- query = random.choice(config.boost_keywords)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l477" name="l477">477</a></td><td><pre><span class="deletion">- for item in self.api.search(q='#' + query, count=50, lang='en', result_type='recent'):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l478" name="l478">478</a></td><td><pre><span class="deletion">- if not item.user.following and not item.favorited:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l479" name="l479">479</a></td><td><pre><span class="deletion">- try:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l480" name="l480">480</a></td><td><pre><span class="deletion">- self.api.create_favorite(item.id)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l481" name="l481">481</a></td><td><pre><span class="deletion">- self.api.create_friendship(item.user.screen_name)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l482" name="l482">482</a></td><td><pre><span class="deletion">- self.favorites += 1</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l483" name="l483">483</a></td><td><pre><span class="deletion">- self.follows += 1</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l484" name="l484">484</a></td><td><pre><span class="deletion">- debug.alert('Followed a booster twitter!')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l485" name="l485">485</a></td><td><pre><span class="deletion">- except tweepy.TweepError as ex:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l486" name="l486">486</a></td><td><pre><span class="deletion">- debug.error('Unknown error occured in the search loop!', ex)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l487" name="l487">487</a></td><td><pre><span class="deletion">- time.sleep(30)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l488" name="l488">488</a></td><td><pre><span class="deletion">- except tweepy.TweepError as ex:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l489" name="l489">489</a></td><td><pre><span class="deletion">- debug.error('Error occured in the search loop!', ex)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l490" name="l490">490</a></td><td><pre><span class="deletion">- finally:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l491" name="l491">491</a></td><td><pre><span class="deletion">- time.sleep(60*15)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l492" name="l492">492</a></td><td><pre><span class="deletion">-</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l493" name="l493">493</a></td><td><pre><span class="deletion">- def loop_trend(self):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l494" name="l494">494</a></td><td><pre><span class="deletion">- while True:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l495" name="l495">495</a></td><td><pre><span class="deletion">- try:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l496" name="l496">496</a></td><td><pre><span class="deletion">- trends = self.api.trends_place(str(config.woeid))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l497" name="l497">497</a></td><td><pre><span class="deletion">- hashtags = [x['name'] for x in trends[0]['trends'] if x['name'].startswith('#')]</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l498" name="l498">498</a></td><td><pre><span class="deletion">- for trend in hashtags:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l499" name="l499">499</a></td><td><pre><span class="deletion">- for item in self.api.search(q=trend, count=5, lang='en', result_type='top'):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l500" name="l500">500</a></td><td><pre><span class="deletion">- self.api.update_status(item.tweet)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l501" name="l501">501</a></td><td><pre><span class="deletion">- time.sleep(30)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l502" name="l502">502</a></td><td><pre><span class="deletion">- except tweepy.TweepError as ex:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l503" name="l503">503</a></td><td><pre><span class="deletion">- debug.error('Error occured in the trend loop!', ex)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l504" name="l504">504</a></td><td><pre><span class="deletion">- finally:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l505" name="l505">505</a></td><td><pre><span class="deletion">- time.sleep(60*15)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l506" name="l506">506</a></td><td><pre><span class="deletion">-</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l507" name="l507">507</a></td><td><pre><span class="deletion">- def loop_unfollow(self):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l508" name="l508">508</a></td><td><pre><span class="deletion">- try:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l509" name="l509">509</a></td><td><pre><span class="deletion">- followers = self.api.followers_ids(self.me.screen_name)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l510" name="l510">510</a></td><td><pre><span class="deletion">- friends = self.api.friends_ids(self.me.screen_name)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l511" name="l511">511</a></td><td><pre><span class="deletion">- non_friends = [friend for friend in friends if friend not in followers]</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l512" name="l512">512</a></td><td><pre><span class="deletion">- non_friends.reverse()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l513" name="l513">513</a></td><td><pre><span class="deletion">- debug.action('Unfollowing {0} unsupporting friends...'.format(len(non_friends)))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l514" name="l514">514</a></td><td><pre><span class="deletion">- for friend in non_friends:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l515" name="l515">515</a></td><td><pre><span class="deletion">- self.api.destroy_friendship(friend)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l516" name="l516">516</a></td><td><pre><span class="deletion">- self.unfollows += 1</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l517" name="l517">517</a></td><td><pre><span class="deletion">- debug.alert('Unfollowed an unsupporting friend!')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l518" name="l518">518</a></td><td><pre><span class="deletion">- if self.unfollows == self.max_unfollows:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l519" name="l519">519</a></td><td><pre><span class="deletion">- break</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l520" name="l520">520</a></td><td><pre><span class="deletion">- else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l521" name="l521">521</a></td><td><pre><span class="deletion">- time.sleep(60*functions.random_int(10,15))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l522" name="l522">522</a></td><td><pre><span class="deletion">- except tweepy.TweepError as ex:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l523" name="l523">523</a></td><td><pre><span class="deletion">- debug.error('Error occured in the unfollow loop!', ex)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l524" name="l524">524</a></td><td><pre><span class="deletion">- finally:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l525" name="l525">525</a></td><td><pre><span class="deletion">- self.unfollows = 0</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l526" name="l526">526</a></td><td><pre><span class="deletion">-</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l527" name="l527">527</a></td><td><pre><span class="deletion">- def ratio_check(self):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l528" name="l528">528</a></td><td><pre><span class="deletion">- if self.follows &gt;= max_follows:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l529" name="l529">529</a></td><td><pre><span class="deletion">- time.sleep(86400)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l530" name="l530">530</a></td><td><pre><span class="deletion">- if self.me.friends_count &gt;= 2000:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l531" name="l531">531</a></td><td><pre><span class="deletion">- ratio = self.me.friends_count + (self.me.followers_count/10)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l532" name="l532">532</a></td><td><pre><span class="deletion">- if self.me.friends_count &gt;= ratio:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l533" name="l533">533</a></td><td><pre><span class="deletion">- debug.action('Following to follower ratio is off! Starting the unfollow loop...')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l534" name="l534">534</a></td><td><pre><span class="deletion">- unfollow_loop()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l535" name="l535">535</a></td><td><pre><span class="deletion">-</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l536" name="l536">536</a></td><td><pre><span class="deletion">- def stats(self):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l537" name="l537">537</a></td><td><pre><span class="deletion">- debug.action('SceenName : ' + self.me.screen_name)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l538" name="l538">538</a></td><td><pre><span class="deletion">- debug.action('Registered : ' + self.me.created_at)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l539" name="l539">539</a></td><td><pre><span class="deletion">- debug.action('Favorites : ' + self.me.favourites_count)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l540" name="l540">540</a></td><td><pre><span class="deletion">- debug.action('Following : ' + self.me.friends_count)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l541" name="l541">541</a></td><td><pre><span class="deletion">- debug.action('Followers : ' + self.me.followers_count)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l542" name="l542">542</a></td><td><pre><span class="deletion">- debug.action('Tweets : ' + self.me.statuses_count)</span></pre></td></tr>
</table>
<div id="footer">site generated by <a href="https://github.com/acidvegas/stagit" target="_blank">stagit</a> on <a href="#">05/03/20</a></div>

View File

@ -1,518 +0,0 @@
<!doctype html>
<link rel="stylesheet" href="../../style.css">
<title>booster :: d9f8aa3</title>
<h1><a href="../index.html" title="Back to Repository">&larr;&#xFE0E;</a> booster :: d9f8aa3</h1>
<hr>
<table id="main" cellpadding="0" cellspacing="0">
<tr class="item"><td class="linenumber"><a href="#l1" name="l1">1</a></td><td><pre><span class="commit">commit d9f8aa3cce0c7c148da8055eab8570a62089e500</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l2" name="l2">2</a></td><td><pre>Author: acidvegas &lt;acid.vegas@acid.vegas&gt;</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l3" name="l3">3</a></td><td><pre>Date: Fri Aug 2 02:56:47 2019 -0400</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l4" name="l4">4</a></td><td><pre></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l5" name="l5">5</a></td><td><pre> minor update to prepair for major cleanup</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l6" name="l6">6</a></td><td><pre>---</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l7" name="l7">7</a></td><td><pre> README.md | 10 <span class="insertion">+</span><span class="deletion">-</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l8" name="l8">8</a></td><td><pre> booster/booster.py | 4 <span class="insertion">+</span><span class="deletion">-</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l9" name="l9">9</a></td><td><pre> booster/debug.py | 87 <span class="insertion">++++++</span><span class="deletion">----------</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l10" name="l10">10</a></td><td><pre> booster/functions.py | 18 <span class="insertion">++</span><span class="deletion">--</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l11" name="l11">11</a></td><td><pre> booster/twitter.py | 286 <span class="insertion">+++++++++++++++++++++++++</span><span class="deletion">--------------------------</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l12" name="l12">12</a></td><td><pre> 5 files changed, 190 insertions(+), 215 deletions(-)</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l13" name="l13">13</a></td><td><pre></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l14" name="l14">14</a></td><td><pre><span class="bold">diff --git a/README.md b/README.md</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l15" name="l15">15</a></td><td><pre><span class="bold">index 2a46e03..a2a5e96 100644</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l16" name="l16">16</a></td><td><pre><span class="bold">--- a/README.md</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l17" name="l17">17</a></td><td><pre><span class="bold">+++ b/README.md</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l18" name="l18">18</a></td><td><pre><span class="hunk">@@ -1,8 +1,8 @@</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l19" name="l19">19</a></td><td><pre><span class="deletion">-###### Requirments</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l20" name="l20">20</a></td><td><pre><span class="deletion">-* [Tweepy](http://pypi.python.org/pypi/tweepy)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l21" name="l21">21</a></td><td><pre><span class="insertion">+</span><span class="insertion">## Requirments</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l22" name="l22">22</a></td><td><pre><span class="insertion">+</span><span class="insertion">- [Tweepy](http://pypi.python.org/pypi/tweepy)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l23" name="l23">23</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l24" name="l24">24</a></td><td><pre><span class="deletion">-###### Instructions</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l25" name="l25">25</a></td><td><pre><span class="deletion">-Register a Twitter account, and [sign up](http://dev.twitter.com/apps/new) for a new developer application.</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l26" name="l26">26</a></td><td><pre><span class="insertion">+</span><span class="insertion">## Instructions</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l27" name="l27">27</a></td><td><pre><span class="insertion">+</span><span class="insertion">Create a Twitter account &amp; [sign up](http://dev.twitter.com/apps/new) for a new developer application.</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l28" name="l28">28</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l29" name="l29">29</a></td><td><pre> Go to your new application settings &quot;Keys and Access Tokens&quot; tab.</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l30" name="l30">30</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l31" name="l31">31</a></td><td><pre><span class="hunk">@@ -16,7 +16,7 @@</span> </span>Change your access to &quot;Read, Write and Access direct messages&quot;.</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l32" name="l32">32</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l33" name="l33">33</a></td><td><pre> Edit your `config.py` and change the Twitter API settings.</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l34" name="l34">34</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l35" name="l35">35</a></td><td><pre><span class="deletion">-###### Mirrors</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l36" name="l36">36</a></td><td><pre><span class="insertion">+</span><span class="insertion">## Mirrors</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l37" name="l37">37</a></td><td><pre> - [acid.vegas](https://acid.vegas/booster) *(main)*</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l38" name="l38">38</a></td><td><pre> - [SuperNETs](https://git.supernets.org/acidvegas/booster)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l39" name="l39">39</a></td><td><pre> - [GitHub](https://github.com/acidvegas/booster)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l40" name="l40">40</a></td><td><pre><span class="bold">diff --git a/booster/booster.py b/booster/booster.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l41" name="l41">41</a></td><td><pre><span class="bold">index d28b7d2..7176c93 100644</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l42" name="l42">42</a></td><td><pre><span class="bold">--- a/booster/booster.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l43" name="l43">43</a></td><td><pre><span class="bold">+++ b/booster/booster.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l44" name="l44">44</a></td><td><pre><span class="hunk">@@ -10,9 +10,9 @@</span> </span>import debug</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l45" name="l45">45</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l46" name="l46">46</a></td><td><pre> debug.info()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l47" name="l47">47</a></td><td><pre> if not debug.check_version(3):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l48" name="l48">48</a></td><td><pre><span class="deletion">- debug.error_exit('Requires Python version 3 to run!')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l49" name="l49">49</a></td><td><pre><span class="insertion">+</span> <span class="insertion">debug.error_exit('Requires Python version 3 to run!')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l50" name="l50">50</a></td><td><pre> if debug.check_privileges():</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l51" name="l51">51</a></td><td><pre><span class="deletion">- debug.error_exit('Do not run as admin/root!')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l52" name="l52">52</a></td><td><pre><span class="insertion">+</span> <span class="insertion">debug.error_exit('Do not run as admin/root!')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l53" name="l53">53</a></td><td><pre> debug.check_imports()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l54" name="l54">54</a></td><td><pre> debug.check_config()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l55" name="l55">55</a></td><td><pre> import twitter</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l56" name="l56">56</a></td><td><pre><span class="bold">diff --git a/booster/debug.py b/booster/debug.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l57" name="l57">57</a></td><td><pre><span class="bold">index 904f181..8220cc5 100644</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l58" name="l58">58</a></td><td><pre><span class="bold">--- a/booster/debug.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l59" name="l59">59</a></td><td><pre><span class="bold">+++ b/booster/debug.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l60" name="l60">60</a></td><td><pre><span class="hunk">@@ -10,84 +10,61 @@</span> </span>import time</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l61" name="l61">61</a></td><td><pre> import config</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l62" name="l62">62</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l63" name="l63">63</a></td><td><pre> def action(msg):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l64" name="l64">64</a></td><td><pre><span class="deletion">- print('%s | [#] - %s' % (get_time(), msg))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l65" name="l65">65</a></td><td><pre><span class="insertion">+</span> <span class="insertion">print(f'{get_time()} | [#] - {msg}')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l66" name="l66">66</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l67" name="l67">67</a></td><td><pre> def alert(msg):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l68" name="l68">68</a></td><td><pre><span class="deletion">- print('%s | [+] - %s' % (get_time(), msg))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l69" name="l69">69</a></td><td><pre><span class="insertion">+</span> <span class="insertion">print(f'{get_time()} | [+] - {msg}')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l70" name="l70">70</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l71" name="l71">71</a></td><td><pre> def check_config():</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l72" name="l72">72</a></td><td><pre><span class="deletion">- for item in (config.consumer_key, config.consumer_secret, config.access_token, config.access_token_secret):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l73" name="l73">73</a></td><td><pre><span class="deletion">- if item == 'CHANGEME':</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l74" name="l74">74</a></td><td><pre><span class="deletion">- error_exit('Edit your config file!')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l75" name="l75">75</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if 'CHANGEME' in (config.consumer_key, config.consumer_secret, config.access_token, config.access_token_secret):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l76" name="l76">76</a></td><td><pre><span class="insertion">+</span> <span class="insertion">error_exit('Edit your config file!')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l77" name="l77">77</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l78" name="l78">78</a></td><td><pre> def check_imports():</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l79" name="l79">79</a></td><td><pre><span class="deletion">- try:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l80" name="l80">80</a></td><td><pre><span class="deletion">- import tweepy</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l81" name="l81">81</a></td><td><pre><span class="deletion">- except ImportError:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l82" name="l82">82</a></td><td><pre><span class="deletion">- error_exit('Failed to import the Tweepy library! (http://pypi.python.org/pypi/tweepy)')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l83" name="l83">83</a></td><td><pre><span class="insertion">+</span> <span class="insertion">try:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l84" name="l84">84</a></td><td><pre><span class="insertion">+</span> <span class="insertion">import tweepy</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l85" name="l85">85</a></td><td><pre><span class="insertion">+</span> <span class="insertion">except ImportError:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l86" name="l86">86</a></td><td><pre><span class="insertion">+</span> <span class="insertion">error_exit('Failed to import the Tweepy library! (http://pypi.python.org/pypi/tweepy)')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l87" name="l87">87</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l88" name="l88">88</a></td><td><pre> def check_privileges():</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l89" name="l89">89</a></td><td><pre><span class="deletion">- if check_windows():</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l90" name="l90">90</a></td><td><pre><span class="deletion">- if ctypes.windll.shell32.IsUserAnAdmin() != 0:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l91" name="l91">91</a></td><td><pre><span class="deletion">- return True</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l92" name="l92">92</a></td><td><pre><span class="deletion">- else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l93" name="l93">93</a></td><td><pre><span class="deletion">- return False</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l94" name="l94">94</a></td><td><pre><span class="deletion">- else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l95" name="l95">95</a></td><td><pre><span class="deletion">- if os.getuid() == 0 or os.geteuid() == 0:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l96" name="l96">96</a></td><td><pre><span class="deletion">- return True</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l97" name="l97">97</a></td><td><pre><span class="deletion">- else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l98" name="l98">98</a></td><td><pre><span class="deletion">- return False</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l99" name="l99">99</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if check_windows():</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l100" name="l100">100</a></td><td><pre><span class="insertion">+</span> <span class="insertion">return True if ctypes.windll.shell32.IsUserAnAdmin() != 0 else return False</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l101" name="l101">101</a></td><td><pre><span class="insertion">+</span> <span class="insertion">else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l102" name="l102">102</a></td><td><pre><span class="insertion">+</span> <span class="insertion">return True if os.getuid() == 0 or os.geteuid() == 0 else return False</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l103" name="l103">103</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l104" name="l104">104</a></td><td><pre> def check_version(major):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l105" name="l105">105</a></td><td><pre><span class="deletion">- if sys.version_info.major == major:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l106" name="l106">106</a></td><td><pre><span class="deletion">- return True</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l107" name="l107">107</a></td><td><pre><span class="deletion">- else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l108" name="l108">108</a></td><td><pre><span class="deletion">- return False</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l109" name="l109">109</a></td><td><pre><span class="insertion">+</span> <span class="insertion">return True if sys.version_info.major == major else return False</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l110" name="l110">110</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l111" name="l111">111</a></td><td><pre> def check_windows():</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l112" name="l112">112</a></td><td><pre><span class="deletion">- if os.name == 'nt':</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l113" name="l113">113</a></td><td><pre><span class="deletion">- return True</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l114" name="l114">114</a></td><td><pre><span class="deletion">- else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l115" name="l115">115</a></td><td><pre><span class="deletion">- return False</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l116" name="l116">116</a></td><td><pre><span class="insertion">+</span> <span class="insertion">return True if os.name == 'nt' else return False</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l117" name="l117">117</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l118" name="l118">118</a></td><td><pre> def clear():</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l119" name="l119">119</a></td><td><pre><span class="deletion">- if check_windows():</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l120" name="l120">120</a></td><td><pre><span class="deletion">- os.system('cls')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l121" name="l121">121</a></td><td><pre><span class="deletion">- else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l122" name="l122">122</a></td><td><pre><span class="deletion">- os.system('clear')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l123" name="l123">123</a></td><td><pre><span class="insertion">+</span> <span class="insertion">os.system('cls') if check_windows() else os.system('clear')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l124" name="l124">124</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l125" name="l125">125</a></td><td><pre> def error(msg, reason=None):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l126" name="l126">126</a></td><td><pre><span class="deletion">- if reason:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l127" name="l127">127</a></td><td><pre><span class="deletion">- print('%s | [!] - %s (%s)' % (get_time(), msg, str(reason)))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l128" name="l128">128</a></td><td><pre><span class="deletion">- else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l129" name="l129">129</a></td><td><pre><span class="deletion">- print('%s | [!] - %s' % (get_time(), msg))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l130" name="l130">130</a></td><td><pre><span class="insertion">+</span> <span class="insertion">print(f'{get_time()} | [!] - {msg} ({str(reason)})') if reason else print(f'{get_time()} | [!] - {msg}')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l131" name="l131">131</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l132" name="l132">132</a></td><td><pre> def error_exit(msg):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l133" name="l133">133</a></td><td><pre><span class="deletion">- raise SystemExit('%s | [!] - %s' % (get_time(), msg))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l134" name="l134">134</a></td><td><pre><span class="insertion">+</span> <span class="insertion">raise SystemExit(f'{get_time()} | [!] - {msg}')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l135" name="l135">135</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l136" name="l136">136</a></td><td><pre> def get_time():</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l137" name="l137">137</a></td><td><pre><span class="deletion">- return time.strftime('%I:%M:%S')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l138" name="l138">138</a></td><td><pre><span class="insertion">+</span> <span class="insertion">return time.strftime('%I:%M:%S')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l139" name="l139">139</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l140" name="l140">140</a></td><td><pre> def get_windows():</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l141" name="l141">141</a></td><td><pre><span class="deletion">- if os.name == 'nt':</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l142" name="l142">142</a></td><td><pre><span class="deletion">- return True</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l143" name="l143">143</a></td><td><pre><span class="deletion">- else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l144" name="l144">144</a></td><td><pre><span class="deletion">- return False</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l145" name="l145">145</a></td><td><pre><span class="insertion">+</span> <span class="insertion">return True if os.name == 'nt' else False</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l146" name="l146">146</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l147" name="l147">147</a></td><td><pre> def info():</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l148" name="l148">148</a></td><td><pre><span class="deletion">- clear()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l149" name="l149">149</a></td><td><pre><span class="deletion">- print(''.rjust(56, '#'))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l150" name="l150">150</a></td><td><pre><span class="deletion">- print('#{0}#'.format(''.center(54)))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l151" name="l151">151</a></td><td><pre><span class="deletion">- print('#{0}#'.format('Booster Twitter Bot'.center(54)))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l152" name="l152">152</a></td><td><pre><span class="deletion">- print('#{0}#'.format('Developed by acidvegas in Python 3'.center(54)))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l153" name="l153">153</a></td><td><pre><span class="deletion">- print('#{0}#'.format('https://acid.vegas/booster'.center(54)))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l154" name="l154">154</a></td><td><pre><span class="deletion">- print('#{0}#'.format(''.center(54)))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l155" name="l155">155</a></td><td><pre><span class="deletion">- print(''.rjust(56, '#'))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l156" name="l156">156</a></td><td><pre><span class="deletion">-</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l157" name="l157">157</a></td><td><pre><span class="insertion">+</span> <span class="insertion">clear()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l158" name="l158">158</a></td><td><pre><span class="insertion">+</span> <span class="insertion">print(''.rjust(56, '#'))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l159" name="l159">159</a></td><td><pre><span class="insertion">+</span> <span class="insertion">print('#{0}#'.format(''.center(54)))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l160" name="l160">160</a></td><td><pre><span class="insertion">+</span> <span class="insertion">print('#{0}#'.format('Booster Twitter Bot'.center(54)))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l161" name="l161">161</a></td><td><pre><span class="insertion">+</span> <span class="insertion">print('#{0}#'.format('Developed by acidvegas in Python'.center(54)))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l162" name="l162">162</a></td><td><pre><span class="insertion">+</span> <span class="insertion">print('#{0}#'.format('https://acid.vegas/booster'.center(54)))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l163" name="l163">163</a></td><td><pre><span class="insertion">+</span> <span class="insertion">print('#{0}#'.format(''.center(54)))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l164" name="l164">164</a></td><td><pre><span class="insertion">+</span> <span class="insertion">print(''.rjust(56, '#'))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l165" name="l165">165</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l166" name="l166">166</a></td><td><pre> def keep_alive():</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l167" name="l167">167</a></td><td><pre><span class="deletion">- try:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l168" name="l168">168</a></td><td><pre><span class="deletion">- while True:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l169" name="l169">169</a></td><td><pre><span class="deletion">- input('')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l170" name="l170">170</a></td><td><pre><span class="deletion">- except KeyboardInterrupt:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l171" name="l171">171</a></td><td><pre><span class="deletion">- sys.exit()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l172" name="l172">172</a></td><td><pre><span class="insertion">+</span> <span class="insertion">try:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l173" name="l173">173</a></td><td><pre><span class="insertion">+</span> <span class="insertion">while True:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l174" name="l174">174</a></td><td><pre><span class="insertion">+</span> <span class="insertion">input('')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l175" name="l175">175</a></td><td><pre><span class="insertion">+</span> <span class="insertion">except KeyboardInterrupt:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l176" name="l176">176</a></td><td><pre><span class="insertion">+</span> <span class="insertion">sys.exit()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l177" name="l177">177</a></td><td><pre><span class="bold">diff --git a/booster/functions.py b/booster/functions.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l178" name="l178">178</a></td><td><pre><span class="bold">index 956cb06..6033fa7 100644</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l179" name="l179">179</a></td><td><pre><span class="bold">--- a/booster/functions.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l180" name="l180">180</a></td><td><pre><span class="bold">+++ b/booster/functions.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l181" name="l181">181</a></td><td><pre><span class="hunk">@@ -7,17 +7,15 @@</span> </span>import random</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l182" name="l182">182</a></td><td><pre> import urllib.request</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l183" name="l183">183</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l184" name="l184">184</a></td><td><pre> def get_day():</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l185" name="l185">185</a></td><td><pre><span class="deletion">- return datetime.datetime.today().weekday()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l186" name="l186">186</a></td><td><pre><span class="insertion">+</span> <span class="insertion">return datetime.datetime.today().weekday()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l187" name="l187">187</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l188" name="l188">188</a></td><td><pre> def get_source(url):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l189" name="l189">189</a></td><td><pre><span class="deletion">- req = urllib.request.Request(url)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l190" name="l190">190</a></td><td><pre><span class="deletion">- req.add_header('User-Agent', 'Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l191" name="l191">191</a></td><td><pre><span class="deletion">- source = urllib.request.urlopen(req, timeout=10)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l192" name="l192">192</a></td><td><pre><span class="deletion">- charset = source.headers.get_content_charset()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l193" name="l193">193</a></td><td><pre><span class="deletion">- if charset:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l194" name="l194">194</a></td><td><pre><span class="deletion">- return source.read().decode(charset)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l195" name="l195">195</a></td><td><pre><span class="deletion">- else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l196" name="l196">196</a></td><td><pre><span class="deletion">- return source.read().decode()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l197" name="l197">197</a></td><td><pre><span class="insertion">+</span> <span class="insertion">req = urllib.request.Request(url)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l198" name="l198">198</a></td><td><pre><span class="insertion">+</span> <span class="insertion">req.add_header('User-Agent', 'Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l199" name="l199">199</a></td><td><pre><span class="insertion">+</span> <span class="insertion">source = urllib.request.urlopen(req, timeout=10)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l200" name="l200">200</a></td><td><pre><span class="insertion">+</span> <span class="insertion">charset = source.headers.get_content_charset()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l201" name="l201">201</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if charset:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l202" name="l202">202</a></td><td><pre><span class="insertion">+</span> <span class="insertion">return source.read().decode(charset) if charset else return source.read().decode()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l203" name="l203">203</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l204" name="l204">204</a></td><td><pre> def random_int(min, max):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l205" name="l205">205</a></td><td><pre><span class="deletion">- return random.randint(min, max)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l206" name="l206">206</a></td><td><pre><span class="insertion">+</span> <span class="insertion">return random.randint(min, max)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l207" name="l207">207</a></td><td><pre><span class="bold">diff --git a/booster/twitter.py b/booster/twitter.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l208" name="l208">208</a></td><td><pre><span class="bold">index e2ba905..8ee255b 100644</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l209" name="l209">209</a></td><td><pre><span class="bold">--- a/booster/twitter.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l210" name="l210">210</a></td><td><pre><span class="bold">+++ b/booster/twitter.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l211" name="l211">211</a></td><td><pre><span class="hunk">@@ -13,156 +13,156 @@</span> </span>import debug</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l212" name="l212">212</a></td><td><pre> import functions</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l213" name="l213">213</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l214" name="l214">214</a></td><td><pre> class Booster(object):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l215" name="l215">215</a></td><td><pre><span class="deletion">- def __init__(self):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l216" name="l216">216</a></td><td><pre><span class="deletion">- self.api = None</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l217" name="l217">217</a></td><td><pre><span class="deletion">- self.me = None</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l218" name="l218">218</a></td><td><pre><span class="deletion">- self.favorites = 0</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l219" name="l219">219</a></td><td><pre><span class="deletion">- self.max_favorites = config.max_favorites</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l220" name="l220">220</a></td><td><pre><span class="deletion">- self.follows = 0</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l221" name="l221">221</a></td><td><pre><span class="deletion">- self.max_follows = config.max_follows</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l222" name="l222">222</a></td><td><pre><span class="deletion">- self.messages = 0</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l223" name="l223">223</a></td><td><pre><span class="deletion">- self.max_messages = config.max_messages</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l224" name="l224">224</a></td><td><pre><span class="deletion">- self.tweets = 0</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l225" name="l225">225</a></td><td><pre><span class="deletion">- self.max_tweets = config.max_tweets</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l226" name="l226">226</a></td><td><pre><span class="deletion">- self.unfollows = 0</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l227" name="l227">227</a></td><td><pre><span class="deletion">- self.max_unfollows = config.max_unfollows</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l228" name="l228">228</a></td><td><pre><span class="deletion">- self.send_message = config.send_message</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l229" name="l229">229</a></td><td><pre><span class="deletion">- self.message = config.message</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l230" name="l230">230</a></td><td><pre><span class="insertion">+</span> <span class="insertion">def __init__(self):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l231" name="l231">231</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.api = None</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l232" name="l232">232</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.me = None</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l233" name="l233">233</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.favorites = 0</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l234" name="l234">234</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.max_favorites = config.max_favorites</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l235" name="l235">235</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.follows = 0</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l236" name="l236">236</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.max_follows = config.max_follows</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l237" name="l237">237</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.messages = 0</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l238" name="l238">238</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.max_messages = config.max_messages</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l239" name="l239">239</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.tweets = 0</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l240" name="l240">240</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.max_tweets = config.max_tweets</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l241" name="l241">241</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.unfollows = 0</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l242" name="l242">242</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.max_unfollows = config.max_unfollows</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l243" name="l243">243</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.send_message = config.send_message</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l244" name="l244">244</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.message = config.message</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l245" name="l245">245</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l246" name="l246">246</a></td><td><pre><span class="deletion">- def run(self):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l247" name="l247">247</a></td><td><pre><span class="deletion">- self.login()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l248" name="l248">248</a></td><td><pre><span class="deletion">- threading.Thread(target=self.loop_boost).start()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l249" name="l249">249</a></td><td><pre><span class="deletion">- threading.Thread(target=self.loop_favorite).start()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l250" name="l250">250</a></td><td><pre><span class="deletion">- threading.Thread(target=self.loop_follow).start()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l251" name="l251">251</a></td><td><pre><span class="deletion">- threading.Thread(target=self.loop_search).start()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l252" name="l252">252</a></td><td><pre><span class="deletion">-# threading.Thread(target=self.loop_trend).start()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l253" name="l253">253</a></td><td><pre><span class="insertion">+</span> <span class="insertion">def run(self):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l254" name="l254">254</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.login()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l255" name="l255">255</a></td><td><pre><span class="insertion">+</span> <span class="insertion">threading.Thread(target=self.loop_boost).start()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l256" name="l256">256</a></td><td><pre><span class="insertion">+</span> <span class="insertion">threading.Thread(target=self.loop_favorite).start()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l257" name="l257">257</a></td><td><pre><span class="insertion">+</span> <span class="insertion">threading.Thread(target=self.loop_follow).start()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l258" name="l258">258</a></td><td><pre><span class="insertion">+</span> <span class="insertion">threading.Thread(target=self.loop_search).start()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l259" name="l259">259</a></td><td><pre><span class="insertion">+</span> <span class="insertion">threading.Thread(target=self.loop_trend).start()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l260" name="l260">260</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l261" name="l261">261</a></td><td><pre><span class="deletion">- def login(self):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l262" name="l262">262</a></td><td><pre><span class="deletion">- try:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l263" name="l263">263</a></td><td><pre><span class="deletion">- auth = tweepy.OAuthHandler(config.consumer_key, config.consumer_secret)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l264" name="l264">264</a></td><td><pre><span class="deletion">- auth.set_access_token(config.access_token, config.access_token_secret)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l265" name="l265">265</a></td><td><pre><span class="deletion">- self.api = tweepy.API(auth, wait_on_rate_limit=True, wait_on_rate_limit_notify=True)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l266" name="l266">266</a></td><td><pre><span class="deletion">- self.me = self.api.me()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l267" name="l267">267</a></td><td><pre><span class="deletion">- except tweepy.TweepError as ex:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l268" name="l268">268</a></td><td><pre><span class="deletion">- debug.error_exit('Failed to login to Twitter! ({0})'.format(str(ex)))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l269" name="l269">269</a></td><td><pre><span class="insertion">+</span> <span class="insertion">def login(self):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l270" name="l270">270</a></td><td><pre><span class="insertion">+</span> <span class="insertion">try:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l271" name="l271">271</a></td><td><pre><span class="insertion">+</span> <span class="insertion">auth = tweepy.OAuthHandler(config.consumer_key, config.consumer_secret)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l272" name="l272">272</a></td><td><pre><span class="insertion">+</span> <span class="insertion">auth.set_access_token(config.access_token, config.access_token_secret)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l273" name="l273">273</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.api = tweepy.API(auth, wait_on_rate_limit=True, wait_on_rate_limit_notify=True)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l274" name="l274">274</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.me = self.api.me()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l275" name="l275">275</a></td><td><pre><span class="insertion">+</span> <span class="insertion">except tweepy.TweepError as ex:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l276" name="l276">276</a></td><td><pre><span class="insertion">+</span> <span class="insertion">debug.error_exit('Failed to login to Twitter! ({0})'.format(str(ex)))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l277" name="l277">277</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l278" name="l278">278</a></td><td><pre><span class="deletion">- def loop_boost(self):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l279" name="l279">279</a></td><td><pre><span class="deletion">- while True:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l280" name="l280">280</a></td><td><pre><span class="deletion">- try:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l281" name="l281">281</a></td><td><pre><span class="deletion">- if 'boost_tweet' in locals(): self.api.destroy_status(boost_tweet.id)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l282" name="l282">282</a></td><td><pre><span class="deletion">- boost_tweet = self.api.update_status('RT for followers! #' + ' #'.join(config.boost_keywords))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l283" name="l283">283</a></td><td><pre><span class="deletion">- self.tweets += 1</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l284" name="l284">284</a></td><td><pre><span class="deletion">- debug.alert('Re-posted boost tweet.')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l285" name="l285">285</a></td><td><pre><span class="deletion">- except tweepy.TweepError as ex:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l286" name="l286">286</a></td><td><pre><span class="deletion">- debug.error('Error occured in the boost loop', ex)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l287" name="l287">287</a></td><td><pre><span class="deletion">- finally:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l288" name="l288">288</a></td><td><pre><span class="deletion">- random.shuffle(config.boost_keywords)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l289" name="l289">289</a></td><td><pre><span class="deletion">- time.sleep(60*5)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l290" name="l290">290</a></td><td><pre><span class="insertion">+</span> <span class="insertion">def loop_boost(self):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l291" name="l291">291</a></td><td><pre><span class="insertion">+</span> <span class="insertion">while True:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l292" name="l292">292</a></td><td><pre><span class="insertion">+</span> <span class="insertion">try:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l293" name="l293">293</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if 'boost_tweet' in locals(): self.api.destroy_status(boost_tweet.id)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l294" name="l294">294</a></td><td><pre><span class="insertion">+</span> <span class="insertion">boost_tweet = self.api.update_status('RT for followers! #' + ' #'.join(config.boost_keywords))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l295" name="l295">295</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.tweets += 1</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l296" name="l296">296</a></td><td><pre><span class="insertion">+</span> <span class="insertion">debug.alert('Re-posted boost tweet.')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l297" name="l297">297</a></td><td><pre><span class="insertion">+</span> <span class="insertion">except tweepy.TweepError as ex:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l298" name="l298">298</a></td><td><pre><span class="insertion">+</span> <span class="insertion">debug.error('Error occured in the boost loop', ex)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l299" name="l299">299</a></td><td><pre><span class="insertion">+</span> <span class="insertion">finally:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l300" name="l300">300</a></td><td><pre><span class="insertion">+</span> <span class="insertion">random.shuffle(config.boost_keywords)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l301" name="l301">301</a></td><td><pre><span class="insertion">+</span> <span class="insertion">time.sleep(60*5)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l302" name="l302">302</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l303" name="l303">303</a></td><td><pre><span class="deletion">- def loop_favorite(self):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l304" name="l304">304</a></td><td><pre><span class="deletion">- while True:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l305" name="l305">305</a></td><td><pre><span class="deletion">- try:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l306" name="l306">306</a></td><td><pre><span class="deletion">- for tweet in tweepy.Cursor(api.home_timeline, exclude_replies=True).items(50):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l307" name="l307">307</a></td><td><pre><span class="deletion">- if tweet.user.screen_name != me.screen_name:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l308" name="l308">308</a></td><td><pre><span class="deletion">- if not tweet.favorited:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l309" name="l309">309</a></td><td><pre><span class="deletion">- if random.choice((True, False, False, False, False)):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l310" name="l310">310</a></td><td><pre><span class="deletion">- api.create_favorite(tweet.id)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l311" name="l311">311</a></td><td><pre><span class="deletion">- self.favorites += 1</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l312" name="l312">312</a></td><td><pre><span class="deletion">- debug.alert('Favorited a friends tweet!')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l313" name="l313">313</a></td><td><pre><span class="deletion">- time.sleep(30)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l314" name="l314">314</a></td><td><pre><span class="deletion">- except tweepy.TweepError as ex:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l315" name="l315">315</a></td><td><pre><span class="deletion">- debug.error('Error occured in the favorite loop!', ex)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l316" name="l316">316</a></td><td><pre><span class="deletion">- finally:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l317" name="l317">317</a></td><td><pre><span class="deletion">- time.sleep(60*15)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l318" name="l318">318</a></td><td><pre><span class="insertion">+</span> <span class="insertion">def loop_favorite(self):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l319" name="l319">319</a></td><td><pre><span class="insertion">+</span> <span class="insertion">while True:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l320" name="l320">320</a></td><td><pre><span class="insertion">+</span> <span class="insertion">try:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l321" name="l321">321</a></td><td><pre><span class="insertion">+</span> <span class="insertion">for tweet in tweepy.Cursor(self.api.home_timeline, exclude_replies=True).items(50):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l322" name="l322">322</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if tweet.user.screen_name != self.me.screen_name:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l323" name="l323">323</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if not tweet.favorited:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l324" name="l324">324</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if random.choice((True, False, False, False, False)):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l325" name="l325">325</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.api.create_favorite(tweet.id)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l326" name="l326">326</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.favorites += 1</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l327" name="l327">327</a></td><td><pre><span class="insertion">+</span> <span class="insertion">debug.alert('Favorited a friends tweet!')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l328" name="l328">328</a></td><td><pre><span class="insertion">+</span> <span class="insertion">time.sleep(30)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l329" name="l329">329</a></td><td><pre><span class="insertion">+</span> <span class="insertion">except tweepy.TweepError as ex:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l330" name="l330">330</a></td><td><pre><span class="insertion">+</span> <span class="insertion">debug.error('Error occured in the favorite loop!', ex)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l331" name="l331">331</a></td><td><pre><span class="insertion">+</span> <span class="insertion">finally:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l332" name="l332">332</a></td><td><pre><span class="insertion">+</span> <span class="insertion">time.sleep(60*15)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l333" name="l333">333</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l334" name="l334">334</a></td><td><pre><span class="deletion">- def loop_follow(self):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l335" name="l335">335</a></td><td><pre><span class="deletion">- while True:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l336" name="l336">336</a></td><td><pre><span class="deletion">- try:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l337" name="l337">337</a></td><td><pre><span class="deletion">- followers = api.followers_ids(me.screen_name)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l338" name="l338">338</a></td><td><pre><span class="deletion">- friends = api.friends_ids(me.screen_name)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l339" name="l339">339</a></td><td><pre><span class="deletion">- non_friends = [friend for friend in followers if friend not in friends]</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l340" name="l340">340</a></td><td><pre><span class="deletion">- debug.action('Following back {0} supporters...'.format(len(non_friends)))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l341" name="l341">341</a></td><td><pre><span class="deletion">- for follower in non_friends:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l342" name="l342">342</a></td><td><pre><span class="deletion">- api.create_friendship(follower)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l343" name="l343">343</a></td><td><pre><span class="deletion">- self.follows += 1</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l344" name="l344">344</a></td><td><pre><span class="deletion">- debug.alert('Followed back a follower!')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l345" name="l345">345</a></td><td><pre><span class="deletion">- if self.follows &gt;= self.max_follows:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l346" name="l346">346</a></td><td><pre><span class="deletion">- break</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l347" name="l347">347</a></td><td><pre><span class="deletion">- if self.send_message:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l348" name="l348">348</a></td><td><pre><span class="deletion">- api.send_direct_message(screen_name=follower, text=self.message)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l349" name="l349">349</a></td><td><pre><span class="deletion">- time.sleep(30)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l350" name="l350">350</a></td><td><pre><span class="deletion">- except tweepy.TweepError as ex:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l351" name="l351">351</a></td><td><pre><span class="deletion">- debug.error('Error occured in the follow loop!', ex)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l352" name="l352">352</a></td><td><pre><span class="deletion">- finally:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l353" name="l353">353</a></td><td><pre><span class="deletion">- time.sleep(60*15)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l354" name="l354">354</a></td><td><pre><span class="insertion">+</span> <span class="insertion">def loop_follow(self):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l355" name="l355">355</a></td><td><pre><span class="insertion">+</span> <span class="insertion">while True:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l356" name="l356">356</a></td><td><pre><span class="insertion">+</span> <span class="insertion">try:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l357" name="l357">357</a></td><td><pre><span class="insertion">+</span> <span class="insertion">followers = self.api.followers_ids(self.me.screen_name)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l358" name="l358">358</a></td><td><pre><span class="insertion">+</span> <span class="insertion">friends = self.api.friends_ids(self.me.screen_name)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l359" name="l359">359</a></td><td><pre><span class="insertion">+</span> <span class="insertion">non_friends = [friend for friend in followers if friend not in friends]</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l360" name="l360">360</a></td><td><pre><span class="insertion">+</span> <span class="insertion">debug.action('Following back {0} supporters...'.format(len(non_friends)))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l361" name="l361">361</a></td><td><pre><span class="insertion">+</span> <span class="insertion">for follower in non_friends:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l362" name="l362">362</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.api.create_friendship(follower)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l363" name="l363">363</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.follows += 1</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l364" name="l364">364</a></td><td><pre><span class="insertion">+</span> <span class="insertion">debug.alert('Followed back a follower!')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l365" name="l365">365</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if self.follows &gt;= self.max_follows:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l366" name="l366">366</a></td><td><pre><span class="insertion">+</span> <span class="insertion">break</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l367" name="l367">367</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if self.send_message:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l368" name="l368">368</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.api.send_direct_message(screen_name=follower, text=self.message)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l369" name="l369">369</a></td><td><pre><span class="insertion">+</span> <span class="insertion">time.sleep(30)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l370" name="l370">370</a></td><td><pre><span class="insertion">+</span> <span class="insertion">except tweepy.TweepError as ex:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l371" name="l371">371</a></td><td><pre><span class="insertion">+</span> <span class="insertion">debug.error('Error occured in the follow loop!', ex)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l372" name="l372">372</a></td><td><pre><span class="insertion">+</span> <span class="insertion">finally:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l373" name="l373">373</a></td><td><pre><span class="insertion">+</span> <span class="insertion">time.sleep(60*15)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l374" name="l374">374</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l375" name="l375">375</a></td><td><pre><span class="deletion">- def loop_search(self):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l376" name="l376">376</a></td><td><pre><span class="deletion">- while True:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l377" name="l377">377</a></td><td><pre><span class="deletion">- try:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l378" name="l378">378</a></td><td><pre><span class="deletion">- query = random.choice(config.boost_keywords)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l379" name="l379">379</a></td><td><pre><span class="deletion">- for item in api.search(q='#' + query, count=50, lang='en', result_type='recent'):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l380" name="l380">380</a></td><td><pre><span class="deletion">- if not item.user.following and not item.favorited:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l381" name="l381">381</a></td><td><pre><span class="deletion">- try:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l382" name="l382">382</a></td><td><pre><span class="deletion">- api.create_favorite(item.id)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l383" name="l383">383</a></td><td><pre><span class="deletion">- api.create_friendship(item.user.screen_name)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l384" name="l384">384</a></td><td><pre><span class="deletion">- self.favorites += 1</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l385" name="l385">385</a></td><td><pre><span class="deletion">- self.follows += 1</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l386" name="l386">386</a></td><td><pre><span class="deletion">- debug.alert('Followed a booster twitter!')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l387" name="l387">387</a></td><td><pre><span class="deletion">- except tweepy.TweepError as ex:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l388" name="l388">388</a></td><td><pre><span class="deletion">- debug.error('Unknown error occured in the search loop!', ex)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l389" name="l389">389</a></td><td><pre><span class="deletion">- time.sleep(30)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l390" name="l390">390</a></td><td><pre><span class="deletion">- except tweepy.TweepError as ex:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l391" name="l391">391</a></td><td><pre><span class="deletion">- debug.error('Error occured in the search loop!', ex)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l392" name="l392">392</a></td><td><pre><span class="deletion">- finally:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l393" name="l393">393</a></td><td><pre><span class="deletion">- time.sleep(60*15)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l394" name="l394">394</a></td><td><pre><span class="insertion">+</span> <span class="insertion">def loop_search(self):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l395" name="l395">395</a></td><td><pre><span class="insertion">+</span> <span class="insertion">while True:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l396" name="l396">396</a></td><td><pre><span class="insertion">+</span> <span class="insertion">try:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l397" name="l397">397</a></td><td><pre><span class="insertion">+</span> <span class="insertion">query = random.choice(config.boost_keywords)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l398" name="l398">398</a></td><td><pre><span class="insertion">+</span> <span class="insertion">for item in self.api.search(q='#' + query, count=50, lang='en', result_type='recent'):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l399" name="l399">399</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if not item.user.following and not item.favorited:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l400" name="l400">400</a></td><td><pre><span class="insertion">+</span> <span class="insertion">try:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l401" name="l401">401</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.api.create_favorite(item.id)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l402" name="l402">402</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.api.create_friendship(item.user.screen_name)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l403" name="l403">403</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.favorites += 1</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l404" name="l404">404</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.follows += 1</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l405" name="l405">405</a></td><td><pre><span class="insertion">+</span> <span class="insertion">debug.alert('Followed a booster twitter!')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l406" name="l406">406</a></td><td><pre><span class="insertion">+</span> <span class="insertion">except tweepy.TweepError as ex:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l407" name="l407">407</a></td><td><pre><span class="insertion">+</span> <span class="insertion">debug.error('Unknown error occured in the search loop!', ex)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l408" name="l408">408</a></td><td><pre><span class="insertion">+</span> <span class="insertion">time.sleep(30)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l409" name="l409">409</a></td><td><pre><span class="insertion">+</span> <span class="insertion">except tweepy.TweepError as ex:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l410" name="l410">410</a></td><td><pre><span class="insertion">+</span> <span class="insertion">debug.error('Error occured in the search loop!', ex)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l411" name="l411">411</a></td><td><pre><span class="insertion">+</span> <span class="insertion">finally:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l412" name="l412">412</a></td><td><pre><span class="insertion">+</span> <span class="insertion">time.sleep(60*15)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l413" name="l413">413</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l414" name="l414">414</a></td><td><pre><span class="deletion">- def loop_trend(self):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l415" name="l415">415</a></td><td><pre><span class="deletion">- while True:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l416" name="l416">416</a></td><td><pre><span class="deletion">- try:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l417" name="l417">417</a></td><td><pre><span class="deletion">- trends = self.api.trends_place(str(config.woeid))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l418" name="l418">418</a></td><td><pre><span class="deletion">- hashtags = [x['name'] for x in trends[0]['trends'] if x['name'].startswith('#')]</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l419" name="l419">419</a></td><td><pre><span class="deletion">- for trend in hashtags:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l420" name="l420">420</a></td><td><pre><span class="deletion">- for item in self.api.search(q=trend, count=5, lang='en', result_type='top'):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l421" name="l421">421</a></td><td><pre><span class="deletion">- #self.api.update_status(item.tweet) # FIX THIS PART</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l422" name="l422">422</a></td><td><pre><span class="deletion">- time.sleep(30)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l423" name="l423">423</a></td><td><pre><span class="deletion">- except tweepy.TweepError as ex:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l424" name="l424">424</a></td><td><pre><span class="deletion">- debug.error('Error occured in the trend loop!', ex)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l425" name="l425">425</a></td><td><pre><span class="deletion">- finally:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l426" name="l426">426</a></td><td><pre><span class="deletion">- time.sleep(60*15)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l427" name="l427">427</a></td><td><pre><span class="insertion">+</span> <span class="insertion">def loop_trend(self):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l428" name="l428">428</a></td><td><pre><span class="insertion">+</span> <span class="insertion">while True:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l429" name="l429">429</a></td><td><pre><span class="insertion">+</span> <span class="insertion">try:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l430" name="l430">430</a></td><td><pre><span class="insertion">+</span> <span class="insertion">trends = self.api.trends_place(str(config.woeid))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l431" name="l431">431</a></td><td><pre><span class="insertion">+</span> <span class="insertion">hashtags = [x['name'] for x in trends[0]['trends'] if x['name'].startswith('#')]</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l432" name="l432">432</a></td><td><pre><span class="insertion">+</span> <span class="insertion">for trend in hashtags:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l433" name="l433">433</a></td><td><pre><span class="insertion">+</span> <span class="insertion">for item in self.api.search(q=trend, count=5, lang='en', result_type='top'):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l434" name="l434">434</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.api.update_status(item.tweet)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l435" name="l435">435</a></td><td><pre><span class="insertion">+</span> <span class="insertion">time.sleep(30)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l436" name="l436">436</a></td><td><pre><span class="insertion">+</span> <span class="insertion">except tweepy.TweepError as ex:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l437" name="l437">437</a></td><td><pre><span class="insertion">+</span> <span class="insertion">debug.error('Error occured in the trend loop!', ex)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l438" name="l438">438</a></td><td><pre><span class="insertion">+</span> <span class="insertion">finally:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l439" name="l439">439</a></td><td><pre><span class="insertion">+</span> <span class="insertion">time.sleep(60*15)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l440" name="l440">440</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l441" name="l441">441</a></td><td><pre><span class="deletion">- def loop_unfollow(self):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l442" name="l442">442</a></td><td><pre><span class="deletion">- try:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l443" name="l443">443</a></td><td><pre><span class="deletion">- followers = self.api.followers_ids(self.me.screen_name)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l444" name="l444">444</a></td><td><pre><span class="deletion">- friends = self.api.friends_ids(self.me.screen_name)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l445" name="l445">445</a></td><td><pre><span class="deletion">- non_friends = [friend for friend in friends if friend not in followers]</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l446" name="l446">446</a></td><td><pre><span class="deletion">- non_friends.reverse()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l447" name="l447">447</a></td><td><pre><span class="deletion">- debug.action('Unfollowing {0} unsupporting friends...'.format(len(non_friends)))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l448" name="l448">448</a></td><td><pre><span class="deletion">- for friend in non_friends:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l449" name="l449">449</a></td><td><pre><span class="deletion">- self.api.destroy_friendship(friend)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l450" name="l450">450</a></td><td><pre><span class="deletion">- self.unfollows += 1</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l451" name="l451">451</a></td><td><pre><span class="deletion">- debug.alert('Unfollowed an unsupporting friend!')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l452" name="l452">452</a></td><td><pre><span class="deletion">- if self.unfollows == self.max_unfollows:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l453" name="l453">453</a></td><td><pre><span class="deletion">- break</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l454" name="l454">454</a></td><td><pre><span class="deletion">- else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l455" name="l455">455</a></td><td><pre><span class="deletion">- time.sleep(60*functions.random_int(10,15))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l456" name="l456">456</a></td><td><pre><span class="deletion">- except tweepy.TweepError as ex:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l457" name="l457">457</a></td><td><pre><span class="deletion">- debug.error('Error occured in the unfollow loop!', ex)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l458" name="l458">458</a></td><td><pre><span class="deletion">- finally:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l459" name="l459">459</a></td><td><pre><span class="deletion">- self.unfollows = 0</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l460" name="l460">460</a></td><td><pre><span class="insertion">+</span> <span class="insertion">def loop_unfollow(self):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l461" name="l461">461</a></td><td><pre><span class="insertion">+</span> <span class="insertion">try:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l462" name="l462">462</a></td><td><pre><span class="insertion">+</span> <span class="insertion">followers = self.api.followers_ids(self.me.screen_name)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l463" name="l463">463</a></td><td><pre><span class="insertion">+</span> <span class="insertion">friends = self.api.friends_ids(self.me.screen_name)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l464" name="l464">464</a></td><td><pre><span class="insertion">+</span> <span class="insertion">non_friends = [friend for friend in friends if friend not in followers]</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l465" name="l465">465</a></td><td><pre><span class="insertion">+</span> <span class="insertion">non_friends.reverse()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l466" name="l466">466</a></td><td><pre><span class="insertion">+</span> <span class="insertion">debug.action('Unfollowing {0} unsupporting friends...'.format(len(non_friends)))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l467" name="l467">467</a></td><td><pre><span class="insertion">+</span> <span class="insertion">for friend in non_friends:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l468" name="l468">468</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.api.destroy_friendship(friend)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l469" name="l469">469</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.unfollows += 1</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l470" name="l470">470</a></td><td><pre><span class="insertion">+</span> <span class="insertion">debug.alert('Unfollowed an unsupporting friend!')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l471" name="l471">471</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if self.unfollows == self.max_unfollows:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l472" name="l472">472</a></td><td><pre><span class="insertion">+</span> <span class="insertion">break</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l473" name="l473">473</a></td><td><pre><span class="insertion">+</span> <span class="insertion">else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l474" name="l474">474</a></td><td><pre><span class="insertion">+</span> <span class="insertion">time.sleep(60*functions.random_int(10,15))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l475" name="l475">475</a></td><td><pre><span class="insertion">+</span> <span class="insertion">except tweepy.TweepError as ex:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l476" name="l476">476</a></td><td><pre><span class="insertion">+</span> <span class="insertion">debug.error('Error occured in the unfollow loop!', ex)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l477" name="l477">477</a></td><td><pre><span class="insertion">+</span> <span class="insertion">finally:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l478" name="l478">478</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.unfollows = 0</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l479" name="l479">479</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l480" name="l480">480</a></td><td><pre><span class="deletion">- def ratio_check(self):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l481" name="l481">481</a></td><td><pre><span class="deletion">- if self.follows &gt;= max_follows:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l482" name="l482">482</a></td><td><pre><span class="deletion">- time.sleep(86400)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l483" name="l483">483</a></td><td><pre><span class="deletion">- if me.friends_count &gt;= 2000:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l484" name="l484">484</a></td><td><pre><span class="deletion">- ratio = me.friends_count + (me.followers_count/10)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l485" name="l485">485</a></td><td><pre><span class="deletion">- if me.friends_count &gt;= ratio:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l486" name="l486">486</a></td><td><pre><span class="deletion">- debug.action('Following to follower ratio is off! Starting the unfollow loop...')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l487" name="l487">487</a></td><td><pre><span class="deletion">- unfollow_loop()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l488" name="l488">488</a></td><td><pre><span class="insertion">+</span> <span class="insertion">def ratio_check(self):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l489" name="l489">489</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if self.follows &gt;= max_follows:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l490" name="l490">490</a></td><td><pre><span class="insertion">+</span> <span class="insertion">time.sleep(86400)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l491" name="l491">491</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if self.me.friends_count &gt;= 2000:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l492" name="l492">492</a></td><td><pre><span class="insertion">+</span> <span class="insertion">ratio = self.me.friends_count + (self.me.followers_count/10)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l493" name="l493">493</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if self.me.friends_count &gt;= ratio:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l494" name="l494">494</a></td><td><pre><span class="insertion">+</span> <span class="insertion">debug.action('Following to follower ratio is off! Starting the unfollow loop...')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l495" name="l495">495</a></td><td><pre><span class="insertion">+</span> <span class="insertion">unfollow_loop()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l496" name="l496">496</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l497" name="l497">497</a></td><td><pre><span class="deletion">- def stats(self):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l498" name="l498">498</a></td><td><pre><span class="deletion">- debug.action('SceenName : ' + self.me.screen_name)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l499" name="l499">499</a></td><td><pre><span class="deletion">- debug.action('Registered : ' + self.me.created_at)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l500" name="l500">500</a></td><td><pre><span class="deletion">- debug.action('Favorites : ' + self.me.favourites_count)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l501" name="l501">501</a></td><td><pre><span class="deletion">- debug.action('Following : ' + self.me.friends_count)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l502" name="l502">502</a></td><td><pre><span class="deletion">- debug.action('Followers : ' + self.me.followers_count)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l503" name="l503">503</a></td><td><pre><span class="deletion">- debug.action('Tweets : ' + self.me.statuses_count)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l504" name="l504">504</a></td><td><pre><span class="insertion">+</span> <span class="insertion">def stats(self):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l505" name="l505">505</a></td><td><pre><span class="insertion">+</span> <span class="insertion">debug.action('SceenName : ' + self.me.screen_name)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l506" name="l506">506</a></td><td><pre><span class="insertion">+</span> <span class="insertion">debug.action('Registered : ' + self.me.created_at)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l507" name="l507">507</a></td><td><pre><span class="insertion">+</span> <span class="insertion">debug.action('Favorites : ' + self.me.favourites_count)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l508" name="l508">508</a></td><td><pre><span class="insertion">+</span> <span class="insertion">debug.action('Following : ' + self.me.friends_count)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l509" name="l509">509</a></td><td><pre><span class="insertion">+</span> <span class="insertion">debug.action('Followers : ' + self.me.followers_count)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l510" name="l510">510</a></td><td><pre><span class="insertion">+</span> <span class="insertion">debug.action('Tweets : ' + self.me.statuses_count)</span></pre></td></tr>
</table>
<div id="footer">site generated by <a href="https://github.com/acidvegas/stagit" target="_blank">stagit</a> on <a href="#">05/03/20</a></div>

View File

@ -1,30 +0,0 @@
<!doctype html>
<link rel="stylesheet" href="../../style.css">
<title>booster :: eb9690c</title>
<h1><a href="../index.html" title="Back to Repository">&larr;&#xFE0E;</a> booster :: eb9690c</h1>
<hr>
<table id="main" cellpadding="0" cellspacing="0">
<tr class="item"><td class="linenumber"><a href="#l1" name="l1">1</a></td><td><pre><span class="commit">commit eb9690c31f547b9f46f518b3d8bf0a4bd8e8eb5a</span><span class="commit"> (</span><span class="reference">HEAD -&gt; </span><span class="branch">master</span><span class="commit">, </span><span class="remote">origin/master</span><span class="commit">)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l2" name="l2">2</a></td><td><pre>Author: acidvegas &lt;acid.vegas@acid.vegas&gt;</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l3" name="l3">3</a></td><td><pre>Date: Thu Apr 9 21:56:05 2020 -0400</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l4" name="l4">4</a></td><td><pre></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l5" name="l5">5</a></td><td><pre> fixed typo</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l6" name="l6">6</a></td><td><pre>---</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l7" name="l7">7</a></td><td><pre> README.md | 2 <span class="insertion">+</span><span class="deletion">-</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l8" name="l8">8</a></td><td><pre> 1 file changed, 1 insertion(+), 1 deletion(-)</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l9" name="l9">9</a></td><td><pre></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l10" name="l10">10</a></td><td><pre><span class="bold">diff --git a/README.md b/README.md</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l11" name="l11">11</a></td><td><pre><span class="bold">index 327f18d..bb922ed 100644</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l12" name="l12">12</a></td><td><pre><span class="bold">--- a/README.md</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l13" name="l13">13</a></td><td><pre><span class="bold">+++ b/README.md</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l14" name="l14">14</a></td><td><pre><span class="hunk">@@ -8,7 +8,7 @@</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l15" name="l15">15</a></td><td><pre> ## Information</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l16" name="l16">16</a></td><td><pre> This bot will build you followers on Twitter automatically by doing a number of things. Every 5 minutes the bot will tweet a status with a bunch of &quot;follow-for-follow&quot; type hashtags. This way anyone searching for those hashtags to gain follows will always see your tweet as one of the most recent. Before it posts a new tweet, it will delete the previous tweet, so you dont spam your followers. All of the hashtags the bot tweets for followers are also searched for on Twitter and the most recent are followed and favorited. It will favorite tweets of the people you follow. Anyone that follows your Twitter will be followed back, and optionally messaged. People who you follow that are not following you back are unfollowed eventually. Trending tweets are randomly stolen and tweeted as your own.</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l17" name="l17">17</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l18" name="l18">18</a></td><td><pre><span class="deletion">-Everything this bot does is extremely throttles to prevent getting your account suspended. It is meant to be running 24/7 without any interaction needed.</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l19" name="l19">19</a></td><td><pre><span class="insertion">+</span><span class="insertion">Everything this bot does is extremely throttled to prevent getting your account suspended. It is meant to be running 24/7 without any interaction needed.</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l20" name="l20">20</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l21" name="l21">21</a></td><td><pre> ## Instructions</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l22" name="l22">22</a></td><td><pre> Create a Twitter account &amp; [sign up](http://dev.twitter.com/apps/new) for a new developer application.</span></pre></td></tr>
</table>
<div id="footer">site generated by <a href="https://github.com/acidvegas/stagit" target="_blank">stagit</a> on <a href="#">05/03/20</a></div>

View File

@ -1,17 +0,0 @@
<!doctype html>
<link rel="stylesheet" href="../style.css">
<title>booster</title>
<h1><a href="../index.html" title="Home">&#8962;&#xFE0E;</a> booster</h1>
<div style="padding-left:30px">
<h4>twitter bot that builds followers</h4>
<h5>git clone <a href="https://github.com/acidvegas/booster.git" title="booster clone URL">https://github.com/acidvegas/booster.git</a></h5>
</div>
<hr>
<table id="main" cellpadding="0" cellspacing="0">
<tr id="navigation"><th></th><th>Hash</th><th>Commit message</th><th>Author</th><th>Date</th><th align="right">Files</th><th align="right">+</th><th align="right">-</th></tr>
<tr class="item"><td><span style="color:green" title="acidvegas (MOST DANGEROUS MOTHERFUCK) <acid.vegas@acid.vegas>&#13;EF4B922DB85DC9DE">&#128274;&#xFE0E;</span></td><td><a href="commit/eb9690c.html" title="View this commit">eb9690c</a></td><td>fixed typo</td><td>acidvegas</td><td>2020-04-09 21:56</td><td align="right">1</td><td align="right">+1</td><td align="right">-1</td></tr>
<tr class="item"><td><span style="color:green" title="acidvegas (MOST DANGEROUS MOTHERFUCK) <acid.vegas@acid.vegas>&#13;EF4B922DB85DC9DE">&#128274;&#xFE0E;</span></td><td><a href="commit/7c68368.html" title="View this commit">7c68368</a></td><td>Revived and fixed a lot of things</td><td>acidvegas</td><td>2020-04-09 21:54</td><td align="right">7</td><td align="right">+167</td><td align="right">-294</td></tr>
<tr class="item"><td></td><td><a href="commit/d9f8aa3.html" title="View this commit">d9f8aa3</a></td><td>minor update to prepair for major cleanup</td><td>acidvegas</td><td>2019-08-02 02:56</td><td align="right">5</td><td align="right">+190</td><td align="right">-215</td></tr>
<tr class="item"><td></td><td><a href="commit/624276b.html" title="View this commit">624276b</a></td><td>Initial commit</td><td>acidvegas</td><td>2019-06-27 23:41</td><td align="right">7</td><td align="right">+368</td><td align="right">-0</td></tr>
</table>
<div id="footer">site generated by <a href="https://github.com/acidvegas/stagit" target="_blank">stagit</a> on <a href="#">05/03/20</a></div>

View File

@ -1,464 +0,0 @@
<!doctype html>
<link rel="stylesheet" href="../../style.css">
<title>chir.py :: 010429d</title>
<h1><a href="../index.html" title="Back to Repository">&larr;&#xFE0E;</a> chir.py :: 010429d</h1>
<hr>
<table id="main" cellpadding="0" cellspacing="0">
<tr class="item"><td class="linenumber"><a href="#l1" name="l1">1</a></td><td><pre><span class="commit">commit 010429dae4163c7c8693ff10a572d5f2b148d736</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l2" name="l2">2</a></td><td><pre>Author: acidvegas &lt;acid.vegas@acid.vegas&gt;</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l3" name="l3">3</a></td><td><pre>Date: Fri Jun 28 01:07:10 2019 -0400</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l4" name="l4">4</a></td><td><pre></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l5" name="l5">5</a></td><td><pre> Initial commit</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l6" name="l6">6</a></td><td><pre>---</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l7" name="l7">7</a></td><td><pre> LICENSE | 15 <span class="insertion">+++++</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l8" name="l8">8</a></td><td><pre> README.md | 24 <span class="insertion">++++++++</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l9" name="l9">9</a></td><td><pre> chir.py/chir.py | 22 <span class="insertion">++++++++</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l10" name="l10">10</a></td><td><pre> chir.py/config.py | 39 <span class="insertion">+++++++++++++</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l11" name="l11">11</a></td><td><pre> chir.py/debug.py | 89 <span class="insertion">+++++++++++++++++++++++++++++</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l12" name="l12">12</a></td><td><pre> chir.py/functions.py | 55 <span class="insertion">++++++++++++++++++</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l13" name="l13">13</a></td><td><pre> chir.py/twitter.py | 155 <span class="insertion">+++++++++++++++++++++++++++++++++++++++++++++++++++</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l14" name="l14">14</a></td><td><pre> 7 files changed, 399 insertions(+)</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l15" name="l15">15</a></td><td><pre></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l16" name="l16">16</a></td><td><pre><span class="bold">diff --git a/LICENSE b/LICENSE</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l17" name="l17">17</a></td><td><pre><span class="bold">new file mode 100644</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l18" name="l18">18</a></td><td><pre><span class="bold">index 0000000..69997e8</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l19" name="l19">19</a></td><td><pre><span class="bold">--- /dev/null</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l20" name="l20">20</a></td><td><pre><span class="bold">+++ b/LICENSE</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l21" name="l21">21</a></td><td><pre><span class="hunk">@@ -0,0 +1,15 @@</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l22" name="l22">22</a></td><td><pre><span class="insertion">+</span><span class="insertion">ISC License</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l23" name="l23">23</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l24" name="l24">24</a></td><td><pre><span class="insertion">+</span><span class="insertion">Copyright (c) 2019, acidvegas &lt;acid.vegas@acid.vegas&gt;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l25" name="l25">25</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l26" name="l26">26</a></td><td><pre><span class="insertion">+</span><span class="insertion">Permission to use, copy, modify, and/or distribute this software for any</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l27" name="l27">27</a></td><td><pre><span class="insertion">+</span><span class="insertion">purpose with or without fee is hereby granted, provided that the above</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l28" name="l28">28</a></td><td><pre><span class="insertion">+</span><span class="insertion">copyright notice and this permission notice appear in all copies.</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l29" name="l29">29</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l30" name="l30">30</a></td><td><pre><span class="insertion">+</span><span class="insertion">THE SOFTWARE IS PROVIDED &quot;AS IS&quot; AND THE AUTHOR DISCLAIMS ALL WARRANTIES</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l31" name="l31">31</a></td><td><pre><span class="insertion">+</span><span class="insertion">WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l32" name="l32">32</a></td><td><pre><span class="insertion">+</span><span class="insertion">MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l33" name="l33">33</a></td><td><pre><span class="insertion">+</span><span class="insertion">ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l34" name="l34">34</a></td><td><pre><span class="insertion">+</span><span class="insertion">WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l35" name="l35">35</a></td><td><pre><span class="insertion">+</span><span class="insertion">ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l36" name="l36">36</a></td><td><pre><span class="insertion">+</span><span class="insertion">OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l37" name="l37">37</a></td><td><pre><span class="bold">diff --git a/README.md b/README.md</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l38" name="l38">38</a></td><td><pre><span class="bold">new file mode 100644</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l39" name="l39">39</a></td><td><pre><span class="bold">index 0000000..2a37055</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l40" name="l40">40</a></td><td><pre><span class="bold">--- /dev/null</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l41" name="l41">41</a></td><td><pre><span class="bold">+++ b/README.md</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l42" name="l42">42</a></td><td><pre><span class="hunk">@@ -0,0 +1,24 @@</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l43" name="l43">43</a></td><td><pre><span class="insertion">+</span><span class="insertion">###### Requirments</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l44" name="l44">44</a></td><td><pre><span class="insertion">+</span><span class="insertion">* [FeedParser](http://pypi.python.org/pypi/feedparser)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l45" name="l45">45</a></td><td><pre><span class="insertion">+</span><span class="insertion">* [Tweepy](http://pypi.python.org/pypi/tweepy)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l46" name="l46">46</a></td><td><pre><span class="insertion">+</span><span class="insertion">* [ndg-httpsclient](http://pypi.python.org/pypi/ndg-httpsclient) *(Install only if you are getting an &quot;InsecurePlatformWarning&quot; error.)*</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l47" name="l47">47</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l48" name="l48">48</a></td><td><pre><span class="insertion">+</span><span class="insertion">###### Instructions</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l49" name="l49">49</a></td><td><pre><span class="insertion">+</span><span class="insertion">Register a Twitter account, and [sign up](http://dev.twitter.com/apps/new) for a new developer application.</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l50" name="l50">50</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l51" name="l51">51</a></td><td><pre><span class="insertion">+</span><span class="insertion">Go to your new application settings &quot;Keys and Access Tokens&quot; tab.</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l52" name="l52">52</a></td><td><pre><span class="insertion">+</span><span class="insertion">Click the &quot;Create Your Access Token&quot; button on the bottom.</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l53" name="l53">53</a></td><td><pre><span class="insertion">+</span><span class="insertion">These will be used in the config to connect to your Twitter account.</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l54" name="l54">54</a></td><td><pre><span class="insertion">+</span><span class="insertion">Go to your new application settings &quot;Permissions&quot;.</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l55" name="l55">55</a></td><td><pre><span class="insertion">+</span><span class="insertion">Change your access to &quot;Read, Write and Access direct messages&quot;.</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l56" name="l56">56</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l57" name="l57">57</a></td><td><pre><span class="insertion">+</span><span class="insertion">Register a [CoinURL](http://coinurl.com/) account and get your [api key](http://coinurl.com/profile-api.php).</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l58" name="l58">58</a></td><td><pre><span class="insertion">+</span><span class="insertion">The random number you will see after &quot;uuid&quot; is your unique user id that will be use in the config.</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l59" name="l59">59</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l60" name="l60">60</a></td><td><pre><span class="insertion">+</span><span class="insertion">Edit your `config.py` and change the Twitter &amp; CoinURL API settings.</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l61" name="l61">61</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l62" name="l62">62</a></td><td><pre><span class="insertion">+</span><span class="insertion">###### Mirrors</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l63" name="l63">63</a></td><td><pre><span class="insertion">+</span><span class="insertion">- [acid.vegas](https://acid.vegas/chir.py) *(main)*</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l64" name="l64">64</a></td><td><pre><span class="insertion">+</span><span class="insertion">- [SuperNETs](https://git.supernets.org/acidvegas/chir.py)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l65" name="l65">65</a></td><td><pre><span class="insertion">+</span><span class="insertion">- [GitHub](https://github.com/acidvegas/chir.py)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l66" name="l66">66</a></td><td><pre><span class="insertion">+</span><span class="insertion">- [GitLab](https://gitlab.com/acidvegas/chir.py)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l67" name="l67">67</a></td><td><pre><span class="bold">diff --git a/chir.py/chir.py b/chir.py/chir.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l68" name="l68">68</a></td><td><pre><span class="bold">new file mode 100644</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l69" name="l69">69</a></td><td><pre><span class="bold">index 0000000..3466fc6</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l70" name="l70">70</a></td><td><pre><span class="bold">--- /dev/null</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l71" name="l71">71</a></td><td><pre><span class="bold">+++ b/chir.py/chir.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l72" name="l72">72</a></td><td><pre><span class="hunk">@@ -0,0 +1,22 @@</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l73" name="l73">73</a></td><td><pre><span class="insertion">+</span><span class="insertion">#!/usr/bin/env python</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l74" name="l74">74</a></td><td><pre><span class="insertion">+</span><span class="insertion"># Chir.py Twitter Bot - Developed by acidvegas in Python (https://acid.vegas/chir.py)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l75" name="l75">75</a></td><td><pre><span class="insertion">+</span><span class="insertion"># chir.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l76" name="l76">76</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l77" name="l77">77</a></td><td><pre><span class="insertion">+</span><span class="insertion">import sys</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l78" name="l78">78</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l79" name="l79">79</a></td><td><pre><span class="insertion">+</span><span class="insertion">sys.dont_write_bytecode = True</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l80" name="l80">80</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l81" name="l81">81</a></td><td><pre><span class="insertion">+</span><span class="insertion">import debug</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l82" name="l82">82</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l83" name="l83">83</a></td><td><pre><span class="insertion">+</span><span class="insertion">debug.info()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l84" name="l84">84</a></td><td><pre><span class="insertion">+</span><span class="insertion">if not debug.check_version(3):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l85" name="l85">85</a></td><td><pre><span class="insertion">+</span><span class="insertion"> debug.error_exit('Chir.py requires Python version 3 to run!')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l86" name="l86">86</a></td><td><pre><span class="insertion">+</span><span class="insertion">if not debug.get_windows():</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l87" name="l87">87</a></td><td><pre><span class="insertion">+</span><span class="insertion"> if debug.check_root():</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l88" name="l88">88</a></td><td><pre><span class="insertion">+</span><span class="insertion"> debug.error_exit('Do not run Chir.py as root!')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l89" name="l89">89</a></td><td><pre><span class="insertion">+</span><span class="insertion">debug.check_imports()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l90" name="l90">90</a></td><td><pre><span class="insertion">+</span><span class="insertion">debug.check_config()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l91" name="l91">91</a></td><td><pre><span class="insertion">+</span><span class="insertion">import twitter</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l92" name="l92">92</a></td><td><pre><span class="insertion">+</span><span class="insertion">twitter.login()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l93" name="l93">93</a></td><td><pre><span class="insertion">+</span><span class="insertion">twitter.main_loop()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l94" name="l94">94</a></td><td><pre><span class="insertion">+</span><span class="insertion">debug.keep_alive()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l95" name="l95">95</a></td><td><pre><span class="bold">diff --git a/chir.py/config.py b/chir.py/config.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l96" name="l96">96</a></td><td><pre><span class="bold">new file mode 100644</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l97" name="l97">97</a></td><td><pre><span class="bold">index 0000000..79027bb</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l98" name="l98">98</a></td><td><pre><span class="bold">--- /dev/null</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l99" name="l99">99</a></td><td><pre><span class="bold">+++ b/chir.py/config.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l100" name="l100">100</a></td><td><pre><span class="hunk">@@ -0,0 +1,39 @@</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l101" name="l101">101</a></td><td><pre><span class="insertion">+</span><span class="insertion">#!/usr/bin/env python</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l102" name="l102">102</a></td><td><pre><span class="insertion">+</span><span class="insertion"># Chir.py Twitter Bot - Developed by acidvegas in Python (https://acid.vegas/chir.py)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l103" name="l103">103</a></td><td><pre><span class="insertion">+</span><span class="insertion"># config.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l104" name="l104">104</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l105" name="l105">105</a></td><td><pre><span class="insertion">+</span><span class="insertion"># API Settings</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l106" name="l106">106</a></td><td><pre><span class="insertion">+</span><span class="insertion">coinurl_uuid = 'CHANGEME'</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l107" name="l107">107</a></td><td><pre><span class="insertion">+</span><span class="insertion">twitter_consumer_key = 'CHANGEME'</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l108" name="l108">108</a></td><td><pre><span class="insertion">+</span><span class="insertion">twitter_consumer_secret = 'CHANGEME'</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l109" name="l109">109</a></td><td><pre><span class="insertion">+</span><span class="insertion">twitter_access_token = 'CHANGEME'</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l110" name="l110">110</a></td><td><pre><span class="insertion">+</span><span class="insertion">twitter_access_token_secret = 'CHANGEME'</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l111" name="l111">111</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l112" name="l112">112</a></td><td><pre><span class="insertion">+</span><span class="insertion"># Keywords &amp; News Sources (DO NOT EDIT)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l113" name="l113">113</a></td><td><pre><span class="insertion">+</span><span class="insertion">boost_keywords = ('500aday','autofollow','autofollowback','f4f','follow','follow4follow','followback','followtrain','teamfollowback','wefollowback')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l114" name="l114">114</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l115" name="l115">115</a></td><td><pre><span class="insertion">+</span><span class="insertion">news_feeds = {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l116" name="l116">116</a></td><td><pre><span class="insertion">+</span><span class="insertion"> 'baseball' : 'https://sports.yahoo.com/mlb/rss.xml',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l117" name="l117">117</a></td><td><pre><span class="insertion">+</span><span class="insertion"> 'basketball' : 'https://sports.yahoo.com/nba/rss.xml',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l118" name="l118">118</a></td><td><pre><span class="insertion">+</span><span class="insertion"> 'boxing' : 'https://sports.yahoo.com/box/rss.xml',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l119" name="l119">119</a></td><td><pre><span class="insertion">+</span><span class="insertion"> 'football' : 'https://sports.yahoo.com/nfl/rss.xml',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l120" name="l120">120</a></td><td><pre><span class="insertion">+</span><span class="insertion"> 'golf' : 'https://sports.yahoo.com/golf/rss.xml',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l121" name="l121">121</a></td><td><pre><span class="insertion">+</span><span class="insertion"> 'hockey' : 'https://sports.yahoo.com/nhl/rss.xml',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l122" name="l122">122</a></td><td><pre><span class="insertion">+</span><span class="insertion"> 'mma' : 'https://sports.yahoo.com/mma/rss.xml',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l123" name="l123">123</a></td><td><pre><span class="insertion">+</span><span class="insertion"> 'nascar' : 'https://sports.yahoo.com/nascar/rss.xml',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l124" name="l124">124</a></td><td><pre><span class="insertion">+</span><span class="insertion"> 'soccer' : 'https://sports.yahoo.com/soccer/rss.xml',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l125" name="l125">125</a></td><td><pre><span class="insertion">+</span><span class="insertion"> 'tennis' : 'https://sports.yahoo.com/tennis/rss.xml'</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l126" name="l126">126</a></td><td><pre><span class="insertion">+</span><span class="insertion">}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l127" name="l127">127</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l128" name="l128">128</a></td><td><pre><span class="insertion">+</span><span class="insertion">news_keywords = {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l129" name="l129">129</a></td><td><pre><span class="insertion">+</span><span class="insertion"> 'baseball' : ('baseball','mlb','homerun','worldseries','springtraining','angels','astros','athletics','bluejays','braves','brewers','cardinals','cubs','diamondbacks','dodgers','giants','indians','mariners','marlins','mets','nationals','orioles','padres','phillies','pirates','rangers','rays','redsox','reds','rockies','royals','tigers','twins','whitesox','yankees'),</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l130" name="l130">130</a></td><td><pre><span class="insertion">+</span><span class="insertion"> 'basketball' : ('basketball','finals','nba','76ers','blazers','bucks','bulls','cavaliers','celtics','clippers','grizzlies','hawks','heat','hornets','jazz','kings','knicks','lakers','magic','mavericks','nets','nuggets','pacers','pistons','raptors','rockets','spurs','suns','thunder','timberwolves','warriors','wizards'),</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l131" name="l131">131</a></td><td><pre><span class="insertion">+</span><span class="insertion"> 'boxing' : ('boxing','fightnight'),</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l132" name="l132">132</a></td><td><pre><span class="insertion">+</span><span class="insertion"> 'football' : ('football','madden','nfl','superbowl','touchdown','49ers','bears','bengals','bills','broncos','browns','bucaneers','cardinals','chargers','cheifs','colts','cowboys','dolphins','eagles','falcons','giants','jaguars','jets','lions','packers','panthers','patriots','raiders','rams','ravens','redskins','saints','seahawks','steelers','texans','titans','vikings'),</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l133" name="l133">133</a></td><td><pre><span class="insertion">+</span><span class="insertion"> 'golf' : ('fedexcup','owgr','pga','pgachampionship','pgatour'),</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l134" name="l134">134</a></td><td><pre><span class="insertion">+</span><span class="insertion"> 'hockey' : ('hockey','nhl','worldcup','avalanche','blackhawks','bluejackets','blues','bruins','canadiens','canucks','capitals','coyotes','devils','ducks','flames','flyers','hurricanes','islanders','jets','kings','lightning','mapleleafs','oilers','panthers','penguins','predators','rangers','redwings','sabres','senators','sharks','stars','wild'),</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l135" name="l135">135</a></td><td><pre><span class="insertion">+</span><span class="insertion"> 'mma' : ('bellator','martialarts','mixedmartialarts','mma','ufc','wsof'),</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l136" name="l136">136</a></td><td><pre><span class="insertion">+</span><span class="insertion"> 'nascar' : ('buschseries','campingworldtruckseries','daytona500','iracing','nascar','sprintcup','sprintseries','winstoncup','winstoncupseries','xfinityseries'),</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l137" name="l137">137</a></td><td><pre><span class="insertion">+</span><span class="insertion"> 'soccer' : ('fifa','soccer','worldcup'),</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l138" name="l138">138</a></td><td><pre><span class="insertion">+</span><span class="insertion"> 'tennis' : ('atp','atpworldtour','masters1000','tennis','usopen')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l139" name="l139">139</a></td><td><pre><span class="insertion">+</span><span class="insertion">}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l140" name="l140">140</a></td><td><pre><span class="bold">diff --git a/chir.py/debug.py b/chir.py/debug.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l141" name="l141">141</a></td><td><pre><span class="bold">new file mode 100644</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l142" name="l142">142</a></td><td><pre><span class="bold">index 0000000..8670f13</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l143" name="l143">143</a></td><td><pre><span class="bold">--- /dev/null</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l144" name="l144">144</a></td><td><pre><span class="bold">+++ b/chir.py/debug.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l145" name="l145">145</a></td><td><pre><span class="hunk">@@ -0,0 +1,89 @@</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l146" name="l146">146</a></td><td><pre><span class="insertion">+</span><span class="insertion">#!/usr/bin/env python</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l147" name="l147">147</a></td><td><pre><span class="insertion">+</span><span class="insertion"># Chir.py Twitter Bot - Developed by acidvegas in Python (https://acid.vegas/chir.py)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l148" name="l148">148</a></td><td><pre><span class="insertion">+</span><span class="insertion"># debug.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l149" name="l149">149</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l150" name="l150">150</a></td><td><pre><span class="insertion">+</span><span class="insertion">import os</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l151" name="l151">151</a></td><td><pre><span class="insertion">+</span><span class="insertion">import sys</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l152" name="l152">152</a></td><td><pre><span class="insertion">+</span><span class="insertion">import time</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l153" name="l153">153</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l154" name="l154">154</a></td><td><pre><span class="insertion">+</span><span class="insertion">import config</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l155" name="l155">155</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l156" name="l156">156</a></td><td><pre><span class="insertion">+</span><span class="insertion">def action(msg):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l157" name="l157">157</a></td><td><pre><span class="insertion">+</span><span class="insertion"> print('%s | [#] - %s' % (get_time(), msg))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l158" name="l158">158</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l159" name="l159">159</a></td><td><pre><span class="insertion">+</span><span class="insertion">def alert(msg):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l160" name="l160">160</a></td><td><pre><span class="insertion">+</span><span class="insertion"> print('%s | [+] - %s' % (get_time(), msg))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l161" name="l161">161</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l162" name="l162">162</a></td><td><pre><span class="insertion">+</span><span class="insertion">def check_config():</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l163" name="l163">163</a></td><td><pre><span class="insertion">+</span><span class="insertion"> for item in (config.coinurl_uuid, config.twitter_consumer_key, config.twitter_consumer_secret, config.twitter_access_token, config.twitter_access_token_secret):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l164" name="l164">164</a></td><td><pre><span class="insertion">+</span><span class="insertion"> if item == 'CHANGEME':</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l165" name="l165">165</a></td><td><pre><span class="insertion">+</span><span class="insertion"> error_exit('Edit your config file!')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l166" name="l166">166</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l167" name="l167">167</a></td><td><pre><span class="insertion">+</span><span class="insertion">def check_imports():</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l168" name="l168">168</a></td><td><pre><span class="insertion">+</span><span class="insertion"> try:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l169" name="l169">169</a></td><td><pre><span class="insertion">+</span><span class="insertion"> import tweepy</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l170" name="l170">170</a></td><td><pre><span class="insertion">+</span><span class="insertion"> except ImportError:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l171" name="l171">171</a></td><td><pre><span class="insertion">+</span><span class="insertion"> error_exit('Failed to import the Tweepy library! (http://pypi.python.org/pypi/tweepy)')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l172" name="l172">172</a></td><td><pre><span class="insertion">+</span><span class="insertion"> try:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l173" name="l173">173</a></td><td><pre><span class="insertion">+</span><span class="insertion"> import feedparser</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l174" name="l174">174</a></td><td><pre><span class="insertion">+</span><span class="insertion"> except ImportError:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l175" name="l175">175</a></td><td><pre><span class="insertion">+</span><span class="insertion"> error_exit('Failed to import the FeedParser library! (http://pypi.python.org/pypi/feedparser)')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l176" name="l176">176</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l177" name="l177">177</a></td><td><pre><span class="insertion">+</span><span class="insertion">def check_root():</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l178" name="l178">178</a></td><td><pre><span class="insertion">+</span><span class="insertion"> if os.getuid() == 0 or os.geteuid() == 0:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l179" name="l179">179</a></td><td><pre><span class="insertion">+</span><span class="insertion"> return True</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l180" name="l180">180</a></td><td><pre><span class="insertion">+</span><span class="insertion"> else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l181" name="l181">181</a></td><td><pre><span class="insertion">+</span><span class="insertion"> return False</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l182" name="l182">182</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l183" name="l183">183</a></td><td><pre><span class="insertion">+</span><span class="insertion">def check_version(major):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l184" name="l184">184</a></td><td><pre><span class="insertion">+</span><span class="insertion"> if sys.version_info.major == major:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l185" name="l185">185</a></td><td><pre><span class="insertion">+</span><span class="insertion"> return True</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l186" name="l186">186</a></td><td><pre><span class="insertion">+</span><span class="insertion"> else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l187" name="l187">187</a></td><td><pre><span class="insertion">+</span><span class="insertion"> return False</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l188" name="l188">188</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l189" name="l189">189</a></td><td><pre><span class="insertion">+</span><span class="insertion">def check_windows():</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l190" name="l190">190</a></td><td><pre><span class="insertion">+</span><span class="insertion"> if os.name == 'nt':</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l191" name="l191">191</a></td><td><pre><span class="insertion">+</span><span class="insertion"> return True</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l192" name="l192">192</a></td><td><pre><span class="insertion">+</span><span class="insertion"> else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l193" name="l193">193</a></td><td><pre><span class="insertion">+</span><span class="insertion"> return False</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l194" name="l194">194</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l195" name="l195">195</a></td><td><pre><span class="insertion">+</span><span class="insertion">def clear():</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l196" name="l196">196</a></td><td><pre><span class="insertion">+</span><span class="insertion"> if check_windows():</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l197" name="l197">197</a></td><td><pre><span class="insertion">+</span><span class="insertion"> os.system('cls')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l198" name="l198">198</a></td><td><pre><span class="insertion">+</span><span class="insertion"> else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l199" name="l199">199</a></td><td><pre><span class="insertion">+</span><span class="insertion"> os.system('clear')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l200" name="l200">200</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l201" name="l201">201</a></td><td><pre><span class="insertion">+</span><span class="insertion">def error(msg, reason=None):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l202" name="l202">202</a></td><td><pre><span class="insertion">+</span><span class="insertion"> if reason:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l203" name="l203">203</a></td><td><pre><span class="insertion">+</span><span class="insertion"> print('%s | [!] - %s (%s)' % (get_time(), msg, str(reason)))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l204" name="l204">204</a></td><td><pre><span class="insertion">+</span><span class="insertion"> else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l205" name="l205">205</a></td><td><pre><span class="insertion">+</span><span class="insertion"> print('%s | [!] - %s' % (get_time(), msg))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l206" name="l206">206</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l207" name="l207">207</a></td><td><pre><span class="insertion">+</span><span class="insertion">def error_exit(msg):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l208" name="l208">208</a></td><td><pre><span class="insertion">+</span><span class="insertion"> raise SystemExit('%s | [!] - %s' % (get_time(), msg))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l209" name="l209">209</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l210" name="l210">210</a></td><td><pre><span class="insertion">+</span><span class="insertion">def get_time():</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l211" name="l211">211</a></td><td><pre><span class="insertion">+</span><span class="insertion"> return time.strftime('%I:%M:%S')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l212" name="l212">212</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l213" name="l213">213</a></td><td><pre><span class="insertion">+</span><span class="insertion">def get_windows():</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l214" name="l214">214</a></td><td><pre><span class="insertion">+</span><span class="insertion"> if os.name == 'nt':</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l215" name="l215">215</a></td><td><pre><span class="insertion">+</span><span class="insertion"> return True</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l216" name="l216">216</a></td><td><pre><span class="insertion">+</span><span class="insertion"> else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l217" name="l217">217</a></td><td><pre><span class="insertion">+</span><span class="insertion"> return False</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l218" name="l218">218</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l219" name="l219">219</a></td><td><pre><span class="insertion">+</span><span class="insertion">def info():</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l220" name="l220">220</a></td><td><pre><span class="insertion">+</span><span class="insertion"> clear()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l221" name="l221">221</a></td><td><pre><span class="insertion">+</span><span class="insertion"> print(''.rjust(56, '#'))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l222" name="l222">222</a></td><td><pre><span class="insertion">+</span><span class="insertion"> print('#' + ''.center(54) + '#')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l223" name="l223">223</a></td><td><pre><span class="insertion">+</span><span class="insertion"> print('#' + 'Chir.py Twitter Bot'.center(54) + '#')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l224" name="l224">224</a></td><td><pre><span class="insertion">+</span><span class="insertion"> print('#' + 'Developed by acidvegas in Python '.center(54) + '#')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l225" name="l225">225</a></td><td><pre><span class="insertion">+</span><span class="insertion"> print('#' + 'https://acid.vegas/chir.py'.center(54) + '#')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l226" name="l226">226</a></td><td><pre><span class="insertion">+</span><span class="insertion"> print('#' + ''.center(54) + '#')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l227" name="l227">227</a></td><td><pre><span class="insertion">+</span><span class="insertion"> print(''.rjust(56, '#'))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l228" name="l228">228</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l229" name="l229">229</a></td><td><pre><span class="insertion">+</span><span class="insertion">def keep_alive():</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l230" name="l230">230</a></td><td><pre><span class="insertion">+</span><span class="insertion"> try:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l231" name="l231">231</a></td><td><pre><span class="insertion">+</span><span class="insertion"> while True:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l232" name="l232">232</a></td><td><pre><span class="insertion">+</span><span class="insertion"> input('')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l233" name="l233">233</a></td><td><pre><span class="insertion">+</span><span class="insertion"> except KeyboardInterrupt:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l234" name="l234">234</a></td><td><pre><span class="insertion">+</span><span class="insertion"> sys.exit()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l235" name="l235">235</a></td><td><pre><span class="bold">diff --git a/chir.py/functions.py b/chir.py/functions.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l236" name="l236">236</a></td><td><pre><span class="bold">new file mode 100644</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l237" name="l237">237</a></td><td><pre><span class="bold">index 0000000..4edf235</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l238" name="l238">238</a></td><td><pre><span class="bold">--- /dev/null</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l239" name="l239">239</a></td><td><pre><span class="bold">+++ b/chir.py/functions.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l240" name="l240">240</a></td><td><pre><span class="hunk">@@ -0,0 +1,55 @@</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l241" name="l241">241</a></td><td><pre><span class="insertion">+</span><span class="insertion">#!/usr/bin/env python</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l242" name="l242">242</a></td><td><pre><span class="insertion">+</span><span class="insertion"># Chir.py Twitter Bot - Developed by acidvegas in Python (https://acid.vegas/chir.py)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l243" name="l243">243</a></td><td><pre><span class="insertion">+</span><span class="insertion"># functions.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l244" name="l244">244</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l245" name="l245">245</a></td><td><pre><span class="insertion">+</span><span class="insertion">import random</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l246" name="l246">246</a></td><td><pre><span class="insertion">+</span><span class="insertion">import re</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l247" name="l247">247</a></td><td><pre><span class="insertion">+</span><span class="insertion">import urllib.request</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l248" name="l248">248</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l249" name="l249">249</a></td><td><pre><span class="insertion">+</span><span class="insertion">import feedparser</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l250" name="l250">250</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l251" name="l251">251</a></td><td><pre><span class="insertion">+</span><span class="insertion">import config</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l252" name="l252">252</a></td><td><pre><span class="insertion">+</span><span class="insertion">import debug</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l253" name="l253">253</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l254" name="l254">254</a></td><td><pre><span class="insertion">+</span><span class="insertion">def coinurl(url):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l255" name="l255">255</a></td><td><pre><span class="insertion">+</span><span class="insertion"> source = urllib.request.urlopen('https://coinurl.com/api.php?uuid=%s&amp;url=%s' % (config.coinurl_uuid, url))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l256" name="l256">256</a></td><td><pre><span class="insertion">+</span><span class="insertion"> charset = source.headers.get_content_charset()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l257" name="l257">257</a></td><td><pre><span class="insertion">+</span><span class="insertion"> if charset : return source.read().decode(charset)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l258" name="l258">258</a></td><td><pre><span class="insertion">+</span><span class="insertion"> else : return source.read().decode()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l259" name="l259">259</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l260" name="l260">260</a></td><td><pre><span class="insertion">+</span><span class="insertion">def get_news(): # This is very sloppy and needs some work.</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l261" name="l261">261</a></td><td><pre><span class="insertion">+</span><span class="insertion"> news_list = list()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l262" name="l262">262</a></td><td><pre><span class="insertion">+</span><span class="insertion"> sport = random.choice(list(config.news_feeds.keys()))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l263" name="l263">263</a></td><td><pre><span class="insertion">+</span><span class="insertion"> sport_news = feedparser.parse(config.news_feeds[sport])</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l264" name="l264">264</a></td><td><pre><span class="insertion">+</span><span class="insertion"> sport_keywords = config.news_keywords[sport]</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l265" name="l265">265</a></td><td><pre><span class="insertion">+</span><span class="insertion"> for item in sport_news.entries:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l266" name="l266">266</a></td><td><pre><span class="insertion">+</span><span class="insertion"> description = strip_html(item.summary)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l267" name="l267">267</a></td><td><pre><span class="insertion">+</span><span class="insertion"> if ') -- ' in description:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l268" name="l268">268</a></td><td><pre><span class="insertion">+</span><span class="insertion"> cutoff = description.split(') -- ')[0]</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l269" name="l269">269</a></td><td><pre><span class="insertion">+</span><span class="insertion"> description = description.split(cutoff)[1]</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l270" name="l270">270</a></td><td><pre><span class="insertion">+</span><span class="insertion"> if ') - ' in description:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l271" name="l271">271</a></td><td><pre><span class="insertion">+</span><span class="insertion"> cutoff = description.split(') - ')[0]</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l272" name="l272">272</a></td><td><pre><span class="insertion">+</span><span class="insertion"> description = description.split(cutoff)[1]</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l273" name="l273">273</a></td><td><pre><span class="insertion">+</span><span class="insertion"> description = description.replace('*', '')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l274" name="l274">274</a></td><td><pre><span class="insertion">+</span><span class="insertion"> description = description.replace('\'', '')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l275" name="l275">275</a></td><td><pre><span class="insertion">+</span><span class="insertion"> description = description.replace('&quot;', '')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l276" name="l276">276</a></td><td><pre><span class="insertion">+</span><span class="insertion"> description = description.replace('--', '-')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l277" name="l277">277</a></td><td><pre><span class="insertion">+</span><span class="insertion"> description = description.replace(' ', ' ')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l278" name="l278">278</a></td><td><pre><span class="insertion">+</span><span class="insertion"> for word in sport_keywords:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l279" name="l279">279</a></td><td><pre><span class="insertion">+</span><span class="insertion"> if word in description.lower():</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l280" name="l280">280</a></td><td><pre><span class="insertion">+</span><span class="insertion"> description = re.sub(word, '#' + word, description, flags=re.IGNORECASE)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l281" name="l281">281</a></td><td><pre><span class="insertion">+</span><span class="insertion"> if len(description) &gt; 118:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l282" name="l282">282</a></td><td><pre><span class="insertion">+</span><span class="insertion"> description = description[:118]</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l283" name="l283">283</a></td><td><pre><span class="insertion">+</span><span class="insertion"> split = description.split()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l284" name="l284">284</a></td><td><pre><span class="insertion">+</span><span class="insertion"> description = description.split(split[len(split)-1])[0][:-1] + '... '</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l285" name="l285">285</a></td><td><pre><span class="insertion">+</span><span class="insertion"> try:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l286" name="l286">286</a></td><td><pre><span class="insertion">+</span><span class="insertion"> link = coinurl(item.link)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l287" name="l287">287</a></td><td><pre><span class="insertion">+</span><span class="insertion"> except Exception as ex:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l288" name="l288">288</a></td><td><pre><span class="insertion">+</span><span class="insertion"> debug.error('Error occured creating PPC link!', ex)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l289" name="l289">289</a></td><td><pre><span class="insertion">+</span><span class="insertion"> else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l290" name="l290">290</a></td><td><pre><span class="insertion">+</span><span class="insertion"> description = description + ' ' + link</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l291" name="l291">291</a></td><td><pre><span class="insertion">+</span><span class="insertion"> news_list.append(description)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l292" name="l292">292</a></td><td><pre><span class="insertion">+</span><span class="insertion"> return news_list</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l293" name="l293">293</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l294" name="l294">294</a></td><td><pre><span class="insertion">+</span><span class="insertion">def strip_html(source):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l295" name="l295">295</a></td><td><pre><span class="insertion">+</span><span class="insertion"> return re.compile(r'&lt;.*?&gt;').sub('', source)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l296" name="l296">296</a></td><td><pre><span class="bold">diff --git a/chir.py/twitter.py b/chir.py/twitter.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l297" name="l297">297</a></td><td><pre><span class="bold">new file mode 100644</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l298" name="l298">298</a></td><td><pre><span class="bold">index 0000000..e5638c1</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l299" name="l299">299</a></td><td><pre><span class="bold">--- /dev/null</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l300" name="l300">300</a></td><td><pre><span class="bold">+++ b/chir.py/twitter.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l301" name="l301">301</a></td><td><pre><span class="hunk">@@ -0,0 +1,155 @@</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l302" name="l302">302</a></td><td><pre><span class="insertion">+</span><span class="insertion">#!/usr/bin/env python</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l303" name="l303">303</a></td><td><pre><span class="insertion">+</span><span class="insertion"># Chir.py Twitter Bot - Developed by acidvegas in Python (https://acid.vegas/chir.py)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l304" name="l304">304</a></td><td><pre><span class="insertion">+</span><span class="insertion"># twitter.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l305" name="l305">305</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l306" name="l306">306</a></td><td><pre><span class="insertion">+</span><span class="insertion">import random</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l307" name="l307">307</a></td><td><pre><span class="insertion">+</span><span class="insertion">import threading</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l308" name="l308">308</a></td><td><pre><span class="insertion">+</span><span class="insertion">import time</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l309" name="l309">309</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l310" name="l310">310</a></td><td><pre><span class="insertion">+</span><span class="insertion">import tweepy</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l311" name="l311">311</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l312" name="l312">312</a></td><td><pre><span class="insertion">+</span><span class="insertion">import config</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l313" name="l313">313</a></td><td><pre><span class="insertion">+</span><span class="insertion">import debug</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l314" name="l314">314</a></td><td><pre><span class="insertion">+</span><span class="insertion">import functions</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l315" name="l315">315</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l316" name="l316">316</a></td><td><pre><span class="insertion">+</span><span class="insertion">api = None</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l317" name="l317">317</a></td><td><pre><span class="insertion">+</span><span class="insertion">me = None</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l318" name="l318">318</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l319" name="l319">319</a></td><td><pre><span class="insertion">+</span><span class="insertion">def login():</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l320" name="l320">320</a></td><td><pre><span class="insertion">+</span><span class="insertion"> global api, me</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l321" name="l321">321</a></td><td><pre><span class="insertion">+</span><span class="insertion"> try:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l322" name="l322">322</a></td><td><pre><span class="insertion">+</span><span class="insertion"> auth = tweepy.OAuthHandler(config.consumer_key, config.consumer_secret)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l323" name="l323">323</a></td><td><pre><span class="insertion">+</span><span class="insertion"> auth.set_access_token(config.access_token, config.access_token_secret)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l324" name="l324">324</a></td><td><pre><span class="insertion">+</span><span class="insertion"> api = tweepy.API(auth, wait_on_rate_limit=True, wait_on_rate_limit_notify=True)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l325" name="l325">325</a></td><td><pre><span class="insertion">+</span><span class="insertion"> me = api.me()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l326" name="l326">326</a></td><td><pre><span class="insertion">+</span><span class="insertion"> except tweepy.TweepError:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l327" name="l327">327</a></td><td><pre><span class="insertion">+</span><span class="insertion"> debug.error_exit('Failed to login to Twitter!')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l328" name="l328">328</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l329" name="l329">329</a></td><td><pre><span class="insertion">+</span><span class="insertion">def stats():</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l330" name="l330">330</a></td><td><pre><span class="insertion">+</span><span class="insertion"> debug.action('SceenName\t: %s' % me.screen_name)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l331" name="l331">331</a></td><td><pre><span class="insertion">+</span><span class="insertion"> debug.action('Registered\t: %s' % me.created_at)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l332" name="l332">332</a></td><td><pre><span class="insertion">+</span><span class="insertion"> debug.action('Favorites\t: %s' % me.favourites_count)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l333" name="l333">333</a></td><td><pre><span class="insertion">+</span><span class="insertion"> debug.action('Following\t: %s' % me.friends_count)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l334" name="l334">334</a></td><td><pre><span class="insertion">+</span><span class="insertion"> debug.action('Followers\t: %s' % me.followers_count)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l335" name="l335">335</a></td><td><pre><span class="insertion">+</span><span class="insertion"> debug.action('Tweets\t\t: %s' % me.statuses_count)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l336" name="l336">336</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l337" name="l337">337</a></td><td><pre><span class="insertion">+</span><span class="insertion">class boost_loop(threading.Thread):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l338" name="l338">338</a></td><td><pre><span class="insertion">+</span><span class="insertion"> def __init__(self):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l339" name="l339">339</a></td><td><pre><span class="insertion">+</span><span class="insertion"> threading.Thread.__init__(self)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l340" name="l340">340</a></td><td><pre><span class="insertion">+</span><span class="insertion"> def run(self):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l341" name="l341">341</a></td><td><pre><span class="insertion">+</span><span class="insertion"> while True:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l342" name="l342">342</a></td><td><pre><span class="insertion">+</span><span class="insertion"> try:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l343" name="l343">343</a></td><td><pre><span class="insertion">+</span><span class="insertion"> if 'boost_tweet' in locals(): api.destroy_status(boost_tweet.id)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l344" name="l344">344</a></td><td><pre><span class="insertion">+</span><span class="insertion"> boost_tweet = api.update_status('Support our Twitter! #' + ' #'.join(config.boost))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l345" name="l345">345</a></td><td><pre><span class="insertion">+</span><span class="insertion"> debug.alert('Re-posted boost tweet.')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l346" name="l346">346</a></td><td><pre><span class="insertion">+</span><span class="insertion"> except tweepy.TweepError as ex:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l347" name="l347">347</a></td><td><pre><span class="insertion">+</span><span class="insertion"> debug.error('Error occured in the boost loop', ex)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l348" name="l348">348</a></td><td><pre><span class="insertion">+</span><span class="insertion"> finally:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l349" name="l349">349</a></td><td><pre><span class="insertion">+</span><span class="insertion"> random.shuffle(config.boost)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l350" name="l350">350</a></td><td><pre><span class="insertion">+</span><span class="insertion"> time.sleep(60*5)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l351" name="l351">351</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l352" name="l352">352</a></td><td><pre><span class="insertion">+</span><span class="insertion">class favorite_loop(threading.Thread):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l353" name="l353">353</a></td><td><pre><span class="insertion">+</span><span class="insertion"> def __init__(self):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l354" name="l354">354</a></td><td><pre><span class="insertion">+</span><span class="insertion"> threading.Thread.__init__(self)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l355" name="l355">355</a></td><td><pre><span class="insertion">+</span><span class="insertion"> def run(self):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l356" name="l356">356</a></td><td><pre><span class="insertion">+</span><span class="insertion"> while True:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l357" name="l357">357</a></td><td><pre><span class="insertion">+</span><span class="insertion"> try:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l358" name="l358">358</a></td><td><pre><span class="insertion">+</span><span class="insertion"> for tweet in tweepy.Cursor(api.home_timeline, exclude_replies=True).items(50):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l359" name="l359">359</a></td><td><pre><span class="insertion">+</span><span class="insertion"> if tweet.user.screen_name != me.screen_name:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l360" name="l360">360</a></td><td><pre><span class="insertion">+</span><span class="insertion"> if not tweet.favorited:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l361" name="l361">361</a></td><td><pre><span class="insertion">+</span><span class="insertion"> if random.choice([True, False, False, False, False]):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l362" name="l362">362</a></td><td><pre><span class="insertion">+</span><span class="insertion"> api.create_favorite(tweet.id)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l363" name="l363">363</a></td><td><pre><span class="insertion">+</span><span class="insertion"> debug.alert('Favorited a friends tweet!')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l364" name="l364">364</a></td><td><pre><span class="insertion">+</span><span class="insertion"> time.sleep(30)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l365" name="l365">365</a></td><td><pre><span class="insertion">+</span><span class="insertion"> except tweepy.TweepError as ex:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l366" name="l366">366</a></td><td><pre><span class="insertion">+</span><span class="insertion"> debug.error('Error occured in the favorite loop!', ex)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l367" name="l367">367</a></td><td><pre><span class="insertion">+</span><span class="insertion"> finally:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l368" name="l368">368</a></td><td><pre><span class="insertion">+</span><span class="insertion"> time.sleep(60*15)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l369" name="l369">369</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l370" name="l370">370</a></td><td><pre><span class="insertion">+</span><span class="insertion">class follow_loop(threading.Thread):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l371" name="l371">371</a></td><td><pre><span class="insertion">+</span><span class="insertion"> def __init__(self):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l372" name="l372">372</a></td><td><pre><span class="insertion">+</span><span class="insertion"> threading.Thread.__init__(self)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l373" name="l373">373</a></td><td><pre><span class="insertion">+</span><span class="insertion"> def run(self):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l374" name="l374">374</a></td><td><pre><span class="insertion">+</span><span class="insertion"> while True:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l375" name="l375">375</a></td><td><pre><span class="insertion">+</span><span class="insertion"> try:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l376" name="l376">376</a></td><td><pre><span class="insertion">+</span><span class="insertion"> followers = api.followers_ids(me.screen_name)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l377" name="l377">377</a></td><td><pre><span class="insertion">+</span><span class="insertion"> friends = api.friends_ids(me.screen_name)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l378" name="l378">378</a></td><td><pre><span class="insertion">+</span><span class="insertion"> if me.friends_count / me.followers_count == 3:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l379" name="l379">379</a></td><td><pre><span class="insertion">+</span><span class="insertion"> debug.action('Following to follower ratio is off! Starting the unfollow loop...')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l380" name="l380">380</a></td><td><pre><span class="insertion">+</span><span class="insertion"> unfollow_loop()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l381" name="l381">381</a></td><td><pre><span class="insertion">+</span><span class="insertion"> for follower in followers:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l382" name="l382">382</a></td><td><pre><span class="insertion">+</span><span class="insertion"> if not follower in friends:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l383" name="l383">383</a></td><td><pre><span class="insertion">+</span><span class="insertion"> api.create_friendship(follower)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l384" name="l384">384</a></td><td><pre><span class="insertion">+</span><span class="insertion"> api.send_direct_message(screen_name=follower, text='Thanks for following our Twitter. Be sure to share us with your friends &amp; keep up with the latest sports news!')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l385" name="l385">385</a></td><td><pre><span class="insertion">+</span><span class="insertion"> debug.alert('Followed back a follower!')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l386" name="l386">386</a></td><td><pre><span class="insertion">+</span><span class="insertion"> time.sleep(30)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l387" name="l387">387</a></td><td><pre><span class="insertion">+</span><span class="insertion"> except tweepy.TweepError as ex:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l388" name="l388">388</a></td><td><pre><span class="insertion">+</span><span class="insertion"> debug.error('Error occured in the follow loop!', ex)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l389" name="l389">389</a></td><td><pre><span class="insertion">+</span><span class="insertion"> finally:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l390" name="l390">390</a></td><td><pre><span class="insertion">+</span><span class="insertion"> time.sleep(60*15)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l391" name="l391">391</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l392" name="l392">392</a></td><td><pre><span class="insertion">+</span><span class="insertion">def main_loop():</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l393" name="l393">393</a></td><td><pre><span class="insertion">+</span><span class="insertion"> boost_loop().start()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l394" name="l394">394</a></td><td><pre><span class="insertion">+</span><span class="insertion"> favorite_loop().start()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l395" name="l395">395</a></td><td><pre><span class="insertion">+</span><span class="insertion"> follow_loop().start()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l396" name="l396">396</a></td><td><pre><span class="insertion">+</span><span class="insertion"> news_loop().start()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l397" name="l397">397</a></td><td><pre><span class="insertion">+</span><span class="insertion"> search_loop().start()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l398" name="l398">398</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l399" name="l399">399</a></td><td><pre><span class="insertion">+</span><span class="insertion">class news_loop(threading.Thread):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l400" name="l400">400</a></td><td><pre><span class="insertion">+</span><span class="insertion"> def __init__(self):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l401" name="l401">401</a></td><td><pre><span class="insertion">+</span><span class="insertion"> threading.Thread.__init__(self)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l402" name="l402">402</a></td><td><pre><span class="insertion">+</span><span class="insertion"> def run(self):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l403" name="l403">403</a></td><td><pre><span class="insertion">+</span><span class="insertion"> while True:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l404" name="l404">404</a></td><td><pre><span class="insertion">+</span><span class="insertion"> try:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l405" name="l405">405</a></td><td><pre><span class="insertion">+</span><span class="insertion"> news = functions.get_news()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l406" name="l406">406</a></td><td><pre><span class="insertion">+</span><span class="insertion"> tweets = list()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l407" name="l407">407</a></td><td><pre><span class="insertion">+</span><span class="insertion"> for item in tweepy.Cursor(api.user_timeline, exclude_replies=True).items(50):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l408" name="l408">408</a></td><td><pre><span class="insertion">+</span><span class="insertion"> tweets.append(item.text.split('... ')[0])</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l409" name="l409">409</a></td><td><pre><span class="insertion">+</span><span class="insertion"> time.sleep(2)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l410" name="l410">410</a></td><td><pre><span class="insertion">+</span><span class="insertion"> for item in news:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l411" name="l411">411</a></td><td><pre><span class="insertion">+</span><span class="insertion"> split = item.split('... ')[0]</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l412" name="l412">412</a></td><td><pre><span class="insertion">+</span><span class="insertion"> if split not in tweets:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l413" name="l413">413</a></td><td><pre><span class="insertion">+</span><span class="insertion"> api.update_status(item)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l414" name="l414">414</a></td><td><pre><span class="insertion">+</span><span class="insertion"> debug.alert('A tweet has been posted.')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l415" name="l415">415</a></td><td><pre><span class="insertion">+</span><span class="insertion"> time.sleep(60*5)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l416" name="l416">416</a></td><td><pre><span class="insertion">+</span><span class="insertion"> except tweepy.TweepError as ex:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l417" name="l417">417</a></td><td><pre><span class="insertion">+</span><span class="insertion"> debug.error('Error occured in the news loop', ex)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l418" name="l418">418</a></td><td><pre><span class="insertion">+</span><span class="insertion"> finally:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l419" name="l419">419</a></td><td><pre><span class="insertion">+</span><span class="insertion"> time.sleep(60*15)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l420" name="l420">420</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l421" name="l421">421</a></td><td><pre><span class="insertion">+</span><span class="insertion">class search_loop(threading.Thread):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l422" name="l422">422</a></td><td><pre><span class="insertion">+</span><span class="insertion"> def __init__(self):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l423" name="l423">423</a></td><td><pre><span class="insertion">+</span><span class="insertion"> threading.Thread.__init__(self)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l424" name="l424">424</a></td><td><pre><span class="insertion">+</span><span class="insertion"> def run(self):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l425" name="l425">425</a></td><td><pre><span class="insertion">+</span><span class="insertion"> query_keywords = list()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l426" name="l426">426</a></td><td><pre><span class="insertion">+</span><span class="insertion"> for item in config.news_keywords:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l427" name="l427">427</a></td><td><pre><span class="insertion">+</span><span class="insertion"> query_keywords = query_keywords + list(config.news_keywords[item])</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l428" name="l428">428</a></td><td><pre><span class="insertion">+</span><span class="insertion"> query_keywords = query_keywords + config.boost_keywords</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l429" name="l429">429</a></td><td><pre><span class="insertion">+</span><span class="insertion"> while True:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l430" name="l430">430</a></td><td><pre><span class="insertion">+</span><span class="insertion"> try:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l431" name="l431">431</a></td><td><pre><span class="insertion">+</span><span class="insertion"> query = random.choice(query_keywords)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l432" name="l432">432</a></td><td><pre><span class="insertion">+</span><span class="insertion"> for item in api.search(q='#' + query, count=50, lang='en', result_type='mixed'):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l433" name="l433">433</a></td><td><pre><span class="insertion">+</span><span class="insertion"> if not item.user.following and not item.favorited:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l434" name="l434">434</a></td><td><pre><span class="insertion">+</span><span class="insertion"> try:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l435" name="l435">435</a></td><td><pre><span class="insertion">+</span><span class="insertion"> api.create_favorite(item.id)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l436" name="l436">436</a></td><td><pre><span class="insertion">+</span><span class="insertion"> api.create_friendship(item.user.screen_name)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l437" name="l437">437</a></td><td><pre><span class="insertion">+</span><span class="insertion"> debug.alert('Followed a similar twitter!')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l438" name="l438">438</a></td><td><pre><span class="insertion">+</span><span class="insertion"> except tweepy.TweepError as ex:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l439" name="l439">439</a></td><td><pre><span class="insertion">+</span><span class="insertion"> debug.error('Unknown error occured in the search loop!', ex)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l440" name="l440">440</a></td><td><pre><span class="insertion">+</span><span class="insertion"> time.sleep(30)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l441" name="l441">441</a></td><td><pre><span class="insertion">+</span><span class="insertion"> except tweepy.TweepError as ex:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l442" name="l442">442</a></td><td><pre><span class="insertion">+</span><span class="insertion"> debug.error('Error occured in the search loop!', ex)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l443" name="l443">443</a></td><td><pre><span class="insertion">+</span><span class="insertion"> finally:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l444" name="l444">444</a></td><td><pre><span class="insertion">+</span><span class="insertion"> time.sleep(60*15)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l445" name="l445">445</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l446" name="l446">446</a></td><td><pre><span class="insertion">+</span><span class="insertion">def unfollow_loop():</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l447" name="l447">447</a></td><td><pre><span class="insertion">+</span><span class="insertion"> try:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l448" name="l448">448</a></td><td><pre><span class="insertion">+</span><span class="insertion"> followers = api.followers_ids(me.screen_name)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l449" name="l449">449</a></td><td><pre><span class="insertion">+</span><span class="insertion"> friends = api.friends_ids(me.screen_name)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l450" name="l450">450</a></td><td><pre><span class="insertion">+</span><span class="insertion"> for friend in friends:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l451" name="l451">451</a></td><td><pre><span class="insertion">+</span><span class="insertion"> if friend not in followers:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l452" name="l452">452</a></td><td><pre><span class="insertion">+</span><span class="insertion"> api.destroy_friendship(friend)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l453" name="l453">453</a></td><td><pre><span class="insertion">+</span><span class="insertion"> debug.alert('Unfollowed an unsupporting friend!')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l454" name="l454">454</a></td><td><pre><span class="insertion">+</span><span class="insertion"> time.sleep(30)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l455" name="l455">455</a></td><td><pre><span class="insertion">+</span><span class="insertion"> except tweepy.TweepError as ex:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l456" name="l456">456</a></td><td><pre><span class="insertion">+</span><span class="insertion"> debug.error('Error occured in the unfollow loop!', ex)</span></pre></td></tr>
</table>
<div id="footer">site generated by <a href="https://github.com/acidvegas/stagit" target="_blank">stagit</a> on <a href="#">05/03/20</a></div>

View File

@ -1,90 +0,0 @@
<!doctype html>
<link rel="stylesheet" href="../../style.css">
<title>chir.py :: 8e8a043</title>
<h1><a href="../index.html" title="Back to Repository">&larr;&#xFE0E;</a> chir.py :: 8e8a043</h1>
<hr>
<table id="main" cellpadding="0" cellspacing="0">
<tr class="item"><td class="linenumber"><a href="#l1" name="l1">1</a></td><td><pre><span class="commit">commit 8e8a04353f9f2f5a5aff244e2908359c9d58a449</span><span class="commit"> (</span><span class="reference">HEAD -&gt; </span><span class="branch">master</span><span class="commit">, </span><span class="remote">origin/master</span><span class="commit">)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l2" name="l2">2</a></td><td><pre>Author: acidvegas &lt;acid.vegas@acid.vegas&gt;</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l3" name="l3">3</a></td><td><pre>Date: Thu Apr 9 22:06:32 2020 -0400</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l4" name="l4">4</a></td><td><pre></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l5" name="l5">5</a></td><td><pre> fixed an issue pointed out by impshun</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l6" name="l6">6</a></td><td><pre>---</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l7" name="l7">7</a></td><td><pre> LICENSE | 2 <span class="insertion">+</span><span class="deletion">-</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l8" name="l8">8</a></td><td><pre> README.md | 15 <span class="insertion">+++++++++++</span><span class="deletion">----</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l9" name="l9">9</a></td><td><pre> chir.py/twitter.py | 4 <span class="insertion">++</span><span class="deletion">--</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l10" name="l10">10</a></td><td><pre> 3 files changed, 14 insertions(+), 7 deletions(-)</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l11" name="l11">11</a></td><td><pre></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l12" name="l12">12</a></td><td><pre><span class="bold">diff --git a/LICENSE b/LICENSE</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l13" name="l13">13</a></td><td><pre><span class="bold">index 69997e8..d521bd0 100644</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l14" name="l14">14</a></td><td><pre><span class="bold">--- a/LICENSE</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l15" name="l15">15</a></td><td><pre><span class="bold">+++ b/LICENSE</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l16" name="l16">16</a></td><td><pre><span class="hunk">@@ -1,6 +1,6 @@</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l17" name="l17">17</a></td><td><pre> ISC License</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l18" name="l18">18</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l19" name="l19">19</a></td><td><pre><span class="deletion">-Copyright (c) 2019, acidvegas &lt;acid.vegas@acid.vegas&gt;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l20" name="l20">20</a></td><td><pre><span class="insertion">+</span><span class="insertion">Copyright (c) 2020, acidvegas &lt;acid.vegas@acid.vegas&gt;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l21" name="l21">21</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l22" name="l22">22</a></td><td><pre> Permission to use, copy, modify, and/or distribute this software for any</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l23" name="l23">23</a></td><td><pre> purpose with or without fee is hereby granted, provided that the above</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l24" name="l24">24</a></td><td><pre><span class="bold">diff --git a/README.md b/README.md</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l25" name="l25">25</a></td><td><pre><span class="bold">index 2a37055..ed71c80 100644</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l26" name="l26">26</a></td><td><pre><span class="bold">--- a/README.md</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l27" name="l27">27</a></td><td><pre><span class="bold">+++ b/README.md</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l28" name="l28">28</a></td><td><pre><span class="hunk">@@ -1,24 +1,31 @@</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l29" name="l29">29</a></td><td><pre><span class="deletion">-###### Requirments</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l30" name="l30">30</a></td><td><pre><span class="insertion">+</span><span class="insertion"># chir.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l31" name="l31">31</a></td><td><pre><span class="insertion">+</span><span class="insertion">&gt; twitter news bot that builds followers, posts, and bitcoin via ppc links</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l32" name="l32">32</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l33" name="l33">33</a></td><td><pre><span class="insertion">+</span><span class="insertion">## Requirments</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l34" name="l34">34</a></td><td><pre> * [FeedParser](http://pypi.python.org/pypi/feedparser)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l35" name="l35">35</a></td><td><pre> * [Tweepy](http://pypi.python.org/pypi/tweepy)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l36" name="l36">36</a></td><td><pre> * [ndg-httpsclient](http://pypi.python.org/pypi/ndg-httpsclient) *(Install only if you are getting an &quot;InsecurePlatformWarning&quot; error.)*</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l37" name="l37">37</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l38" name="l38">38</a></td><td><pre><span class="deletion">-###### Instructions</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l39" name="l39">39</a></td><td><pre><span class="insertion">+</span><span class="insertion">## Instructions</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l40" name="l40">40</a></td><td><pre> Register a Twitter account, and [sign up](http://dev.twitter.com/apps/new) for a new developer application.</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l41" name="l41">41</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l42" name="l42">42</a></td><td><pre> Go to your new application settings &quot;Keys and Access Tokens&quot; tab.</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l43" name="l43">43</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l44" name="l44">44</a></td><td><pre> Click the &quot;Create Your Access Token&quot; button on the bottom.</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l45" name="l45">45</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l46" name="l46">46</a></td><td><pre> These will be used in the config to connect to your Twitter account.</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l47" name="l47">47</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l48" name="l48">48</a></td><td><pre> Go to your new application settings &quot;Permissions&quot;.</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l49" name="l49">49</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l50" name="l50">50</a></td><td><pre> Change your access to &quot;Read, Write and Access direct messages&quot;.</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l51" name="l51">51</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l52" name="l52">52</a></td><td><pre> Register a [CoinURL](http://coinurl.com/) account and get your [api key](http://coinurl.com/profile-api.php).</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l53" name="l53">53</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l54" name="l54">54</a></td><td><pre> The random number you will see after &quot;uuid&quot; is your unique user id that will be use in the config.</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l55" name="l55">55</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l56" name="l56">56</a></td><td><pre> Edit your `config.py` and change the Twitter &amp; CoinURL API settings.</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l57" name="l57">57</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l58" name="l58">58</a></td><td><pre><span class="deletion">-###### Mirrors</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l59" name="l59">59</a></td><td><pre><span class="insertion">+</span><span class="insertion">## Mirrors</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l60" name="l60">60</a></td><td><pre> - [acid.vegas](https://acid.vegas/chir.py) *(main)*</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l61" name="l61">61</a></td><td><pre><span class="deletion">-- [SuperNETs](https://git.supernets.org/acidvegas/chir.py)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l62" name="l62">62</a></td><td><pre> - [GitHub](https://github.com/acidvegas/chir.py)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l63" name="l63">63</a></td><td><pre> - [GitLab](https://gitlab.com/acidvegas/chir.py)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l64" name="l64">64</a></td><td><pre><span class="bold">diff --git a/chir.py/twitter.py b/chir.py/twitter.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l65" name="l65">65</a></td><td><pre><span class="bold">index e5638c1..da12fbf 100644</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l66" name="l66">66</a></td><td><pre><span class="bold">--- a/chir.py/twitter.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l67" name="l67">67</a></td><td><pre><span class="bold">+++ b/chir.py/twitter.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l68" name="l68">68</a></td><td><pre><span class="hunk">@@ -40,12 +40,12 @@</span> </span>class boost_loop(threading.Thread):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l69" name="l69">69</a></td><td><pre> while True:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l70" name="l70">70</a></td><td><pre> try:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l71" name="l71">71</a></td><td><pre> if 'boost_tweet' in locals(): api.destroy_status(boost_tweet.id)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l72" name="l72">72</a></td><td><pre><span class="deletion">- boost_tweet = api.update_status('Support our Twitter! #' + ' #'.join(config.boost))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l73" name="l73">73</a></td><td><pre><span class="insertion">+</span><span class="insertion"> boost_tweet = api.update_status('Support our Twitter! #' + ' #'.join(config.boost_keywords))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l74" name="l74">74</a></td><td><pre> debug.alert('Re-posted boost tweet.')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l75" name="l75">75</a></td><td><pre> except tweepy.TweepError as ex:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l76" name="l76">76</a></td><td><pre> debug.error('Error occured in the boost loop', ex)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l77" name="l77">77</a></td><td><pre> finally:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l78" name="l78">78</a></td><td><pre><span class="deletion">- random.shuffle(config.boost)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l79" name="l79">79</a></td><td><pre><span class="insertion">+</span><span class="insertion"> random.shuffle(config.boost_keywords)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l80" name="l80">80</a></td><td><pre> time.sleep(60*5)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l81" name="l81">81</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l82" name="l82">82</a></td><td><pre> class favorite_loop(threading.Thread):</span></pre></td></tr>
</table>
<div id="footer">site generated by <a href="https://github.com/acidvegas/stagit" target="_blank">stagit</a> on <a href="#">05/03/20</a></div>

View File

@ -1,15 +0,0 @@
<!doctype html>
<link rel="stylesheet" href="../style.css">
<title>chir.py</title>
<h1><a href="../index.html" title="Home">&#8962;&#xFE0E;</a> chir.py</h1>
<div style="padding-left:30px">
<h4>twitter news bot that builds followers, posts, and bitcoin via ppc links</h4>
<h5>git clone <a href="https://github.com/acidvegas/chir.py.git" title="chir.py clone URL">https://github.com/acidvegas/chir.py.git</a></h5>
</div>
<hr>
<table id="main" cellpadding="0" cellspacing="0">
<tr id="navigation"><th></th><th>Hash</th><th>Commit message</th><th>Author</th><th>Date</th><th align="right">Files</th><th align="right">+</th><th align="right">-</th></tr>
<tr class="item"><td><span style="color:green" title="acidvegas (MOST DANGEROUS MOTHERFUCK) <acid.vegas@acid.vegas>&#13;EF4B922DB85DC9DE">&#128274;&#xFE0E;</span></td><td><a href="commit/8e8a043.html" title="View this commit">8e8a043</a></td><td>fixed an issue pointed out by impshun</td><td>acidvegas</td><td>2020-04-09 22:06</td><td align="right">3</td><td align="right">+14</td><td align="right">-7</td></tr>
<tr class="item"><td></td><td><a href="commit/010429d.html" title="View this commit">010429d</a></td><td>Initial commit</td><td>acidvegas</td><td>2019-06-28 01:07</td><td align="right">7</td><td align="right">+399</td><td align="right">-0</td></tr>
</table>
<div id="footer">site generated by <a href="https://github.com/acidvegas/stagit" target="_blank">stagit</a> on <a href="#">05/03/20</a></div>

View File

@ -1,158 +0,0 @@
<!doctype html>
<link rel="stylesheet" href="../../style.css">
<title>coinmarketcap :: 9d4eb03</title>
<h1><a href="../index.html" title="Back to Repository">&larr;&#xFE0E;</a> coinmarketcap :: 9d4eb03</h1>
<hr>
<table id="main" cellpadding="0" cellspacing="0">
<tr class="item"><td class="linenumber"><a href="#l1" name="l1">1</a></td><td><pre><span class="commit">commit 9d4eb032737209ed6363f78c16c1ed2fc06849fb</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l2" name="l2">2</a></td><td><pre>Author: acidvegas &lt;acid.vegas@acid.vegas&gt;</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l3" name="l3">3</a></td><td><pre>Date: Thu Apr 9 20:37:48 2020 -0400</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l4" name="l4">4</a></td><td><pre></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l5" name="l5">5</a></td><td><pre> Initial commit</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l6" name="l6">6</a></td><td><pre>---</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l7" name="l7">7</a></td><td><pre> LICENSE | 15 <span class="insertion">+++++++++++++++</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l8" name="l8">8</a></td><td><pre> README.md | 50 <span class="insertion">++++++++++++++++++++++++++++++++++++++++++++++++++</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l9" name="l9">9</a></td><td><pre> coinmarketcap.py | 56 <span class="insertion">++++++++++++++++++++++++++++++++++++++++++++++++++++++++</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l10" name="l10">10</a></td><td><pre> 3 files changed, 121 insertions(+)</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l11" name="l11">11</a></td><td><pre></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l12" name="l12">12</a></td><td><pre><span class="bold">diff --git a/LICENSE b/LICENSE</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l13" name="l13">13</a></td><td><pre><span class="bold">new file mode 100644</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l14" name="l14">14</a></td><td><pre><span class="bold">index 0000000..d521bd0</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l15" name="l15">15</a></td><td><pre><span class="bold">--- /dev/null</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l16" name="l16">16</a></td><td><pre><span class="bold">+++ b/LICENSE</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l17" name="l17">17</a></td><td><pre><span class="hunk">@@ -0,0 +1,15 @@</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l18" name="l18">18</a></td><td><pre><span class="insertion">+</span><span class="insertion">ISC License</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l19" name="l19">19</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l20" name="l20">20</a></td><td><pre><span class="insertion">+</span><span class="insertion">Copyright (c) 2020, acidvegas &lt;acid.vegas@acid.vegas&gt;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l21" name="l21">21</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l22" name="l22">22</a></td><td><pre><span class="insertion">+</span><span class="insertion">Permission to use, copy, modify, and/or distribute this software for any</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l23" name="l23">23</a></td><td><pre><span class="insertion">+</span><span class="insertion">purpose with or without fee is hereby granted, provided that the above</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l24" name="l24">24</a></td><td><pre><span class="insertion">+</span><span class="insertion">copyright notice and this permission notice appear in all copies.</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l25" name="l25">25</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l26" name="l26">26</a></td><td><pre><span class="insertion">+</span><span class="insertion">THE SOFTWARE IS PROVIDED &quot;AS IS&quot; AND THE AUTHOR DISCLAIMS ALL WARRANTIES</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l27" name="l27">27</a></td><td><pre><span class="insertion">+</span><span class="insertion">WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l28" name="l28">28</a></td><td><pre><span class="insertion">+</span><span class="insertion">MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l29" name="l29">29</a></td><td><pre><span class="insertion">+</span><span class="insertion">ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l30" name="l30">30</a></td><td><pre><span class="insertion">+</span><span class="insertion">WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l31" name="l31">31</a></td><td><pre><span class="insertion">+</span><span class="insertion">ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l32" name="l32">32</a></td><td><pre><span class="insertion">+</span><span class="insertion">OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l33" name="l33">33</a></td><td><pre><span class="bold">diff --git a/README.md b/README.md</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l34" name="l34">34</a></td><td><pre><span class="bold">new file mode 100644</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l35" name="l35">35</a></td><td><pre><span class="bold">index 0000000..9344069</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l36" name="l36">36</a></td><td><pre><span class="bold">--- /dev/null</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l37" name="l37">37</a></td><td><pre><span class="bold">+++ b/README.md</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l38" name="l38">38</a></td><td><pre><span class="hunk">@@ -0,0 +1,50 @@</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l39" name="l39">39</a></td><td><pre><span class="insertion">+</span><span class="insertion"># coinmarketcap</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l40" name="l40">40</a></td><td><pre><span class="insertion">+</span><span class="insertion">&gt; A Python class for the API on [CoinMarketCap](https://coinmarketcap.com)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l41" name="l41">41</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l42" name="l42">42</a></td><td><pre><span class="insertion">+</span><span class="insertion">## Requirements</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l43" name="l43">43</a></td><td><pre><span class="insertion">+</span><span class="insertion">* [Python](https://www.python.org/downloads/) *(**Note:** This script was developed to be used with the latest version of Python)*</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l44" name="l44">44</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l45" name="l45">45</a></td><td><pre><span class="insertion">+</span><span class="insertion">## API Documentation</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l46" name="l46">46</a></td><td><pre><span class="insertion">+</span><span class="insertion">- [CoinMarketCap API Documentation](https://coinmarketcap.com/api/documentation/v1/)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l47" name="l47">47</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l48" name="l48">48</a></td><td><pre><span class="insertion">+</span><span class="insertion">## Information</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l49" name="l49">49</a></td><td><pre><span class="insertion">+</span><span class="insertion">In order to use the CoinMarketCap API, you will need an API key which you can sign up for one [here](https://pro.coinmarketcap.com/signup/).</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l50" name="l50">50</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l51" name="l51">51</a></td><td><pre><span class="insertion">+</span><span class="insertion">Data from the API will be cached for 5 minutes at a time (that is how long it takes CoinMarketCap to refresh their data) this way you will not get rate limited.</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l52" name="l52">52</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l53" name="l53">53</a></td><td><pre><span class="insertion">+</span><span class="insertion">The class has only 2 main functions, one for global data and one for ticker data.</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l54" name="l54">54</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l55" name="l55">55</a></td><td><pre><span class="insertion">+</span><span class="insertion">## Example</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l56" name="l56">56</a></td><td><pre><span class="insertion">+</span><span class="insertion">```python</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l57" name="l57">57</a></td><td><pre><span class="insertion">+</span><span class="insertion">from coinmarketcap import CoinMarketCap</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l58" name="l58">58</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l59" name="l59">59</a></td><td><pre><span class="insertion">+</span><span class="insertion">CMC = CoinMarketCap('API_KEY_HERE')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l60" name="l60">60</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l61" name="l61">61</a></td><td><pre><span class="insertion">+</span><span class="insertion">global_data = CMC._global() # Global data example</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l62" name="l62">62</a></td><td><pre><span class="insertion">+</span><span class="insertion">print('Cryptocurrencies : ' + str(global_data['cryptocurrencies']))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l63" name="l63">63</a></td><td><pre><span class="insertion">+</span><span class="insertion">print('Exchanges : ' + str(global_data['exchanges']))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l64" name="l64">64</a></td><td><pre><span class="insertion">+</span><span class="insertion">print('BTC Dominance : ' + str(global_data['btc_dominance']))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l65" name="l65">65</a></td><td><pre><span class="insertion">+</span><span class="insertion">print('ETH Dominance : ' + str(global_data['eth_dominance']))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l66" name="l66">66</a></td><td><pre><span class="insertion">+</span><span class="insertion">print('Market Cap : ' + str(global_data['market_cap']))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l67" name="l67">67</a></td><td><pre><span class="insertion">+</span><span class="insertion">print('Volume : ' + str(global_data['volume']))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l68" name="l68">68</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l69" name="l69">69</a></td><td><pre><span class="insertion">+</span><span class="insertion">ticker_data = CMC._ticker() # Ticker data example</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l70" name="l70">70</a></td><td><pre><span class="insertion">+</span><span class="insertion">for item in ticker_data:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l71" name="l71">71</a></td><td><pre><span class="insertion">+</span><span class="insertion"> print('ID : ' + item)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l72" name="l72">72</a></td><td><pre><span class="insertion">+</span><span class="insertion"> print('Name : ' + ticker_data[item]['name'])</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l73" name="l73">73</a></td><td><pre><span class="insertion">+</span><span class="insertion"> print('Symbol : ' + ticker_data[item]['symbol'])</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l74" name="l74">74</a></td><td><pre><span class="insertion">+</span><span class="insertion"> print('Slug : ' + ticker_data[item]['slug'])</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l75" name="l75">75</a></td><td><pre><span class="insertion">+</span><span class="insertion"> print('Rank : ' + str(ticker_data[item]['rank']))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l76" name="l76">76</a></td><td><pre><span class="insertion">+</span><span class="insertion"> print('Price : ' + str(ticker_data[item]['price']))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l77" name="l77">77</a></td><td><pre><span class="insertion">+</span><span class="insertion"> print('1h Percent : ' + str(ticker_data[item]['percent']['1h']))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l78" name="l78">78</a></td><td><pre><span class="insertion">+</span><span class="insertion"> print('24h Percent : ' + str(ticker_data[item]['percent']['24h']))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l79" name="l79">79</a></td><td><pre><span class="insertion">+</span><span class="insertion"> print('7d Percent : ' + str(ticker_data[item]['percent']['7d']))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l80" name="l80">80</a></td><td><pre><span class="insertion">+</span><span class="insertion"> print('Volume : ' + str(ticker_data[item]['volume']))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l81" name="l81">81</a></td><td><pre><span class="insertion">+</span><span class="insertion"> print('Market Cap : ' + str(ticker_data[item]['market_cap']))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l82" name="l82">82</a></td><td><pre><span class="insertion">+</span><span class="insertion"> input('') # Press enter to continue...</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l83" name="l83">83</a></td><td><pre><span class="insertion">+</span><span class="insertion">```</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l84" name="l84">84</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l85" name="l85">85</a></td><td><pre><span class="insertion">+</span><span class="insertion">## Mirrors</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l86" name="l86">86</a></td><td><pre><span class="insertion">+</span><span class="insertion">- [acid.vegas](https://acid.vegas/coinmarketcap) *(main)*</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l87" name="l87">87</a></td><td><pre><span class="insertion">+</span><span class="insertion">- [GitHub](https://github.com/acidvegas/coinmarketcap)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l88" name="l88">88</a></td><td><pre><span class="insertion">+</span><span class="insertion">- [GitLab](https://gitlab.com/acidvegas/coinmarketcap)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l89" name="l89">89</a></td><td><pre><span class="bold">diff --git a/coinmarketcap.py b/coinmarketcap.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l90" name="l90">90</a></td><td><pre><span class="bold">new file mode 100644</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l91" name="l91">91</a></td><td><pre><span class="bold">index 0000000..6d8201b</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l92" name="l92">92</a></td><td><pre><span class="bold">--- /dev/null</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l93" name="l93">93</a></td><td><pre><span class="bold">+++ b/coinmarketcap.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l94" name="l94">94</a></td><td><pre><span class="hunk">@@ -0,0 +1,56 @@</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l95" name="l95">95</a></td><td><pre><span class="insertion">+</span><span class="insertion">#!/usr/bin/env python</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l96" name="l96">96</a></td><td><pre><span class="insertion">+</span><span class="insertion"># CoinMarketCap API Class - Developed by acidvegas in Python (https://acid.vegas/coinmarketcap)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l97" name="l97">97</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l98" name="l98">98</a></td><td><pre><span class="insertion">+</span><span class="insertion">import http.client</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l99" name="l99">99</a></td><td><pre><span class="insertion">+</span><span class="insertion">import json</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l100" name="l100">100</a></td><td><pre><span class="insertion">+</span><span class="insertion">import time</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l101" name="l101">101</a></td><td><pre><span class="insertion">+</span><span class="insertion">import zlib</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l102" name="l102">102</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l103" name="l103">103</a></td><td><pre><span class="insertion">+</span><span class="insertion">class CoinMarketCap(object):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l104" name="l104">104</a></td><td><pre><span class="insertion">+</span> <span class="insertion">def __init__(self, api_key):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l105" name="l105">105</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.api_key = api_key</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l106" name="l106">106</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.cache = {'global':dict(), 'ticker':dict()}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l107" name="l107">107</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.last = {'global':0 , 'ticker':0 }</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l108" name="l108">108</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l109" name="l109">109</a></td><td><pre><span class="insertion">+</span> <span class="insertion">def _api(self, _endpoint):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l110" name="l110">110</a></td><td><pre><span class="insertion">+</span> <span class="insertion">conn = http.client.HTTPSConnection('pro-api.coinmarketcap.com', timeout=15)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l111" name="l111">111</a></td><td><pre><span class="insertion">+</span> <span class="insertion">conn.request('GET', '/v1/' + _endpoint, headers={'Accept':'application/json', 'Accept-Encoding':'deflate, gzip', 'X-CMC_PRO_API_KEY':self.api_key})</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l112" name="l112">112</a></td><td><pre><span class="insertion">+</span> <span class="insertion">response = zlib.decompress(conn.getresponse().read(), 16+zlib.MAX_WBITS).decode('utf-8').replace(': null', ': &quot;0&quot;')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l113" name="l113">113</a></td><td><pre><span class="insertion">+</span> <span class="insertion">conn.close()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l114" name="l114">114</a></td><td><pre><span class="insertion">+</span> <span class="insertion">return json.loads(response)['data']</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l115" name="l115">115</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l116" name="l116">116</a></td><td><pre><span class="insertion">+</span> <span class="insertion">def _global(self):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l117" name="l117">117</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if time.time() - self.last['global'] &lt; 300:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l118" name="l118">118</a></td><td><pre><span class="insertion">+</span> <span class="insertion">return self.cache['global']</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l119" name="l119">119</a></td><td><pre><span class="insertion">+</span> <span class="insertion">else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l120" name="l120">120</a></td><td><pre><span class="insertion">+</span> <span class="insertion">data = self._api('global-metrics/quotes/latest')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l121" name="l121">121</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.cache['global'] = {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l122" name="l122">122</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'cryptocurrencies' : data['active_cryptocurrencies'],</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l123" name="l123">123</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'exchanges' : data['active_exchanges'],</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l124" name="l124">124</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'btc_dominance' : int(data['btc_dominance']),</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l125" name="l125">125</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'eth_dominance' : int(data['eth_dominance']),</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l126" name="l126">126</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'market_cap' : int(data['quote']['USD']['total_market_cap']),</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l127" name="l127">127</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'volume' : int(data['quote']['USD']['total_volume_24h'])</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l128" name="l128">128</a></td><td><pre><span class="insertion">+</span> <span class="insertion">}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l129" name="l129">129</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.last['global'] = time.time()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l130" name="l130">130</a></td><td><pre><span class="insertion">+</span> <span class="insertion">return self.cache['global']</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l131" name="l131">131</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l132" name="l132">132</a></td><td><pre><span class="insertion">+</span> <span class="insertion">def _ticker(self):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l133" name="l133">133</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if time.time() - self.last['ticker'] &lt; 300:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l134" name="l134">134</a></td><td><pre><span class="insertion">+</span> <span class="insertion">return self.cache['ticker']</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l135" name="l135">135</a></td><td><pre><span class="insertion">+</span> <span class="insertion">else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l136" name="l136">136</a></td><td><pre><span class="insertion">+</span> <span class="insertion">data = self._api('cryptocurrency/listings/latest?limit=5000')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l137" name="l137">137</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.cache['ticker'] = dict()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l138" name="l138">138</a></td><td><pre><span class="insertion">+</span> <span class="insertion">for item in data:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l139" name="l139">139</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.cache['ticker'][item['id']] = {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l140" name="l140">140</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'name' : item['name'],</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l141" name="l141">141</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'symbol' : item['symbol'],</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l142" name="l142">142</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'slug' : item['slug'],</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l143" name="l143">143</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'rank' : item['cmc_rank'],</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l144" name="l144">144</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'price' : float(item['quote']['USD']['price']),</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l145" name="l145">145</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'percent' : {'1h':float(item['quote']['USD']['percent_change_1h']), '24h':float(item['quote']['USD']['percent_change_24h']), '7d':float(item['quote']['USD']['percent_change_7d'])},</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l146" name="l146">146</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'volume' : int(float(item['quote']['USD']['volume_24h'])),</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l147" name="l147">147</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'market_cap' : int(float(item['quote']['USD']['market_cap']))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l148" name="l148">148</a></td><td><pre><span class="insertion">+</span> <span class="insertion">}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l149" name="l149">149</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.last['ticker'] = time.time()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l150" name="l150">150</a></td><td><pre><span class="insertion">+</span> <span class="insertion">return self.cache['ticker']</span></pre></td></tr>
</table>
<div id="footer">site generated by <a href="https://github.com/acidvegas/stagit" target="_blank">stagit</a> on <a href="#">05/03/20</a></div>

View File

@ -1,46 +0,0 @@
<!doctype html>
<link rel="stylesheet" href="../../style.css">
<title>coinmarketcap :: e5f75a8</title>
<h1><a href="../index.html" title="Back to Repository">&larr;&#xFE0E;</a> coinmarketcap :: e5f75a8</h1>
<hr>
<table id="main" cellpadding="0" cellspacing="0">
<tr class="item"><td class="linenumber"><a href="#l1" name="l1">1</a></td><td><pre><span class="commit">commit e5f75a8235ad6cba9eaf75ed556af9084cbf37d6</span><span class="commit"> (</span><span class="reference">HEAD -&gt; </span><span class="branch">master</span><span class="commit">, </span><span class="remote">origin/master</span><span class="commit">)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l2" name="l2">2</a></td><td><pre>Author: acidvegas &lt;acid.vegas@acid.vegas&gt;</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l3" name="l3">3</a></td><td><pre>Date: Wed Apr 22 02:57:55 2020 -0400</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l4" name="l4">4</a></td><td><pre></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l5" name="l5">5</a></td><td><pre> Fixed null values</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l6" name="l6">6</a></td><td><pre>---</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l7" name="l7">7</a></td><td><pre> coinmarketcap.py | 11 <span class="insertion">++++++++++</span><span class="deletion">-</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l8" name="l8">8</a></td><td><pre> 1 file changed, 10 insertions(+), 1 deletion(-)</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l9" name="l9">9</a></td><td><pre></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l10" name="l10">10</a></td><td><pre><span class="bold">diff --git a/coinmarketcap.py b/coinmarketcap.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l11" name="l11">11</a></td><td><pre><span class="bold">index 6d8201b..382dc0d 100644</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l12" name="l12">12</a></td><td><pre><span class="bold">--- a/coinmarketcap.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l13" name="l13">13</a></td><td><pre><span class="bold">+++ b/coinmarketcap.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l14" name="l14">14</a></td><td><pre><span class="hunk">@@ -6,6 +6,15 @@</span> </span>import json</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l15" name="l15">15</a></td><td><pre> import time</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l16" name="l16">16</a></td><td><pre> import zlib</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l17" name="l17">17</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l18" name="l18">18</a></td><td><pre><span class="insertion">+</span><span class="insertion"># Find a better way to do this...</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l19" name="l19">19</a></td><td><pre><span class="insertion">+</span><span class="insertion">def replace_nulls(json_elem):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l20" name="l20">20</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if isinstance(json_elem, list):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l21" name="l21">21</a></td><td><pre><span class="insertion">+</span> <span class="insertion">return [replace_nulls(elem) for elem in json_elem]</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l22" name="l22">22</a></td><td><pre><span class="insertion">+</span> <span class="insertion">elif isinstance(json_elem, dict):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l23" name="l23">23</a></td><td><pre><span class="insertion">+</span> <span class="insertion">return {key: replace_nulls(value) for key, value in json_elem.items()}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l24" name="l24">24</a></td><td><pre><span class="insertion">+</span> <span class="insertion">else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l25" name="l25">25</a></td><td><pre><span class="insertion">+</span> <span class="insertion">return '0' if json_elem is None else json_elem</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l26" name="l26">26</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l27" name="l27">27</a></td><td><pre> class CoinMarketCap(object):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l28" name="l28">28</a></td><td><pre> def __init__(self, api_key):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l29" name="l29">29</a></td><td><pre> self.api_key = api_key</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l30" name="l30">30</a></td><td><pre><span class="hunk">@@ -39,7 +48,7 @@</span> </span>class CoinMarketCap(object):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l31" name="l31">31</a></td><td><pre> if time.time() - self.last['ticker'] &lt; 300:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l32" name="l32">32</a></td><td><pre> return self.cache['ticker']</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l33" name="l33">33</a></td><td><pre> else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l34" name="l34">34</a></td><td><pre><span class="deletion">- data = self._api('cryptocurrency/listings/latest?limit=5000')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l35" name="l35">35</a></td><td><pre><span class="insertion">+</span> <span class="insertion">data = replace_nulls(self._api('cryptocurrency/listings/latest?limit=5000'))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l36" name="l36">36</a></td><td><pre> self.cache['ticker'] = dict()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l37" name="l37">37</a></td><td><pre> for item in data:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l38" name="l38">38</a></td><td><pre> self.cache['ticker'][item['id']] = {</span></pre></td></tr>
</table>
<div id="footer">site generated by <a href="https://github.com/acidvegas/stagit" target="_blank">stagit</a> on <a href="#">05/03/20</a></div>

View File

@ -1,15 +0,0 @@
<!doctype html>
<link rel="stylesheet" href="../style.css">
<title>coinmarketcap</title>
<h1><a href="../index.html" title="Home">&#8962;&#xFE0E;</a> coinmarketcap</h1>
<div style="padding-left:30px">
<h4>python class for the api on coinmarketcap</h4>
<h5>git clone <a href="https://github.com/acidvegas/coinmarketcap.git" title="coinmarketcap clone URL">https://github.com/acidvegas/coinmarketcap.git</a></h5>
</div>
<hr>
<table id="main" cellpadding="0" cellspacing="0">
<tr id="navigation"><th></th><th>Hash</th><th>Commit message</th><th>Author</th><th>Date</th><th align="right">Files</th><th align="right">+</th><th align="right">-</th></tr>
<tr class="item"><td><span style="color:green" title="acidvegas (MOST DANGEROUS MOTHERFUCK) <acid.vegas@acid.vegas>&#13;EF4B922DB85DC9DE">&#128274;&#xFE0E;</span></td><td><a href="commit/e5f75a8.html" title="View this commit">e5f75a8</a></td><td>Fixed null values</td><td>acidvegas</td><td>2020-04-22 02:57</td><td align="right">1</td><td align="right">+10</td><td align="right">-1</td></tr>
<tr class="item"><td><span style="color:green" title="acidvegas (MOST DANGEROUS MOTHERFUCK) <acid.vegas@acid.vegas>&#13;EF4B922DB85DC9DE">&#128274;&#xFE0E;</span></td><td><a href="commit/9d4eb03.html" title="View this commit">9d4eb03</a></td><td>Initial commit</td><td>acidvegas</td><td>2020-04-09 20:37</td><td align="right">3</td><td align="right">+121</td><td align="right">-0</td></tr>
</table>
<div id="footer">site generated by <a href="https://github.com/acidvegas/stagit" target="_blank">stagit</a> on <a href="#">05/03/20</a></div>

File diff suppressed because it is too large Load Diff

View File

@ -1,14 +0,0 @@
<!doctype html>
<link rel="stylesheet" href="../style.css">
<title>dickserv</title>
<h1><a href="../index.html" title="Home">&#8962;&#xFE0E;</a> dickserv</h1>
<div style="padding-left:30px">
<h4>irc bot with many useful commands</h4>
<h5>git clone <a href="https://github.com/acidvegas/dickserv.git" title="dickserv clone URL">https://github.com/acidvegas/dickserv.git</a></h5>
</div>
<hr>
<table id="main" cellpadding="0" cellspacing="0">
<tr id="navigation"><th></th><th>Hash</th><th>Commit message</th><th>Author</th><th>Date</th><th align="right">Files</th><th align="right">+</th><th align="right">-</th></tr>
<tr class="item"><td></td><td><a href="commit/11ceb7f.html" title="View this commit">11ceb7f</a></td><td>Initial commit</td><td>acidvegas</td><td>2019-06-24 22:13</td><td align="right">25</td><td align="right">+1406</td><td align="right">-0</td></tr>
</table>
<div id="footer">site generated by <a href="https://github.com/acidvegas/stagit" target="_blank">stagit</a> on <a href="#">05/03/20</a></div>

BIN
hardcore.wav Normal file

Binary file not shown.

BIN
i/acidvegas.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

BIN
i/blog.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

BIN
i/crowdkill.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 MiB

BIN
i/git.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

BIN
i/gpg.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

BIN
i/mail.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

BIN
i/mostdangerous.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.0 KiB

BIN
i/musick.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

BIN
i/supernets.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

BIN
i/x.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 337 B

View File

@ -1,484 +0,0 @@
<!doctype html>
<link rel="stylesheet" href="../../style.css">
<title>iex :: f9ba8a9</title>
<h1><a href="../index.html" title="Back to Repository">&larr;&#xFE0E;</a> iex :: f9ba8a9</h1>
<hr>
<table id="main" cellpadding="0" cellspacing="0">
<tr class="item"><td class="linenumber"><a href="#l1" name="l1">1</a></td><td><pre><span class="commit">commit f9ba8a9e357fb8c983162528d631089689e20699</span><span class="commit"> (</span><span class="reference">HEAD -&gt; </span><span class="branch">master</span><span class="commit">)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l2" name="l2">2</a></td><td><pre>Author: acidvegas &lt;acid.vegas@acid.vegas&gt;</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l3" name="l3">3</a></td><td><pre>Date: Mon Jun 24 22:59:16 2019 -0400</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l4" name="l4">4</a></td><td><pre></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l5" name="l5">5</a></td><td><pre> Initial commit</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l6" name="l6">6</a></td><td><pre>---</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l7" name="l7">7</a></td><td><pre> LICENSE | 15 <span class="insertion">+++</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l8" name="l8">8</a></td><td><pre> README.md | 19 <span class="insertion">+++</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l9" name="l9">9</a></td><td><pre> iex/iex.py | 413 <span class="insertion">+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l10" name="l10">10</a></td><td><pre> 3 files changed, 447 insertions(+)</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l11" name="l11">11</a></td><td><pre></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l12" name="l12">12</a></td><td><pre><span class="bold">diff --git a/LICENSE b/LICENSE</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l13" name="l13">13</a></td><td><pre><span class="bold">new file mode 100644</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l14" name="l14">14</a></td><td><pre><span class="bold">index 0000000..69997e8</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l15" name="l15">15</a></td><td><pre><span class="bold">--- /dev/null</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l16" name="l16">16</a></td><td><pre><span class="bold">+++ b/LICENSE</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l17" name="l17">17</a></td><td><pre><span class="hunk">@@ -0,0 +1,15 @@</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l18" name="l18">18</a></td><td><pre><span class="insertion">+</span><span class="insertion">ISC License</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l19" name="l19">19</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l20" name="l20">20</a></td><td><pre><span class="insertion">+</span><span class="insertion">Copyright (c) 2019, acidvegas &lt;acid.vegas@acid.vegas&gt;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l21" name="l21">21</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l22" name="l22">22</a></td><td><pre><span class="insertion">+</span><span class="insertion">Permission to use, copy, modify, and/or distribute this software for any</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l23" name="l23">23</a></td><td><pre><span class="insertion">+</span><span class="insertion">purpose with or without fee is hereby granted, provided that the above</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l24" name="l24">24</a></td><td><pre><span class="insertion">+</span><span class="insertion">copyright notice and this permission notice appear in all copies.</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l25" name="l25">25</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l26" name="l26">26</a></td><td><pre><span class="insertion">+</span><span class="insertion">THE SOFTWARE IS PROVIDED &quot;AS IS&quot; AND THE AUTHOR DISCLAIMS ALL WARRANTIES</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l27" name="l27">27</a></td><td><pre><span class="insertion">+</span><span class="insertion">WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l28" name="l28">28</a></td><td><pre><span class="insertion">+</span><span class="insertion">MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l29" name="l29">29</a></td><td><pre><span class="insertion">+</span><span class="insertion">ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l30" name="l30">30</a></td><td><pre><span class="insertion">+</span><span class="insertion">WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l31" name="l31">31</a></td><td><pre><span class="insertion">+</span><span class="insertion">ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l32" name="l32">32</a></td><td><pre><span class="insertion">+</span><span class="insertion">OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l33" name="l33">33</a></td><td><pre><span class="bold">diff --git a/README.md b/README.md</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l34" name="l34">34</a></td><td><pre><span class="bold">new file mode 100644</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l35" name="l35">35</a></td><td><pre><span class="bold">index 0000000..19f5c66</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l36" name="l36">36</a></td><td><pre><span class="bold">--- /dev/null</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l37" name="l37">37</a></td><td><pre><span class="bold">+++ b/README.md</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l38" name="l38">38</a></td><td><pre><span class="hunk">@@ -0,0 +1,19 @@</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l39" name="l39">39</a></td><td><pre><span class="insertion">+</span><span class="insertion">###### Requirments</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l40" name="l40">40</a></td><td><pre><span class="insertion">+</span><span class="insertion">* [Python](https://www.python.org/downloads/) *(**Note:** This script was developed to be used with the latest version of Python.)*</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l41" name="l41">41</a></td><td><pre><span class="insertion">+</span><span class="insertion">* [PySocks](https://pypi.python.org/pypi/PySocks) *(**Optional:** For using the `proxy` setting.)*</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l42" name="l42">42</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l43" name="l43">43</a></td><td><pre><span class="insertion">+</span><span class="insertion">###### Commands</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l44" name="l44">44</a></td><td><pre><span class="insertion">+</span><span class="insertion">| Command | Description |</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l45" name="l45">45</a></td><td><pre><span class="insertion">+</span><span class="insertion">| --- | --- |</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l46" name="l46">46</a></td><td><pre><span class="insertion">+</span><span class="insertion">| @iex | Information about the bot. |</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l47" name="l47">47</a></td><td><pre><span class="insertion">+</span><span class="insertion">| !stock \&lt;symbol&gt; | Return information for the \&lt;symbol&gt; stock. *(\&lt;symbol&gt; can be a comma seperated list)* |</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l48" name="l48">48</a></td><td><pre><span class="insertion">+</span><span class="insertion">| !stock company \&lt;symbol&gt; | Return information for the \&lt;symbol&gt; company. |</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l49" name="l49">49</a></td><td><pre><span class="insertion">+</span><span class="insertion">| !stock list \&lt;active/gainers/losers/volume/percent&gt; | Return lists based on \&lt;active/gainers/losers/volume/percent&gt;. |</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l50" name="l50">50</a></td><td><pre><span class="insertion">+</span><span class="insertion">| !stock news \&lt;symbol&gt; | Get the latest news about the \&lt;symbol&gt; stock. |</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l51" name="l51">51</a></td><td><pre><span class="insertion">+</span><span class="insertion">| !stock search \&lt;query&gt; | Search for a company name containing \&lt;query&gt;. |</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l52" name="l52">52</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l53" name="l53">53</a></td><td><pre><span class="insertion">+</span><span class="insertion">###### Mirrors</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l54" name="l54">54</a></td><td><pre><span class="insertion">+</span><span class="insertion">- [acid.vegas](https://acid.vegas/iex) *(main)*</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l55" name="l55">55</a></td><td><pre><span class="insertion">+</span><span class="insertion">- [SuperNETs](https://git.supernets.org/pumpcoin/iex)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l56" name="l56">56</a></td><td><pre><span class="insertion">+</span><span class="insertion">- [GitHub](https://github.com/pumpcoin/iex)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l57" name="l57">57</a></td><td><pre><span class="insertion">+</span><span class="insertion">- [GitLab](https://gitlab.com/pumpcoin/iex)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l58" name="l58">58</a></td><td><pre><span class="bold">diff --git a/iex/iex.py b/iex/iex.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l59" name="l59">59</a></td><td><pre><span class="bold">new file mode 100644</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l60" name="l60">60</a></td><td><pre><span class="bold">index 0000000..41bb604</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l61" name="l61">61</a></td><td><pre><span class="bold">--- /dev/null</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l62" name="l62">62</a></td><td><pre><span class="bold">+++ b/iex/iex.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l63" name="l63">63</a></td><td><pre><span class="hunk">@@ -0,0 +1,413 @@</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l64" name="l64">64</a></td><td><pre><span class="insertion">+</span><span class="insertion">#!/usr/bin/env python</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l65" name="l65">65</a></td><td><pre><span class="insertion">+</span><span class="insertion"># IExTrading IRC Bot - Developed by acidvegas in Python (https://acid.vegas/iex)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l66" name="l66">66</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l67" name="l67">67</a></td><td><pre><span class="insertion">+</span><span class="insertion">import http.client</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l68" name="l68">68</a></td><td><pre><span class="insertion">+</span><span class="insertion">import json</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l69" name="l69">69</a></td><td><pre><span class="insertion">+</span><span class="insertion">import random</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l70" name="l70">70</a></td><td><pre><span class="insertion">+</span><span class="insertion">import socket</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l71" name="l71">71</a></td><td><pre><span class="insertion">+</span><span class="insertion">import time</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l72" name="l72">72</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l73" name="l73">73</a></td><td><pre><span class="insertion">+</span><span class="insertion"># Connection</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l74" name="l74">74</a></td><td><pre><span class="insertion">+</span><span class="insertion">server = 'irc.server.com'</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l75" name="l75">75</a></td><td><pre><span class="insertion">+</span><span class="insertion">port = 6667</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l76" name="l76">76</a></td><td><pre><span class="insertion">+</span><span class="insertion">proxy = None # Proxy should be a Socks5 in IP:PORT format.</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l77" name="l77">77</a></td><td><pre><span class="insertion">+</span><span class="insertion">use_ipv6 = False</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l78" name="l78">78</a></td><td><pre><span class="insertion">+</span><span class="insertion">use_ssl = False</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l79" name="l79">79</a></td><td><pre><span class="insertion">+</span><span class="insertion">ssl_verify = False</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l80" name="l80">80</a></td><td><pre><span class="insertion">+</span><span class="insertion">vhost = None</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l81" name="l81">81</a></td><td><pre><span class="insertion">+</span><span class="insertion">channel = '#stocks'</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l82" name="l82">82</a></td><td><pre><span class="insertion">+</span><span class="insertion">key = None</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l83" name="l83">83</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l84" name="l84">84</a></td><td><pre><span class="insertion">+</span><span class="insertion"># Certificate</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l85" name="l85">85</a></td><td><pre><span class="insertion">+</span><span class="insertion">cert_key = None</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l86" name="l86">86</a></td><td><pre><span class="insertion">+</span><span class="insertion">cert_file = None</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l87" name="l87">87</a></td><td><pre><span class="insertion">+</span><span class="insertion">cert_pass = None</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l88" name="l88">88</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l89" name="l89">89</a></td><td><pre><span class="insertion">+</span><span class="insertion"># Identity</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l90" name="l90">90</a></td><td><pre><span class="insertion">+</span><span class="insertion">nickname = 'StockMarket'</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l91" name="l91">91</a></td><td><pre><span class="insertion">+</span><span class="insertion">username = 'iex'</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l92" name="l92">92</a></td><td><pre><span class="insertion">+</span><span class="insertion">realname = 'acid.vegas/iex'</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l93" name="l93">93</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l94" name="l94">94</a></td><td><pre><span class="insertion">+</span><span class="insertion"># Login</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l95" name="l95">95</a></td><td><pre><span class="insertion">+</span><span class="insertion">nickserv_password = None</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l96" name="l96">96</a></td><td><pre><span class="insertion">+</span><span class="insertion">network_password = None</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l97" name="l97">97</a></td><td><pre><span class="insertion">+</span><span class="insertion">operator_password = None</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l98" name="l98">98</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l99" name="l99">99</a></td><td><pre><span class="insertion">+</span><span class="insertion"># Settings</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l100" name="l100">100</a></td><td><pre><span class="insertion">+</span><span class="insertion">throttle_cmd = 3</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l101" name="l101">101</a></td><td><pre><span class="insertion">+</span><span class="insertion">throttle_msg = 0.5</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l102" name="l102">102</a></td><td><pre><span class="insertion">+</span><span class="insertion">user_modes = None</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l103" name="l103">103</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l104" name="l104">104</a></td><td><pre><span class="insertion">+</span><span class="insertion"># Formatting Control Characters / Color Codes</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l105" name="l105">105</a></td><td><pre><span class="insertion">+</span><span class="insertion">bold = '\x02'</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l106" name="l106">106</a></td><td><pre><span class="insertion">+</span><span class="insertion">italic = '\x1D'</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l107" name="l107">107</a></td><td><pre><span class="insertion">+</span><span class="insertion">underline = '\x1F'</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l108" name="l108">108</a></td><td><pre><span class="insertion">+</span><span class="insertion">reverse = '\x16'</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l109" name="l109">109</a></td><td><pre><span class="insertion">+</span><span class="insertion">reset = '\x0f'</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l110" name="l110">110</a></td><td><pre><span class="insertion">+</span><span class="insertion">white = '00'</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l111" name="l111">111</a></td><td><pre><span class="insertion">+</span><span class="insertion">black = '01'</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l112" name="l112">112</a></td><td><pre><span class="insertion">+</span><span class="insertion">blue = '02'</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l113" name="l113">113</a></td><td><pre><span class="insertion">+</span><span class="insertion">green = '03'</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l114" name="l114">114</a></td><td><pre><span class="insertion">+</span><span class="insertion">red = '04'</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l115" name="l115">115</a></td><td><pre><span class="insertion">+</span><span class="insertion">brown = '05'</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l116" name="l116">116</a></td><td><pre><span class="insertion">+</span><span class="insertion">purple = '06'</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l117" name="l117">117</a></td><td><pre><span class="insertion">+</span><span class="insertion">orange = '07'</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l118" name="l118">118</a></td><td><pre><span class="insertion">+</span><span class="insertion">yellow = '08'</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l119" name="l119">119</a></td><td><pre><span class="insertion">+</span><span class="insertion">light_green = '09'</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l120" name="l120">120</a></td><td><pre><span class="insertion">+</span><span class="insertion">cyan = '10'</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l121" name="l121">121</a></td><td><pre><span class="insertion">+</span><span class="insertion">light_cyan = '11'</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l122" name="l122">122</a></td><td><pre><span class="insertion">+</span><span class="insertion">light_blue = '12'</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l123" name="l123">123</a></td><td><pre><span class="insertion">+</span><span class="insertion">pink = '13'</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l124" name="l124">124</a></td><td><pre><span class="insertion">+</span><span class="insertion">grey = '14'</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l125" name="l125">125</a></td><td><pre><span class="insertion">+</span><span class="insertion">light_grey = '15'</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l126" name="l126">126</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l127" name="l127">127</a></td><td><pre><span class="insertion">+</span><span class="insertion">def condense_value(value):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l128" name="l128">128</a></td><td><pre><span class="insertion">+</span> <span class="insertion">value = float(value)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l129" name="l129">129</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if value &lt; 0.01:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l130" name="l130">130</a></td><td><pre><span class="insertion">+</span> <span class="insertion">return '${0:,.8f}'.format(value)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l131" name="l131">131</a></td><td><pre><span class="insertion">+</span> <span class="insertion">elif value &lt; 24.99:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l132" name="l132">132</a></td><td><pre><span class="insertion">+</span> <span class="insertion">return '${0:,.2f}'.format(value)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l133" name="l133">133</a></td><td><pre><span class="insertion">+</span> <span class="insertion">else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l134" name="l134">134</a></td><td><pre><span class="insertion">+</span> <span class="insertion">return '${:,}'.format(int(value))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l135" name="l135">135</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l136" name="l136">136</a></td><td><pre><span class="insertion">+</span><span class="insertion">def debug(msg):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l137" name="l137">137</a></td><td><pre><span class="insertion">+</span> <span class="insertion">print(f'{get_time()} | [~] - {msg}')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l138" name="l138">138</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l139" name="l139">139</a></td><td><pre><span class="insertion">+</span><span class="insertion">def error(msg, reason=None):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l140" name="l140">140</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if reason:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l141" name="l141">141</a></td><td><pre><span class="insertion">+</span> <span class="insertion">print(f'{get_time()} | [!] - {msg} ({reason})')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l142" name="l142">142</a></td><td><pre><span class="insertion">+</span> <span class="insertion">else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l143" name="l143">143</a></td><td><pre><span class="insertion">+</span> <span class="insertion">print(f'{get_time()} | [!] - {msg}')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l144" name="l144">144</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l145" name="l145">145</a></td><td><pre><span class="insertion">+</span><span class="insertion">def error_exit(msg):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l146" name="l146">146</a></td><td><pre><span class="insertion">+</span> <span class="insertion">raise SystemExit(f'{get_time()} | [!] - {msg}')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l147" name="l147">147</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l148" name="l148">148</a></td><td><pre><span class="insertion">+</span><span class="insertion">def get_float(data):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l149" name="l149">149</a></td><td><pre><span class="insertion">+</span> <span class="insertion">try:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l150" name="l150">150</a></td><td><pre><span class="insertion">+</span> <span class="insertion">float(data)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l151" name="l151">151</a></td><td><pre><span class="insertion">+</span> <span class="insertion">return True</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l152" name="l152">152</a></td><td><pre><span class="insertion">+</span> <span class="insertion">except ValueError:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l153" name="l153">153</a></td><td><pre><span class="insertion">+</span> <span class="insertion">return False</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l154" name="l154">154</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l155" name="l155">155</a></td><td><pre><span class="insertion">+</span><span class="insertion">def get_time():</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l156" name="l156">156</a></td><td><pre><span class="insertion">+</span> <span class="insertion">return time.strftime('%I:%M:%S')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l157" name="l157">157</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l158" name="l158">158</a></td><td><pre><span class="insertion">+</span><span class="insertion">def percent_color(percent):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l159" name="l159">159</a></td><td><pre><span class="insertion">+</span> <span class="insertion">percent = float(percent)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l160" name="l160">160</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if percent == 0.0:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l161" name="l161">161</a></td><td><pre><span class="insertion">+</span> <span class="insertion">return grey</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l162" name="l162">162</a></td><td><pre><span class="insertion">+</span> <span class="insertion">elif percent &lt; 0.0:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l163" name="l163">163</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if percent &gt; -10.0:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l164" name="l164">164</a></td><td><pre><span class="insertion">+</span> <span class="insertion">return brown</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l165" name="l165">165</a></td><td><pre><span class="insertion">+</span> <span class="insertion">else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l166" name="l166">166</a></td><td><pre><span class="insertion">+</span> <span class="insertion">return red</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l167" name="l167">167</a></td><td><pre><span class="insertion">+</span> <span class="insertion">else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l168" name="l168">168</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if percent &lt; 10.0:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l169" name="l169">169</a></td><td><pre><span class="insertion">+</span> <span class="insertion">return green</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l170" name="l170">170</a></td><td><pre><span class="insertion">+</span> <span class="insertion">else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l171" name="l171">171</a></td><td><pre><span class="insertion">+</span> <span class="insertion">return light_green</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l172" name="l172">172</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l173" name="l173">173</a></td><td><pre><span class="insertion">+</span><span class="insertion">def random_int(min, max):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l174" name="l174">174</a></td><td><pre><span class="insertion">+</span> <span class="insertion">return random.randint(min, max)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l175" name="l175">175</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l176" name="l176">176</a></td><td><pre><span class="insertion">+</span><span class="insertion">class IEX:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l177" name="l177">177</a></td><td><pre><span class="insertion">+</span> <span class="insertion">def api(api_data):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l178" name="l178">178</a></td><td><pre><span class="insertion">+</span> <span class="insertion">conn = http.client.HTTPSConnection('api.iextrading.com', timeout=15)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l179" name="l179">179</a></td><td><pre><span class="insertion">+</span> <span class="insertion">conn.request('GET', '/1.0/' + api_data)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l180" name="l180">180</a></td><td><pre><span class="insertion">+</span> <span class="insertion">response = conn.getresponse().read().decode('utf-8')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l181" name="l181">181</a></td><td><pre><span class="insertion">+</span> <span class="insertion">data = json.loads(response)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l182" name="l182">182</a></td><td><pre><span class="insertion">+</span> <span class="insertion">conn.close()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l183" name="l183">183</a></td><td><pre><span class="insertion">+</span> <span class="insertion">return data</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l184" name="l184">184</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l185" name="l185">185</a></td><td><pre><span class="insertion">+</span> <span class="insertion">def company(symbol):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l186" name="l186">186</a></td><td><pre><span class="insertion">+</span> <span class="insertion">return IEX.api(f'stock/{symbol}/company')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l187" name="l187">187</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l188" name="l188">188</a></td><td><pre><span class="insertion">+</span> <span class="insertion">def lists(list_type):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l189" name="l189">189</a></td><td><pre><span class="insertion">+</span> <span class="insertion">return IEX.api('stock/market/list/' + list_type)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l190" name="l190">190</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l191" name="l191">191</a></td><td><pre><span class="insertion">+</span> <span class="insertion">def news(symbol):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l192" name="l192">192</a></td><td><pre><span class="insertion">+</span> <span class="insertion">return IEX.api(f'stock/{symbol}/news')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l193" name="l193">193</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l194" name="l194">194</a></td><td><pre><span class="insertion">+</span> <span class="insertion">def quote(symbols):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l195" name="l195">195</a></td><td><pre><span class="insertion">+</span> <span class="insertion">data = IEX.api(f'stock/market/batch?symbols={symbols}&amp;types=quote')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l196" name="l196">196</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if len(data) == 1:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l197" name="l197">197</a></td><td><pre><span class="insertion">+</span> <span class="insertion">return data[next(iter(data))]['quote']</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l198" name="l198">198</a></td><td><pre><span class="insertion">+</span> <span class="insertion">else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l199" name="l199">199</a></td><td><pre><span class="insertion">+</span> <span class="insertion">return [data[item]['quote'] for item in data]</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l200" name="l200">200</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l201" name="l201">201</a></td><td><pre><span class="insertion">+</span> <span class="insertion">def stats(symbol):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l202" name="l202">202</a></td><td><pre><span class="insertion">+</span> <span class="insertion">return IEX.api(f'stock/{symbol}/stats')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l203" name="l203">203</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l204" name="l204">204</a></td><td><pre><span class="insertion">+</span> <span class="insertion">def symbols():</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l205" name="l205">205</a></td><td><pre><span class="insertion">+</span> <span class="insertion">return IEX.api('ref-data/symbols')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l206" name="l206">206</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l207" name="l207">207</a></td><td><pre><span class="insertion">+</span><span class="insertion">class IRC(object):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l208" name="l208">208</a></td><td><pre><span class="insertion">+</span> <span class="insertion">def __init__(self):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l209" name="l209">209</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.last = 0</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l210" name="l210">210</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.slow = False</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l211" name="l211">211</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.sock = None</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l212" name="l212">212</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l213" name="l213">213</a></td><td><pre><span class="insertion">+</span> <span class="insertion">def stock_info(self, data):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l214" name="l214">214</a></td><td><pre><span class="insertion">+</span> <span class="insertion">sep = self.color('|', grey)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l215" name="l215">215</a></td><td><pre><span class="insertion">+</span> <span class="insertion">sep2 = self.color('/', grey)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l216" name="l216">216</a></td><td><pre><span class="insertion">+</span> <span class="insertion">name = '{0} ({1})'.format(self.color(data['companyName'], white), data['symbol'])</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l217" name="l217">217</a></td><td><pre><span class="insertion">+</span> <span class="insertion">value = condense_value(data['latestPrice'])</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l218" name="l218">218</a></td><td><pre><span class="insertion">+</span> <span class="insertion">percent = self.color('{:,.2f}%'.format(float(data['change'])), percent_color(data['change']))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l219" name="l219">219</a></td><td><pre><span class="insertion">+</span> <span class="insertion">volume = '{0} {1}'.format(self.color('Volume:', white), '${:,}'.format(data['avgTotalVolume']))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l220" name="l220">220</a></td><td><pre><span class="insertion">+</span> <span class="insertion">cap = '{0} {1}'.format(self.color('Market Cap:', white), '${:,}'.format(data['marketCap']))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l221" name="l221">221</a></td><td><pre><span class="insertion">+</span> <span class="insertion">return f'{name} {sep} {value} ({percent}) {sep} {volume} {sep} {cap}'</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l222" name="l222">222</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l223" name="l223">223</a></td><td><pre><span class="insertion">+</span> <span class="insertion">def stock_matrix(self, data): # very retarded way of calculating the longest strings per-column</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l224" name="l224">224</a></td><td><pre><span class="insertion">+</span> <span class="insertion">results = {'symbol':list(),'value':list(),'percent':list(),'volume':list(),'cap':list()}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l225" name="l225">225</a></td><td><pre><span class="insertion">+</span> <span class="insertion">for item in data:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l226" name="l226">226</a></td><td><pre><span class="insertion">+</span> <span class="insertion">results['symbol'].append(item['symbol'])</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l227" name="l227">227</a></td><td><pre><span class="insertion">+</span> <span class="insertion">results['value'].append(condense_value(item['latestPrice']))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l228" name="l228">228</a></td><td><pre><span class="insertion">+</span> <span class="insertion">results['percent'].append('{:,.2f}%'.format(float(item['change'])))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l229" name="l229">229</a></td><td><pre><span class="insertion">+</span> <span class="insertion">results['volume'].append('${:,}'.format(item['avgTotalVolume']))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l230" name="l230">230</a></td><td><pre><span class="insertion">+</span> <span class="insertion">results['cap'].append('${:,}'.format(item['marketCap']))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l231" name="l231">231</a></td><td><pre><span class="insertion">+</span> <span class="insertion">for item in results:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l232" name="l232">232</a></td><td><pre><span class="insertion">+</span> <span class="insertion">results[item] = len(max(results[item], key=len))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l233" name="l233">233</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if results['symbol'] &lt; len('Symbol'):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l234" name="l234">234</a></td><td><pre><span class="insertion">+</span> <span class="insertion">results['symbol'] = len('Symbol')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l235" name="l235">235</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if results['value'] &lt; len('Value'):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l236" name="l236">236</a></td><td><pre><span class="insertion">+</span> <span class="insertion">results['value'] = len('Value')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l237" name="l237">237</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if results['percent'] &lt; len('Change'):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l238" name="l238">238</a></td><td><pre><span class="insertion">+</span> <span class="insertion">results['percent'] = len('Change')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l239" name="l239">239</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if results['volume'] &lt; len('Volume'):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l240" name="l240">240</a></td><td><pre><span class="insertion">+</span> <span class="insertion">results['volume'] = len('Volume')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l241" name="l241">241</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if results['cap'] &lt; len('Market Cap'):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l242" name="l242">242</a></td><td><pre><span class="insertion">+</span> <span class="insertion">results['cap'] = len('Market Cap')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l243" name="l243">243</a></td><td><pre><span class="insertion">+</span> <span class="insertion">return results</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l244" name="l244">244</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l245" name="l245">245</a></td><td><pre><span class="insertion">+</span> <span class="insertion">def stock_table(self, data):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l246" name="l246">246</a></td><td><pre><span class="insertion">+</span> <span class="insertion">matrix = self.stock_matrix(data)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l247" name="l247">247</a></td><td><pre><span class="insertion">+</span> <span class="insertion">header = self.color(' {0} {1} {2} {3} {4}'.format('Symbol'.center(matrix['symbol']), 'Value'.center(matrix['value']), 'Percent'.center(matrix['percent']), 'Volume'.center(matrix['volume']), 'Market Cap'.center(matrix['cap'])), black, light_grey)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l248" name="l248">248</a></td><td><pre><span class="insertion">+</span> <span class="insertion">lines = [header,]</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l249" name="l249">249</a></td><td><pre><span class="insertion">+</span> <span class="insertion">for item in data:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l250" name="l250">250</a></td><td><pre><span class="insertion">+</span> <span class="insertion">symbol = item['symbol'].ljust(matrix['symbol'])</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l251" name="l251">251</a></td><td><pre><span class="insertion">+</span> <span class="insertion">value = condense_value(item['latestPrice']).rjust(matrix['value'])</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l252" name="l252">252</a></td><td><pre><span class="insertion">+</span> <span class="insertion">percent = self.color('{:,.2f}%'.format(float(item['change'])).rjust(matrix['percent']), percent_color(item['change']))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l253" name="l253">253</a></td><td><pre><span class="insertion">+</span> <span class="insertion">volume = '${:,}'.format(item['avgTotalVolume']).rjust(matrix['volume'])</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l254" name="l254">254</a></td><td><pre><span class="insertion">+</span> <span class="insertion">cap = '${:,}'.format(item['marketCap']).rjust(matrix['cap'])</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l255" name="l255">255</a></td><td><pre><span class="insertion">+</span> <span class="insertion">lines.append(' {0} | {1} | {2} | {3} | {4} '.format(symbol,value,percent,volume,cap))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l256" name="l256">256</a></td><td><pre><span class="insertion">+</span> <span class="insertion">return lines</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l257" name="l257">257</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l258" name="l258">258</a></td><td><pre><span class="insertion">+</span> <span class="insertion">def color(self, msg, foreground, background=None):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l259" name="l259">259</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if background:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l260" name="l260">260</a></td><td><pre><span class="insertion">+</span> <span class="insertion">return f'\x03{foreground},{background}{msg}{reset}'</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l261" name="l261">261</a></td><td><pre><span class="insertion">+</span> <span class="insertion">else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l262" name="l262">262</a></td><td><pre><span class="insertion">+</span> <span class="insertion">return f'\x03{foreground}{msg}{reset}'</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l263" name="l263">263</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l264" name="l264">264</a></td><td><pre><span class="insertion">+</span> <span class="insertion">def connect(self):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l265" name="l265">265</a></td><td><pre><span class="insertion">+</span> <span class="insertion">try:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l266" name="l266">266</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.create_socket()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l267" name="l267">267</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.sock.connect((server, port))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l268" name="l268">268</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.register()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l269" name="l269">269</a></td><td><pre><span class="insertion">+</span> <span class="insertion">except socket.error as ex:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l270" name="l270">270</a></td><td><pre><span class="insertion">+</span> <span class="insertion">error('Failed to connect to IRC server.', ex)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l271" name="l271">271</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.event_disconnect()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l272" name="l272">272</a></td><td><pre><span class="insertion">+</span> <span class="insertion">else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l273" name="l273">273</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.listen()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l274" name="l274">274</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l275" name="l275">275</a></td><td><pre><span class="insertion">+</span> <span class="insertion">def create_socket(self):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l276" name="l276">276</a></td><td><pre><span class="insertion">+</span> <span class="insertion">family = socket.AF_INET6 if use_ipv6 else socket.AF_INET</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l277" name="l277">277</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if proxy:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l278" name="l278">278</a></td><td><pre><span class="insertion">+</span> <span class="insertion">proxy_server, proxy_port = proxy.split(':')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l279" name="l279">279</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.sock = socks.socksocket(family, socket.SOCK_STREAM)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l280" name="l280">280</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.sock.setblocking(0)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l281" name="l281">281</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.sock.settimeout(15)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l282" name="l282">282</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.sock.setproxy(socks.PROXY_TYPE_SOCKS5, proxy_server, int(proxy_port))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l283" name="l283">283</a></td><td><pre><span class="insertion">+</span> <span class="insertion">else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l284" name="l284">284</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.sock = socket.socket(family, socket.SOCK_STREAM)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l285" name="l285">285</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if vhost:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l286" name="l286">286</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.sock.bind((vhost, 0))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l287" name="l287">287</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if use_ssl:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l288" name="l288">288</a></td><td><pre><span class="insertion">+</span> <span class="insertion">ctx = ssl.SSLContext()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l289" name="l289">289</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if cert_file:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l290" name="l290">290</a></td><td><pre><span class="insertion">+</span> <span class="insertion">ctx.load_cert_chain(cert_file, cert_key, cert_pass)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l291" name="l291">291</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if ssl_verify:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l292" name="l292">292</a></td><td><pre><span class="insertion">+</span> <span class="insertion">ctx.verify_mode = ssl.CERT_REQUIRED</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l293" name="l293">293</a></td><td><pre><span class="insertion">+</span> <span class="insertion">ctx.load_default_certs()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l294" name="l294">294</a></td><td><pre><span class="insertion">+</span> <span class="insertion">else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l295" name="l295">295</a></td><td><pre><span class="insertion">+</span> <span class="insertion">ctx.check_hostname = False</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l296" name="l296">296</a></td><td><pre><span class="insertion">+</span> <span class="insertion">ctx.verify_mode = ssl.CERT_NONE</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l297" name="l297">297</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.sock = ctx.wrap_socket(self.sock)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l298" name="l298">298</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l299" name="l299">299</a></td><td><pre><span class="insertion">+</span> <span class="insertion">def error(self, chan, msg, reason=None):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l300" name="l300">300</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if reason:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l301" name="l301">301</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.sendmsg(chan, '[{0}] {1} {2}'.format(self.color('!', red), msg, self.color('({0})'.format(reason), grey)))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l302" name="l302">302</a></td><td><pre><span class="insertion">+</span> <span class="insertion">else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l303" name="l303">303</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.sendmsg(chan, '[{0}] {1}'.format(self.color('!', red), msg))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l304" name="l304">304</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l305" name="l305">305</a></td><td><pre><span class="insertion">+</span> <span class="insertion">def event_connect(self):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l306" name="l306">306</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if user_modes:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l307" name="l307">307</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.mode(nickname, '+' + user_modes)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l308" name="l308">308</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if nickserv_password:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l309" name="l309">309</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.identify(nickname, nickserv_password)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l310" name="l310">310</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if operator_password:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l311" name="l311">311</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.oper(username, operator_password)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l312" name="l312">312</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.join_channel(channel, key)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l313" name="l313">313</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l314" name="l314">314</a></td><td><pre><span class="insertion">+</span> <span class="insertion">def event_disconnect(self):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l315" name="l315">315</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.sock.close()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l316" name="l316">316</a></td><td><pre><span class="insertion">+</span> <span class="insertion">time.sleep(10)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l317" name="l317">317</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.connect()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l318" name="l318">318</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l319" name="l319">319</a></td><td><pre><span class="insertion">+</span> <span class="insertion">def event_kick(self, chan, kicked):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l320" name="l320">320</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if chan == channel and kicked == nickname:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l321" name="l321">321</a></td><td><pre><span class="insertion">+</span> <span class="insertion">time.sleep(3)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l322" name="l322">322</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.join_channel(channel, key)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l323" name="l323">323</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l324" name="l324">324</a></td><td><pre><span class="insertion">+</span> <span class="insertion">def event_message(self, nick, chan, msg):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l325" name="l325">325</a></td><td><pre><span class="insertion">+</span> <span class="insertion">try:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l326" name="l326">326</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if msg[:1] in '@!':</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l327" name="l327">327</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if time.time() - self.last &lt; throttle_cmd:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l328" name="l328">328</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if not self.slow:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l329" name="l329">329</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.error(chan, 'Slow down nerd!')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l330" name="l330">330</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.slow = True</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l331" name="l331">331</a></td><td><pre><span class="insertion">+</span> <span class="insertion">else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l332" name="l332">332</a></td><td><pre><span class="insertion">+</span> <span class="insertion">args = msg.split()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l333" name="l333">333</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if msg == '@iex':</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l334" name="l334">334</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.sendmsg(chan, bold + 'IExTrading IRC Bot - Developed by acidvegas in Python - https://acid.vegas/iex')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l335" name="l335">335</a></td><td><pre><span class="insertion">+</span> <span class="insertion">elif args[0] == '!stock':</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l336" name="l336">336</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if len(args) == 2:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l337" name="l337">337</a></td><td><pre><span class="insertion">+</span> <span class="insertion">symbols = args[1].upper()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l338" name="l338">338</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if ',' in symbols:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l339" name="l339">339</a></td><td><pre><span class="insertion">+</span> <span class="insertion">symbols = ','.join(list(symbols.split(','))[:10])</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l340" name="l340">340</a></td><td><pre><span class="insertion">+</span> <span class="insertion">data = IEX.quote(symbols)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l341" name="l341">341</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if type(data) == dict:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l342" name="l342">342</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.sendmsg(chan, self.stock_info(data))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l343" name="l343">343</a></td><td><pre><span class="insertion">+</span> <span class="insertion">elif type(data) == list:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l344" name="l344">344</a></td><td><pre><span class="insertion">+</span> <span class="insertion">for line in self.stock_table(data):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l345" name="l345">345</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.sendmsg(chan, line)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l346" name="l346">346</a></td><td><pre><span class="insertion">+</span> <span class="insertion">time.sleep(throttle_msg)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l347" name="l347">347</a></td><td><pre><span class="insertion">+</span> <span class="insertion">else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l348" name="l348">348</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.error(chan, 'Invalid stock names!')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l349" name="l349">349</a></td><td><pre><span class="insertion">+</span> <span class="insertion">else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l350" name="l350">350</a></td><td><pre><span class="insertion">+</span> <span class="insertion">symbol = args[1]</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l351" name="l351">351</a></td><td><pre><span class="insertion">+</span> <span class="insertion">data = IEX.quote(symbol)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l352" name="l352">352</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if data:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l353" name="l353">353</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.sendmsg(chan, self.stock_info(data))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l354" name="l354">354</a></td><td><pre><span class="insertion">+</span> <span class="insertion">else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l355" name="l355">355</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.error(chan, 'Invalid stock name!')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l356" name="l356">356</a></td><td><pre><span class="insertion">+</span> <span class="insertion">elif len(args) == 3:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l357" name="l357">357</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if args[1] == 'company':</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l358" name="l358">358</a></td><td><pre><span class="insertion">+</span> <span class="insertion">symbol = args[2]</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l359" name="l359">359</a></td><td><pre><span class="insertion">+</span> <span class="insertion">data = IEX.company(symbol)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l360" name="l360">360</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if data:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l361" name="l361">361</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.sendmsg(chan, '{0} {1} ({2}) {3} {4} {5} {6} {7} {8}'.format(self.color('Company:', white), data['companyName'], data['symbol'], self.color('|', grey), data['website'], self.color('|', grey), data['industry'], self.color('|', grey), data['CEO']))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l362" name="l362">362</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.sendmsg(chan, '{0} {1}'.format(self.color('Description:', white), data['description']))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l363" name="l363">363</a></td><td><pre><span class="insertion">+</span> <span class="insertion">else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l364" name="l364">364</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.error('Invalid stock name!')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l365" name="l365">365</a></td><td><pre><span class="insertion">+</span> <span class="insertion">elif args[1] == 'search':</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l366" name="l366">366</a></td><td><pre><span class="insertion">+</span> <span class="insertion">query = args[2].lower()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l367" name="l367">367</a></td><td><pre><span class="insertion">+</span> <span class="insertion">data = [{'symbol':item['symbol'],'name':item['name']} for item in IEX.symbols() if query in item['name'].lower()]</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l368" name="l368">368</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if data:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l369" name="l369">369</a></td><td><pre><span class="insertion">+</span> <span class="insertion">count = 1</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l370" name="l370">370</a></td><td><pre><span class="insertion">+</span> <span class="insertion">max_length = len(max([item['name'] for item in data], key=len))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l371" name="l371">371</a></td><td><pre><span class="insertion">+</span> <span class="insertion">for item in data[:10]:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l372" name="l372">372</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.sendmsg(chan, '[{0}] {1} {2} {3}'.format(self.color(str(count), pink), item['name'].ljust(max_length), self.color('|', grey), item['symbol']))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l373" name="l373">373</a></td><td><pre><span class="insertion">+</span> <span class="insertion">count += 1</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l374" name="l374">374</a></td><td><pre><span class="insertion">+</span> <span class="insertion">time.sleep(throttle_msg)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l375" name="l375">375</a></td><td><pre><span class="insertion">+</span> <span class="insertion">else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l376" name="l376">376</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.error(chan, 'No results found.')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l377" name="l377">377</a></td><td><pre><span class="insertion">+</span> <span class="insertion">elif args[1] == 'list':</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l378" name="l378">378</a></td><td><pre><span class="insertion">+</span> <span class="insertion">options = {'active':'mostactive','gainers':'gainers','losers':'losers','volume':'iexvolume','percent':'iexpercent'}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l379" name="l379">379</a></td><td><pre><span class="insertion">+</span> <span class="insertion">option = args[2]</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l380" name="l380">380</a></td><td><pre><span class="insertion">+</span> <span class="insertion">try:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l381" name="l381">381</a></td><td><pre><span class="insertion">+</span> <span class="insertion">option = options[option]</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l382" name="l382">382</a></td><td><pre><span class="insertion">+</span> <span class="insertion">except KeyError:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l383" name="l383">383</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.error(chan, 'Invalid option!', 'Valid options are active, gainers, losers, volume, &amp; percent')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l384" name="l384">384</a></td><td><pre><span class="insertion">+</span> <span class="insertion">else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l385" name="l385">385</a></td><td><pre><span class="insertion">+</span> <span class="insertion">data = IEX.lists(option)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l386" name="l386">386</a></td><td><pre><span class="insertion">+</span> <span class="insertion">for line in self.stock_table(data):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l387" name="l387">387</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.sendmsg(chan, line)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l388" name="l388">388</a></td><td><pre><span class="insertion">+</span> <span class="insertion">time.sleep(throttle_msg)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l389" name="l389">389</a></td><td><pre><span class="insertion">+</span> <span class="insertion">elif args[1] == 'news':</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l390" name="l390">390</a></td><td><pre><span class="insertion">+</span> <span class="insertion">symbol = args[2]</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l391" name="l391">391</a></td><td><pre><span class="insertion">+</span> <span class="insertion">data = IEX.news(symbol)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l392" name="l392">392</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if data:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l393" name="l393">393</a></td><td><pre><span class="insertion">+</span> <span class="insertion">count = 1</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l394" name="l394">394</a></td><td><pre><span class="insertion">+</span> <span class="insertion">for item in data:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l395" name="l395">395</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.sendmsg(chan, '[{0}] {1}'.format(self.color(str(count), pink), item['headline']))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l396" name="l396">396</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.sendmsg(chan, ' - ' + self.color(item['url'], grey))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l397" name="l397">397</a></td><td><pre><span class="insertion">+</span> <span class="insertion">count += 1</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l398" name="l398">398</a></td><td><pre><span class="insertion">+</span> <span class="insertion">time.sleep(throttle_msg)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l399" name="l399">399</a></td><td><pre><span class="insertion">+</span> <span class="insertion">else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l400" name="l400">400</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.error(chan, 'Invalid stock name!')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l401" name="l401">401</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.last = time.time()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l402" name="l402">402</a></td><td><pre><span class="insertion">+</span> <span class="insertion">except Exception as ex:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l403" name="l403">403</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.error(chan, 'Unknown error occured!', ex)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l404" name="l404">404</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l405" name="l405">405</a></td><td><pre><span class="insertion">+</span> <span class="insertion">def event_nick_in_use(self):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l406" name="l406">406</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.nick('IEX_' + str(random_int(10,99)))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l407" name="l407">407</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l408" name="l408">408</a></td><td><pre><span class="insertion">+</span> <span class="insertion">def handle_events(self, data):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l409" name="l409">409</a></td><td><pre><span class="insertion">+</span> <span class="insertion">args = data.split()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l410" name="l410">410</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if data.startswith('ERROR :Closing Link:'):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l411" name="l411">411</a></td><td><pre><span class="insertion">+</span> <span class="insertion">raise Exception('Connection has closed.')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l412" name="l412">412</a></td><td><pre><span class="insertion">+</span> <span class="insertion">elif args[0] == 'PING':</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l413" name="l413">413</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.raw('PONG ' + args[1][1:])</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l414" name="l414">414</a></td><td><pre><span class="insertion">+</span> <span class="insertion">elif args[1] == '001':</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l415" name="l415">415</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.event_connect()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l416" name="l416">416</a></td><td><pre><span class="insertion">+</span> <span class="insertion">elif args[1] == '433':</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l417" name="l417">417</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.event_nick_in_use()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l418" name="l418">418</a></td><td><pre><span class="insertion">+</span> <span class="insertion">elif args[1] == 'KICK':</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l419" name="l419">419</a></td><td><pre><span class="insertion">+</span> <span class="insertion">chan = args[2]</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l420" name="l420">420</a></td><td><pre><span class="insertion">+</span> <span class="insertion">kicked = args[3]</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l421" name="l421">421</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.event_kick(nick, chan, kicked)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l422" name="l422">422</a></td><td><pre><span class="insertion">+</span> <span class="insertion">elif args[1] == 'PRIVMSG':</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l423" name="l423">423</a></td><td><pre><span class="insertion">+</span> <span class="insertion">nick = args[0].split('!')[0][1:]</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l424" name="l424">424</a></td><td><pre><span class="insertion">+</span> <span class="insertion">chan = args[2]</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l425" name="l425">425</a></td><td><pre><span class="insertion">+</span> <span class="insertion">msg = ' '.join(args[3:])[1:]</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l426" name="l426">426</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if chan == channel:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l427" name="l427">427</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.event_message(nick, chan, msg)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l428" name="l428">428</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l429" name="l429">429</a></td><td><pre><span class="insertion">+</span> <span class="insertion">def identify(self, nick, passwd):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l430" name="l430">430</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.sendmsg('nickserv', f'identify {nick} {passwd}')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l431" name="l431">431</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l432" name="l432">432</a></td><td><pre><span class="insertion">+</span> <span class="insertion">def join_channel(self, chan, key=None):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l433" name="l433">433</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.raw(f'JOIN {chan} {key}') if key else self.raw('JOIN ' + chan)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l434" name="l434">434</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l435" name="l435">435</a></td><td><pre><span class="insertion">+</span> <span class="insertion">def listen(self):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l436" name="l436">436</a></td><td><pre><span class="insertion">+</span> <span class="insertion">while True:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l437" name="l437">437</a></td><td><pre><span class="insertion">+</span> <span class="insertion">try:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l438" name="l438">438</a></td><td><pre><span class="insertion">+</span> <span class="insertion">data = self.sock.recv(1024).decode('utf-8')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l439" name="l439">439</a></td><td><pre><span class="insertion">+</span> <span class="insertion">for line in (line for line in data.split('\r\n') if line):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l440" name="l440">440</a></td><td><pre><span class="insertion">+</span> <span class="insertion">debug(line)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l441" name="l441">441</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if len(line.split()) &gt;= 2:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l442" name="l442">442</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.handle_events(line)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l443" name="l443">443</a></td><td><pre><span class="insertion">+</span> <span class="insertion">except (UnicodeDecodeError,UnicodeEncodeError):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l444" name="l444">444</a></td><td><pre><span class="insertion">+</span> <span class="insertion">pass</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l445" name="l445">445</a></td><td><pre><span class="insertion">+</span> <span class="insertion">except Exception as ex:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l446" name="l446">446</a></td><td><pre><span class="insertion">+</span> <span class="insertion">error('Unexpected error occured.', ex)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l447" name="l447">447</a></td><td><pre><span class="insertion">+</span> <span class="insertion">break</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l448" name="l448">448</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.event_disconnect()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l449" name="l449">449</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l450" name="l450">450</a></td><td><pre><span class="insertion">+</span> <span class="insertion">def mode(self, target, mode):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l451" name="l451">451</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.raw(f'MODE {target} {mode}')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l452" name="l452">452</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l453" name="l453">453</a></td><td><pre><span class="insertion">+</span> <span class="insertion">def nick(self, nick):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l454" name="l454">454</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.raw('NICK ' + nick)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l455" name="l455">455</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l456" name="l456">456</a></td><td><pre><span class="insertion">+</span> <span class="insertion">def raw(self, msg):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l457" name="l457">457</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.sock.send(bytes(msg + '\r\n', 'utf-8'))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l458" name="l458">458</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l459" name="l459">459</a></td><td><pre><span class="insertion">+</span> <span class="insertion">def register(self):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l460" name="l460">460</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if network_password:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l461" name="l461">461</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.raw('PASS ' + network_password)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l462" name="l462">462</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.raw(f'USER {username} 0 * :{realname}')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l463" name="l463">463</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.nick(nickname)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l464" name="l464">464</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l465" name="l465">465</a></td><td><pre><span class="insertion">+</span> <span class="insertion">def sendmsg(self, target, msg):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l466" name="l466">466</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.raw(f'PRIVMSG {target} :{msg}')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l467" name="l467">467</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l468" name="l468">468</a></td><td><pre><span class="insertion">+</span><span class="insertion"># Main</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l469" name="l469">469</a></td><td><pre><span class="insertion">+</span><span class="insertion">if proxy:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l470" name="l470">470</a></td><td><pre><span class="insertion">+</span> <span class="insertion">try:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l471" name="l471">471</a></td><td><pre><span class="insertion">+</span> <span class="insertion">import socks</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l472" name="l472">472</a></td><td><pre><span class="insertion">+</span> <span class="insertion">except ImportError:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l473" name="l473">473</a></td><td><pre><span class="insertion">+</span> <span class="insertion">error_exit('Missing PySocks module! (https://pypi.python.org/pypi/PySocks)')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l474" name="l474">474</a></td><td><pre><span class="insertion">+</span><span class="insertion">if use_ssl:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l475" name="l475">475</a></td><td><pre><span class="insertion">+</span> <span class="insertion">import ssl</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l476" name="l476">476</a></td><td><pre><span class="insertion">+</span><span class="insertion">IRC().connect()</span></pre></td></tr>
</table>
<div id="footer">site generated by <a href="https://github.com/acidvegas/stagit" target="_blank">stagit</a> on <a href="#">05/03/20</a></div>

View File

@ -1,14 +0,0 @@
<!doctype html>
<link rel="stylesheet" href="../style.css">
<title>iex</title>
<h1><a href="../index.html" title="Home">&#8962;&#xFE0E;</a> iex</h1>
<div style="padding-left:30px">
<h4>irc bot to query the iextrading api for stock prices & data</h4>
<h5>git clone <a href="https://github.com/acidvegas/iex.git" title="iex clone URL">https://github.com/acidvegas/iex.git</a></h5>
</div>
<hr>
<table id="main" cellpadding="0" cellspacing="0">
<tr id="navigation"><th></th><th>Hash</th><th>Commit message</th><th>Author</th><th>Date</th><th align="right">Files</th><th align="right">+</th><th align="right">-</th></tr>
<tr class="item"><td></td><td><a href="commit/f9ba8a9.html" title="View this commit">f9ba8a9</a></td><td>Initial commit</td><td>acidvegas</td><td>2019-06-24 22:59</td><td align="right">3</td><td align="right">+447</td><td align="right">-0</td></tr>
</table>
<div id="footer">site generated by <a href="https://github.com/acidvegas/stagit" target="_blank">stagit</a> on <a href="#">05/03/20</a></div>

View File

@ -1,38 +1,22 @@
<!doctype html>
<link rel="stylesheet" href="style.css">
<title>Repositories</title>
<h1>&#8962;&#xFE0E; Repositories</h1>
<hr>
<table id="main" cellpadding="0" cellspacing="0">
<tr id="navigation"><th>Name</th><th>Description</th><th>Owner</th><th>Last commit</th></tr>
<tr class="item"><td><a href="acidvegas.github.io" title="acidvegas.github.io">acidvegas.github.io</a></td><td>https://acid.vegas/</td><td>acidvegas</td><td>2020-04-08</td></tr>
<tr class="item"><td><a href="anope" title="anope">anope</a></td><td>supernets anope source code & configuration</td><td>acidvegas</td><td>2020-03-31</td></tr>
<tr class="item"><td><a href="archlinux" title="archlinux">archlinux</a></td><td>backup of my archlinux setup</td><td>acidvegas</td><td>2020-04-09</td></tr>
<tr class="item"><td><a href="asciimaker" title="asciimaker">asciimaker</a></td><td>draw ascii art straight from your web browser</td><td>acidvegas</td><td>2019-06-24</td></tr>
<tr class="item"><td><a href="asciipumper" title="asciipumper">asciipumper</a></td><td>mspaint style program to create irc ascii art</td><td>acidvegas</td><td>2019-06-24</td></tr>
<tr class="item"><td><a href="blackjack" title="blackjack">blackjack</a></td><td>irc bot to play blackjack</td><td>acidvegas</td><td>2019-06-24</td></tr>
<tr class="item"><td><a href="booster" title="booster">booster</a></td><td>twitter bot that builds followers</td><td>acidvegas</td><td>2020-04-09</td></tr>
<tr class="item"><td><a href="chir.py" title="chir.py">chir.py</a></td><td>twitter news bot that builds followers, posts, and bitcoin via ppc links</td><td>acidvegas</td><td>2020-04-09</td></tr>
<tr class="item"><td><a href="coinmarketcap" title="coinmarketcap">coinmarketcap</a></td><td>python class for the api on coinmarketcap</td><td>acidvegas</td><td>2020-04-22</td></tr>
<tr class="item"><td><a href="dickserv" title="dickserv">dickserv</a></td><td>irc bot with many useful commands</td><td>acidvegas</td><td>2019-06-24</td></tr>
<tr class="item"><td><a href="iex" title="iex">iex</a></td><td>irc bot to query the iextrading api for stock prices & data</td><td>acidvegas</td><td>2019-06-24</td></tr>
<tr class="item"><td><a href="irc2html" title="irc2html">irc2html</a></td><td>convert irc ascii art to html</td><td>acidvegas</td><td>2019-06-24</td></tr>
<tr class="item"><td><a href="ircart" title="ircart">ircart</a></td><td>massive collection of organized irc ascii art</td><td>acidvegas</td><td>2020-03-19</td></tr>
<tr class="item"><td><a href="irccex" title="irccex">irccex</a></td><td>fantasy cryptocurrency exchange for irc</td><td>acidvegas</td><td>2020-04-22</td></tr>
<tr class="item"><td><a href="mzk" title="mzk">mzk</a></td><td>music theory helper</td><td>acidvegas</td><td>2019-07-25</td></tr>
<tr class="item"><td><a href="pastebin" title="pastebin">pastebin</a></td><td>python class for the api on pastebin</td><td>acidvegas</td><td>2019-06-28</td></tr>
<tr class="item"><td><a href="proxytools" title="proxytools">proxytools</a></td><td>collection of scripts for harvesting & testing proxies</td><td>acidvegas</td><td>2019-08-02</td></tr>
<tr class="item"><td><a href="random" title="random">random</a></td><td>collection of un-sorted bollocks</td><td>acidvegas</td><td>2019-08-01</td></tr>
<tr class="item"><td><a href="random" title="random">random</a></td><td>irc services bot</td><td>acidvegas</td><td>2019-06-27</td></tr>
<tr class="item"><td><a href="resources" title="resources">resources</a></td><td>everything you need to know about irc art</td><td>acidvegas</td><td>2020-03-31</td></tr>
<tr class="item"><td><a href="scroll" title="scroll">scroll</a></td><td>irc bot to play ascii art</td><td>acidvegas</td><td>2020-03-23</td></tr>
<tr class="item"><td><a href="skeleton" title="skeleton">skeleton</a></td><td>bot skeleton for the internet relay chat (irc) protocol</td><td>acidvegas</td><td>2019-06-28</td></tr>
<tr class="item"><td><a href="spaggiari" title="spaggiari">spaggiari</a></td><td>irc bot to scan & bruteforce ssh/telnet</td><td>acidvegas</td><td>2019-06-28</td></tr>
<tr class="item"><td><a href="stagit" title="stagit">stagit</a></td><td>static git page generator</td><td>acidvegas</td><td>2020-05-03</td></tr>
<tr class="item"><td><a href="supernets.github.io" title="supernets.github.io">supernets.github.io</a></td><td>https://supernets.org/</td><td>acidvegas</td><td>2019-08-05</td></tr>
<tr class="item"><td><a href="tools" title="tools">tools</a></td><td>collection of tools for supernets sysadmins</td><td>acidvegas</td><td>2020-03-21</td></tr>
<tr class="item"><td><a href="trollbots" title="trollbots">trollbots</a></td><td>collection of annoying scripts for the internet relay chat (irc) protocol</td><td>acidvegas</td><td>2020-04-02</td></tr>
<tr class="item"><td><a href="unrealircd" title="unrealircd">unrealircd</a></td><td>supernets unrealircd source & configuration</td><td>acidvegas</td><td>2020-04-21</td></tr>
<tr class="item"><td><a href="weechat" title="weechat">weechat</a></td><td>backup of my weechat setup</td><td>acidvegas</td><td>2020-04-25</td></tr>
<title>acidvegas</title>
<center>
<br><img src="i/acidvegas.png">
<br><img src="i/mostdangerous.png">
<br><a href="hardcore.wav"><img src="i/crowdkill.gif"></a>
<table>
<tr>
<td><a href="blog.acid.vegas"><img src="i/blog.png"></a></td>
<td><img src="i/x.png"></td>
<td><a href="mailto:acid.vegas@acid.vegas"><img src="i/mail.png"></a></td>
<td><img src="i/x.png"></td>
<td><a href="music.acid.vegas"><img src="i/musick.png"></a></td>
<td><img src="i/x.png"></td>
<td><a href="acidvegas.gpg"><img src="i/gpg.png"></a></td>
<td><img src="i/x.png"></td>
<td><a href="git.acid.vegas"><img src="i/git.png"></a></td>
</tr>
</table>
<div id="footer">site generated by <a href="https://github.com/acidvegas/stagit" target="_blank">stagit</a> on <a href="#">05/03/20</a></div>
</center>
<audio autoplay loop hidden><source src="hardcore.wav"></audio>

View File

@ -1,253 +0,0 @@
<!doctype html>
<link rel="stylesheet" href="../../style.css">
<title>irc2html :: 3748504</title>
<h1><a href="../index.html" title="Back to Repository">&larr;&#xFE0E;</a> irc2html :: 3748504</h1>
<hr>
<table id="main" cellpadding="0" cellspacing="0">
<tr class="item"><td class="linenumber"><a href="#l1" name="l1">1</a></td><td><pre><span class="commit">commit 3748504e1f449eb6bada4290fe579f38f89f0f94</span><span class="commit"> (</span><span class="reference">HEAD -&gt; </span><span class="branch">master</span><span class="commit">)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l2" name="l2">2</a></td><td><pre>Author: acidvegas &lt;acid.vegas@acid.vegas&gt;</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l3" name="l3">3</a></td><td><pre>Date: Mon Jun 24 22:47:59 2019 -0400</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l4" name="l4">4</a></td><td><pre></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l5" name="l5">5</a></td><td><pre> Initial commit</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l6" name="l6">6</a></td><td><pre>---</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l7" name="l7">7</a></td><td><pre> data/script.js | 116 <span class="insertion">+++++++++++++++++++++++++++++++++++++++++++++++++++++++++</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l8" name="l8">8</a></td><td><pre> data/style.css | 50 <span class="insertion">+++++++++++++++++++++++++</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l9" name="l9">9</a></td><td><pre> index.html | 50 <span class="insertion">+++++++++++++++++++++++++</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l10" name="l10">10</a></td><td><pre> 3 files changed, 216 insertions(+)</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l11" name="l11">11</a></td><td><pre></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l12" name="l12">12</a></td><td><pre><span class="bold">diff --git a/data/script.js b/data/script.js</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l13" name="l13">13</a></td><td><pre><span class="bold">new file mode 100644</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l14" name="l14">14</a></td><td><pre><span class="bold">index 0000000..7858d13</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l15" name="l15">15</a></td><td><pre><span class="bold">--- /dev/null</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l16" name="l16">16</a></td><td><pre><span class="bold">+++ b/data/script.js</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l17" name="l17">17</a></td><td><pre><span class="hunk">@@ -0,0 +1,116 @@</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l18" name="l18">18</a></td><td><pre><span class="insertion">+</span><span class="insertion">function formReset() {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l19" name="l19">19</a></td><td><pre><span class="insertion">+</span> <span class="insertion">document.getElementById('showcase').innerHTML = &quot;&lt;span class=\&quot;placeholder\&quot;&gt;*HTML view will appear here*&lt;/span&gt;&quot;;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l20" name="l20">20</a></td><td><pre><span class="insertion">+</span><span class="insertion">}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l21" name="l21">21</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l22" name="l22">22</a></td><td><pre><span class="insertion">+</span><span class="insertion">function toggle(bool) {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l23" name="l23">23</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if (bool == true) {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l24" name="l24">24</a></td><td><pre><span class="insertion">+</span> <span class="insertion">return false;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l25" name="l25">25</a></td><td><pre><span class="insertion">+</span> <span class="insertion">}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l26" name="l26">26</a></td><td><pre><span class="insertion">+</span> <span class="insertion">else {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l27" name="l27">27</a></td><td><pre><span class="insertion">+</span> <span class="insertion">return true;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l28" name="l28">28</a></td><td><pre><span class="insertion">+</span> <span class="insertion">}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l29" name="l29">29</a></td><td><pre><span class="insertion">+</span><span class="insertion">}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l30" name="l30">30</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l31" name="l31">31</a></td><td><pre><span class="insertion">+</span><span class="insertion">function convert() {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l32" name="l32">32</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if (document.getElementById('text').value == &quot;&quot;) {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l33" name="l33">33</a></td><td><pre><span class="insertion">+</span> <span class="insertion">return false;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l34" name="l34">34</a></td><td><pre><span class="insertion">+</span> <span class="insertion">}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l35" name="l35">35</a></td><td><pre><span class="insertion">+</span> <span class="insertion">document.getElementById('html').value = null;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l36" name="l36">36</a></td><td><pre><span class="insertion">+</span> <span class="insertion">document.getElementById('showcase').innerHTML = null;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l37" name="l37">37</a></td><td><pre><span class="insertion">+</span> <span class="insertion">lines = document.getElementById('text').value.split(&quot;\n&quot;);</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l38" name="l38">38</a></td><td><pre><span class="insertion">+</span> <span class="insertion">reg = new RegExp(&quot;(([0-9]{1,2})?((?:,([0-9]{1,2}))?))|(||||)&quot;);</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l39" name="l39">39</a></td><td><pre><span class="insertion">+</span> <span class="insertion">var showcase = &quot;&quot;;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l40" name="l40">40</a></td><td><pre><span class="insertion">+</span> <span class="insertion">for (var i = 0, all=lines.length; i &lt; all; i++) {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l41" name="l41">41</a></td><td><pre><span class="insertion">+</span> <span class="insertion">var line = lines[i];</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l42" name="l42">42</a></td><td><pre><span class="insertion">+</span> <span class="insertion">line = line.replace(new RegExp('&lt;','g'),'&amp;lt;');</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l43" name="l43">43</a></td><td><pre><span class="insertion">+</span> <span class="insertion">line = line.replace(new RegExp('&gt;','g'),'&amp;gt;');</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l44" name="l44">44</a></td><td><pre><span class="insertion">+</span> <span class="insertion">var match, lastf = &quot;1&quot;, lastb = &quot;0&quot;;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l45" name="l45">45</a></td><td><pre><span class="insertion">+</span> <span class="insertion">var bold, italic, underline, reverse = false;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l46" name="l46">46</a></td><td><pre><span class="insertion">+</span> <span class="insertion">var first = true;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l47" name="l47">47</a></td><td><pre><span class="insertion">+</span> <span class="insertion">while ((match = reg.exec(line)) != null) {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l48" name="l48">48</a></td><td><pre><span class="insertion">+</span> <span class="insertion">var f, b, span;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l49" name="l49">49</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if (match[2] != null) {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l50" name="l50">50</a></td><td><pre><span class="insertion">+</span> <span class="insertion">f = Number(match[2])</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l51" name="l51">51</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if (f &gt; 15) { f = f-16; }</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l52" name="l52">52</a></td><td><pre><span class="insertion">+</span> <span class="insertion">f = f.toString();</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l53" name="l53">53</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if (match[4] != null) {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l54" name="l54">54</a></td><td><pre><span class="insertion">+</span> <span class="insertion">b = Number(match[4])</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l55" name="l55">55</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if (b &gt; 15) { b = b-16; }</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l56" name="l56">56</a></td><td><pre><span class="insertion">+</span> <span class="insertion">b = b.toString();</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l57" name="l57">57</a></td><td><pre><span class="insertion">+</span> <span class="insertion">}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l58" name="l58">58</a></td><td><pre><span class="insertion">+</span> <span class="insertion">else {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l59" name="l59">59</a></td><td><pre><span class="insertion">+</span> <span class="insertion">b = lastb;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l60" name="l60">60</a></td><td><pre><span class="insertion">+</span> <span class="insertion">}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l61" name="l61">61</a></td><td><pre><span class="insertion">+</span> <span class="insertion">}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l62" name="l62">62</a></td><td><pre><span class="insertion">+</span> <span class="insertion">else if (match[2] == null &amp;&amp; (match[5] == null || match[5] == '')) {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l63" name="l63">63</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if (match[5] == null) {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l64" name="l64">64</a></td><td><pre><span class="insertion">+</span> <span class="insertion">f = &quot;1&quot;; b = &quot;0&quot;;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l65" name="l65">65</a></td><td><pre><span class="insertion">+</span> <span class="insertion">}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l66" name="l66">66</a></td><td><pre><span class="insertion">+</span> <span class="insertion">else {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l67" name="l67">67</a></td><td><pre><span class="insertion">+</span> <span class="insertion">f = &quot;1&quot;; b = &quot;0&quot;;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l68" name="l68">68</a></td><td><pre><span class="insertion">+</span> <span class="insertion">bold = false;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l69" name="l69">69</a></td><td><pre><span class="insertion">+</span> <span class="insertion">italic = false;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l70" name="l70">70</a></td><td><pre><span class="insertion">+</span> <span class="insertion">underline = false;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l71" name="l71">71</a></td><td><pre><span class="insertion">+</span> <span class="insertion">reverse = false;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l72" name="l72">72</a></td><td><pre><span class="insertion">+</span> <span class="insertion">}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l73" name="l73">73</a></td><td><pre><span class="insertion">+</span> <span class="insertion">}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l74" name="l74">74</a></td><td><pre><span class="insertion">+</span> <span class="insertion">else {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l75" name="l75">75</a></td><td><pre><span class="insertion">+</span> <span class="insertion">f = lastf, b = lastb;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l76" name="l76">76</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if (match[5] == '') {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l77" name="l77">77</a></td><td><pre><span class="insertion">+</span> <span class="insertion">bold = toggle(bold);</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l78" name="l78">78</a></td><td><pre><span class="insertion">+</span> <span class="insertion">}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l79" name="l79">79</a></td><td><pre><span class="insertion">+</span> <span class="insertion">else if (match[5] == '') {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l80" name="l80">80</a></td><td><pre><span class="insertion">+</span> <span class="insertion">italic = toggle(italic);</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l81" name="l81">81</a></td><td><pre><span class="insertion">+</span> <span class="insertion">}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l82" name="l82">82</a></td><td><pre><span class="insertion">+</span> <span class="insertion">else if (match[5] == '') {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l83" name="l83">83</a></td><td><pre><span class="insertion">+</span> <span class="insertion">underline = toggle(underline);</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l84" name="l84">84</a></td><td><pre><span class="insertion">+</span> <span class="insertion">}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l85" name="l85">85</a></td><td><pre><span class="insertion">+</span> <span class="insertion">else if (match[5] == '') {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l86" name="l86">86</a></td><td><pre><span class="insertion">+</span> <span class="insertion">reverse = toggle(reverse);</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l87" name="l87">87</a></td><td><pre><span class="insertion">+</span> <span class="insertion">}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l88" name="l88">88</a></td><td><pre><span class="insertion">+</span> <span class="insertion">}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l89" name="l89">89</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if (reverse == false) {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l90" name="l90">90</a></td><td><pre><span class="insertion">+</span> <span class="insertion">span = 'f'+f+' b'+b;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l91" name="l91">91</a></td><td><pre><span class="insertion">+</span> <span class="insertion">}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l92" name="l92">92</a></td><td><pre><span class="insertion">+</span> <span class="insertion">else {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l93" name="l93">93</a></td><td><pre><span class="insertion">+</span> <span class="insertion">span = 'f'+b+' b'+f;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l94" name="l94">94</a></td><td><pre><span class="insertion">+</span> <span class="insertion">}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l95" name="l95">95</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if (bold == true) { span += ' _b'; }</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l96" name="l96">96</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if (italic == true) { span += ' _i'; }</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l97" name="l97">97</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if (underline == true) { span += ' _u'; }</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l98" name="l98">98</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if (first == false) {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l99" name="l99">99</a></td><td><pre><span class="insertion">+</span> <span class="insertion">line = line.replace(match[0],'&lt;/span&gt;&lt;span class=&quot;'+span+'&quot;&gt;');</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l100" name="l100">100</a></td><td><pre><span class="insertion">+</span> <span class="insertion">}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l101" name="l101">101</a></td><td><pre><span class="insertion">+</span> <span class="insertion">else {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l102" name="l102">102</a></td><td><pre><span class="insertion">+</span> <span class="insertion">line = line.replace(match[0],'&lt;span class=&quot;'+span+'&quot;&gt;');</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l103" name="l103">103</a></td><td><pre><span class="insertion">+</span> <span class="insertion">first = false;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l104" name="l104">104</a></td><td><pre><span class="insertion">+</span> <span class="insertion">}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l105" name="l105">105</a></td><td><pre><span class="insertion">+</span> <span class="insertion">lastf = f; lastb = b;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l106" name="l106">106</a></td><td><pre><span class="insertion">+</span> <span class="insertion">}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l107" name="l107">107</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if (first == false) {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l108" name="l108">108</a></td><td><pre><span class="insertion">+</span> <span class="insertion">showcase += (line+&quot;&lt;/span&gt;\n&quot;);</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l109" name="l109">109</a></td><td><pre><span class="insertion">+</span> <span class="insertion">}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l110" name="l110">110</a></td><td><pre><span class="insertion">+</span> <span class="insertion">else {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l111" name="l111">111</a></td><td><pre><span class="insertion">+</span> <span class="insertion">showcase += (line+&quot;\n&quot;);</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l112" name="l112">112</a></td><td><pre><span class="insertion">+</span> <span class="insertion">}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l113" name="l113">113</a></td><td><pre><span class="insertion">+</span> <span class="insertion">}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l114" name="l114">114</a></td><td><pre><span class="insertion">+</span> <span class="insertion">showcase = showcase.replace(new RegExp(&quot;\&lt;span class=\&quot;(?:[a-zA-Z0-9_ ]+\&quot;)&gt;\&lt;\/span&gt;&quot;,&quot;g&quot;),&quot;&quot;);</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l115" name="l115">115</a></td><td><pre><span class="insertion">+</span> <span class="insertion">document.getElementById('showcase').innerHTML = (&quot;&lt;pre&gt;\n&quot;+showcase+&quot;&lt;/pre&gt;&quot;);</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l116" name="l116">116</a></td><td><pre><span class="insertion">+</span> <span class="insertion">document.getElementById('html').value = &quot;&lt;!DOCTYPE html&gt;\n&lt;html lang=\&quot;en\&quot;&gt;\n&lt;head&gt;\n&lt;meta charset=\&quot;UTF-8\&quot;&gt;\n&lt;title&gt;IRC2HTML - https://git.supernets.org/acidvegas/irc2html&lt;/title&gt;\n&lt;style type=\&quot;text/css\&quot;&gt;\n.f0 { color: #ffffff; }\n.b0 { background-color: #ffffff; }\n.f1 { color: #000000; }\n.b1 { background-color: #000000; }\n.f2 { color: #00007f; }\n.b2 { background-color: #00007f; }\n.f3 { color: #009300; }\n.b3 { background-color: #009300; }\n.f4 { color: #ff0000; }\n.b4 { background-color: #ff0000; }\n.f5 { color: #7f0000; }\n.b5 { background-color: #7f0000; }\n.f6 { color: #9c009c; }\n.b6 { background-color: #9c009c; }\n.f7 { color: #fc7f00; }\n.b7 { background-color: #fc7f00; }\n.f8 { color: #ffff00; }\n.b8 { background-color: #ffff00; }\n.f9 { color: #00fc00; }\n.b9 { background-color: #00fc00; }\n.f10 { color: #009393; }\n.b10 { background-color: #009393; }\n.f11 { color: #00ffff; }\n.b11 { background-color: #00ffff; }\n.f12 { color: #0000fc; }\n.b12 { background-color: #0000fc; }\n.f13 { color: #ff00ff; }\n.b13 { background-color: #ff00ff; }\n.f14 { color: #7f7f7f; }\n.b14 { background-color: #7f7f7f; }\n.f15 { color: #d2d2d2; }\n.b15 { background-color: #d2d2d2; }\n._b { font-weight: bold; }\n._i { font-style: italic; }\n._u { text-decoration: underline; }\npre { margin: 0; font-family: Consolas, Menlo, Monaco, Lucida Console, Liberation Mono, DejaVu Sans Mono, Bitstream Vera Sans Mono, monospace, serif; font-size: 0.9em; }\n&lt;/style&gt;\n&lt;/head&gt;\n&lt;body&gt;\n&quot;;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l117" name="l117">117</a></td><td><pre><span class="insertion">+</span> <span class="insertion">document.getElementById('html').value += document.getElementById('showcase').innerHTML;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l118" name="l118">118</a></td><td><pre><span class="insertion">+</span> <span class="insertion">document.getElementById('html').value += &quot;\n&lt;/body&gt;\n&lt;/html&gt;&quot;;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l119" name="l119">119</a></td><td><pre><span class="insertion">+</span> <span class="insertion">return false;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l120" name="l120">120</a></td><td><pre><span class="insertion">+</span><span class="insertion">}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l121" name="l121">121</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l122" name="l122">122</a></td><td><pre><span class="insertion">+</span><span class="insertion">function Submit() {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l123" name="l123">123</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if (document.getElementById('text').value != &quot;&quot; &amp;&amp; document.getElementById('text').value != null) {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l124" name="l124">124</a></td><td><pre><span class="insertion">+</span> <span class="insertion">return true;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l125" name="l125">125</a></td><td><pre><span class="insertion">+</span> <span class="insertion">}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l126" name="l126">126</a></td><td><pre><span class="insertion">+</span> <span class="insertion">return false;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l127" name="l127">127</a></td><td><pre><span class="insertion">+</span><span class="insertion">}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l128" name="l128">128</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l129" name="l129">129</a></td><td><pre><span class="insertion">+</span><span class="insertion">function Download() {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l130" name="l130">130</a></td><td><pre><span class="insertion">+</span> <span class="insertion">document.location='data:text/html,'+encodeURIComponent(document.getElementById('html').value);</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l131" name="l131">131</a></td><td><pre><span class="insertion">+</span><span class="insertion">}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l132" name="l132">132</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l133" name="l133">133</a></td><td><pre><span class="insertion">+</span><span class="insertion">window.onload = convert;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l134" name="l134">134</a></td><td><pre><span class="bold">diff --git a/data/style.css b/data/style.css</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l135" name="l135">135</a></td><td><pre><span class="bold">new file mode 100644</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l136" name="l136">136</a></td><td><pre><span class="bold">index 0000000..bd62933</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l137" name="l137">137</a></td><td><pre><span class="bold">--- /dev/null</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l138" name="l138">138</a></td><td><pre><span class="bold">+++ b/data/style.css</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l139" name="l139">139</a></td><td><pre><span class="hunk">@@ -0,0 +1,50 @@</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l140" name="l140">140</a></td><td><pre><span class="insertion">+</span><span class="insertion">@charset &quot;utf-8&quot;;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l141" name="l141">141</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l142" name="l142">142</a></td><td><pre><span class="insertion">+</span><span class="insertion">._b{font-weight:bold;}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l143" name="l143">143</a></td><td><pre><span class="insertion">+</span><span class="insertion">._i{font-style:italic;}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l144" name="l144">144</a></td><td><pre><span class="insertion">+</span><span class="insertion">._u{text-decoration:underline;}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l145" name="l145">145</a></td><td><pre><span class="insertion">+</span><span class="insertion">.f0{color:#ffffff;}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l146" name="l146">146</a></td><td><pre><span class="insertion">+</span><span class="insertion">.f1{color:#000000;}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l147" name="l147">147</a></td><td><pre><span class="insertion">+</span><span class="insertion">.f2{color:#00007f;}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l148" name="l148">148</a></td><td><pre><span class="insertion">+</span><span class="insertion">.f3{color:#009300;}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l149" name="l149">149</a></td><td><pre><span class="insertion">+</span><span class="insertion">.f4{color:#ff0000;}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l150" name="l150">150</a></td><td><pre><span class="insertion">+</span><span class="insertion">.f5{color:#7f0000;}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l151" name="l151">151</a></td><td><pre><span class="insertion">+</span><span class="insertion">.f6{color:#9c009c;}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l152" name="l152">152</a></td><td><pre><span class="insertion">+</span><span class="insertion">.f7{color:#fc7f00;}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l153" name="l153">153</a></td><td><pre><span class="insertion">+</span><span class="insertion">.f8{color:#ffff00;}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l154" name="l154">154</a></td><td><pre><span class="insertion">+</span><span class="insertion">.f9{color:#00fc00;}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l155" name="l155">155</a></td><td><pre><span class="insertion">+</span><span class="insertion">.f10{color:#009393;}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l156" name="l156">156</a></td><td><pre><span class="insertion">+</span><span class="insertion">.f11{color:#00ffff;}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l157" name="l157">157</a></td><td><pre><span class="insertion">+</span><span class="insertion">.f12{color:#0000fc;}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l158" name="l158">158</a></td><td><pre><span class="insertion">+</span><span class="insertion">.f13{color:#ff00ff;}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l159" name="l159">159</a></td><td><pre><span class="insertion">+</span><span class="insertion">.f14{color:#7f7f7f;}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l160" name="l160">160</a></td><td><pre><span class="insertion">+</span><span class="insertion">.f15{color:#d2d2d2;}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l161" name="l161">161</a></td><td><pre><span class="insertion">+</span><span class="insertion">.b0{background-color:#ffffff;}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l162" name="l162">162</a></td><td><pre><span class="insertion">+</span><span class="insertion">.b1{background-color:#000000;}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l163" name="l163">163</a></td><td><pre><span class="insertion">+</span><span class="insertion">.b2{background-color:#00007f;}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l164" name="l164">164</a></td><td><pre><span class="insertion">+</span><span class="insertion">.b3{background-color:#009300;}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l165" name="l165">165</a></td><td><pre><span class="insertion">+</span><span class="insertion">.b4{background-color:#ff0000;}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l166" name="l166">166</a></td><td><pre><span class="insertion">+</span><span class="insertion">.b5{background-color:#7f0000;}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l167" name="l167">167</a></td><td><pre><span class="insertion">+</span><span class="insertion">.b6{background-color:#9c009c;}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l168" name="l168">168</a></td><td><pre><span class="insertion">+</span><span class="insertion">.b7{background-color:#fc7f00;}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l169" name="l169">169</a></td><td><pre><span class="insertion">+</span><span class="insertion">.b8{background-color:#ffff00;}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l170" name="l170">170</a></td><td><pre><span class="insertion">+</span><span class="insertion">.b9{background-color:#00fc00;}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l171" name="l171">171</a></td><td><pre><span class="insertion">+</span><span class="insertion">.b10{background-color:#009393;}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l172" name="l172">172</a></td><td><pre><span class="insertion">+</span><span class="insertion">.b11{background-color:#00ffff;}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l173" name="l173">173</a></td><td><pre><span class="insertion">+</span><span class="insertion">.b12{background-color:#0000fc;}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l174" name="l174">174</a></td><td><pre><span class="insertion">+</span><span class="insertion">.b13{background-color:#ff00ff;}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l175" name="l175">175</a></td><td><pre><span class="insertion">+</span><span class="insertion">.b14{background-color:#7f7f7f;}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l176" name="l176">176</a></td><td><pre><span class="insertion">+</span><span class="insertion">.b15{background-color:#d2d2d2;}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l177" name="l177">177</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l178" name="l178">178</a></td><td><pre><span class="insertion">+</span><span class="insertion">html, body, p{font-family:segoe ui, trebuchet MS,Lucida Sans Unicode, Lucida Sans, Sans-Serif;}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l179" name="l179">179</a></td><td><pre><span class="insertion">+</span><span class="insertion">h1{font-size:1.5em;text-align:center;}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l180" name="l180">180</a></td><td><pre><span class="insertion">+</span><span class="insertion">h2{font-size:1em;font-weight:700;}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l181" name="l181">181</a></td><td><pre><span class="insertion">+</span><span class="insertion">h6{font-size:1em;text-align:center;}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l182" name="l182">182</a></td><td><pre><span class="insertion">+</span><span class="insertion">pre{font-family:Consolas, Menlo, Monaco, Lucida Console, Liberation Mono, DejaVu Sans Mono, Bitstream Vera Sans Mono, monospace, serif;margin:0;}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l183" name="l183">183</a></td><td><pre><span class="insertion">+</span><span class="insertion">textarea{background-color:#F8F8F8;border:solid 1px #ddd;display:block;font-family:Consolas, Menlo, Monaco, Lucida Console, Liberation Mono, DejaVu Sans Mono, Bitstream Vera Sans Mono, monospace, serif;font-size:0.9em;height:36em;padding:1%;resize:none;width:97%;}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l184" name="l184">184</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l185" name="l185">185</a></td><td><pre><span class="insertion">+</span><span class="insertion">.butt{width:150px;}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l186" name="l186">186</a></td><td><pre><span class="insertion">+</span><span class="insertion">.container{margin:0;width:100%;}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l187" name="l187">187</a></td><td><pre><span class="insertion">+</span><span class="insertion">.hidden{display:none;}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l188" name="l188">188</a></td><td><pre><span class="insertion">+</span><span class="insertion">.placeholder{color:gray;}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l189" name="l189">189</a></td><td><pre><span class="insertion">+</span><span class="insertion">.showcase{border:solid 1px #ddd;display:block;font-size:0.9em;padding:1%;}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l190" name="l190">190</a></td><td><pre><span class="bold">diff --git a/index.html b/index.html</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l191" name="l191">191</a></td><td><pre><span class="bold">new file mode 100644</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l192" name="l192">192</a></td><td><pre><span class="bold">index 0000000..cbd6e3c</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l193" name="l193">193</a></td><td><pre><span class="bold">--- /dev/null</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l194" name="l194">194</a></td><td><pre><span class="bold">+++ b/index.html</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l195" name="l195">195</a></td><td><pre><span class="hunk">@@ -0,0 +1,50 @@</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l196" name="l196">196</a></td><td><pre><span class="insertion">+</span><span class="insertion">&lt;!DOCTYPE html&gt;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l197" name="l197">197</a></td><td><pre><span class="insertion">+</span><span class="insertion">&lt;html lang=&quot;en&quot;&gt;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l198" name="l198">198</a></td><td><pre><span class="insertion">+</span> <span class="insertion">&lt;head&gt;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l199" name="l199">199</a></td><td><pre><span class="insertion">+</span> <span class="insertion">&lt;title&gt;IRC2HTML&lt;/title&gt;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l200" name="l200">200</a></td><td><pre><span class="insertion">+</span> <span class="insertion">&lt;meta charset=&quot;UTF-8&quot;&gt;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l201" name="l201">201</a></td><td><pre><span class="insertion">+</span> <span class="insertion">&lt;link rel=&quot;stylesheet&quot; href=&quot;data/style.css&quot; type=&quot;text/css&quot;&gt;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l202" name="l202">202</a></td><td><pre><span class="insertion">+</span> <span class="insertion">&lt;script type=&quot;text/javascript&quot; src=&quot;data/script.js&quot;&gt;&lt;/script&gt;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l203" name="l203">203</a></td><td><pre><span class="insertion">+</span> <span class="insertion">&lt;/head&gt;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l204" name="l204">204</a></td><td><pre><span class="insertion">+</span> <span class="insertion">&lt;body&gt;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l205" name="l205">205</a></td><td><pre><span class="insertion">+</span> <span class="insertion">&lt;div id=&quot;script&quot; class=&quot;hidden&quot;&gt;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l206" name="l206">206</a></td><td><pre><span class="insertion">+</span> <span class="insertion">&lt;form id=&quot;form&quot; accept-charset=&quot;UTF-8&quot;&gt;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l207" name="l207">207</a></td><td><pre><span class="insertion">+</span> <span class="insertion">&lt;table width=&quot;100%&quot;&gt;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l208" name="l208">208</a></td><td><pre><span class="insertion">+</span> <span class="insertion">&lt;tr&gt;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l209" name="l209">209</a></td><td><pre><span class="insertion">+</span> <span class="insertion">&lt;td rowspan=&quot;3&quot; width=&quot;45%&quot;&gt;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l210" name="l210">210</a></td><td><pre><span class="insertion">+</span> <span class="insertion">&lt;textarea width=&quot;100%&quot; id=&quot;text&quot; name=&quot;text&quot; placeholder=&quot;*Enter ASCII here*&quot;&gt;&lt;/textarea&gt;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l211" name="l211">211</a></td><td><pre><span class="insertion">+</span> <span class="insertion">&lt;/td&gt;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l212" name="l212">212</a></td><td><pre><span class="insertion">+</span> <span class="insertion">&lt;td align=&quot;center&quot; height=&quot;33%&quot; valign=&quot;top&quot;&gt;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l213" name="l213">213</a></td><td><pre><span class="insertion">+</span> <span class="insertion">&lt;b&gt;IRC2HTML&lt;/b&gt;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l214" name="l214">214</a></td><td><pre><span class="insertion">+</span> <span class="insertion">&lt;br&gt;&lt;small&gt;&lt;i&gt;(&lt;a href=&quot;https://acid.vegas/irc2html&quot;&gt;source&lt;/a&gt;)&lt;/i&gt;&lt;/small&gt;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l215" name="l215">215</a></td><td><pre><span class="insertion">+</span> <span class="insertion">&lt;/td&gt;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l216" name="l216">216</a></td><td><pre><span class="insertion">+</span> <span class="insertion">&lt;td rowspan=&quot;3&quot; width=&quot;45%&quot;&gt;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l217" name="l217">217</a></td><td><pre><span class="insertion">+</span> <span class="insertion">&lt;textarea width=&quot;100%&quot; id=&quot;html&quot; name=&quot;html&quot; placeholder=&quot;*HTML code will appear here*&quot; readonly&gt;&lt;/textarea&gt;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l218" name="l218">218</a></td><td><pre><span class="insertion">+</span> <span class="insertion">&lt;/td&gt;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l219" name="l219">219</a></td><td><pre><span class="insertion">+</span> <span class="insertion">&lt;/tr&gt;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l220" name="l220">220</a></td><td><pre><span class="insertion">+</span> <span class="insertion">&lt;tr&gt;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l221" name="l221">221</a></td><td><pre><span class="insertion">+</span> <span class="insertion">&lt;td height=&quot;33%&quot; width=&quot;10%&quot;&gt;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l222" name="l222">222</a></td><td><pre><span class="insertion">+</span> <span class="insertion">&lt;input class=&quot;butt&quot; type=&quot;submit&quot; name=&quot;submit&quot; value=&quot;Convert&quot; onclick=&quot;return convert();&quot;/&gt;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l223" name="l223">223</a></td><td><pre><span class="insertion">+</span> <span class="insertion">&lt;br&gt;&lt;br&gt;&lt;input class=&quot;butt&quot; type=&quot;reset&quot; name=&quot;reset&quot; value=&quot;Reset&quot; onclick=&quot;formReset();&quot;/&gt;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l224" name="l224">224</a></td><td><pre><span class="insertion">+</span> <span class="insertion">&lt;br&gt;&lt;br&gt;&lt;input class=&quot;butt&quot; type=&quot;button&quot; name=&quot;download&quot; value=&quot;Download&quot; onclick=&quot;Download();&quot;/&gt;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l225" name="l225">225</a></td><td><pre><span class="insertion">+</span> <span class="insertion">&lt;/td&gt;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l226" name="l226">226</a></td><td><pre><span class="insertion">+</span> <span class="insertion">&lt;/tr&gt;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l227" name="l227">227</a></td><td><pre><span class="insertion">+</span> <span class="insertion">&lt;tr&gt;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l228" name="l228">228</a></td><td><pre><span class="insertion">+</span> <span class="insertion">&lt;td align=&quot;center&quot; height=&quot;33%&quot; valign=&quot;bottom&quot;&gt;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l229" name="l229">229</a></td><td><pre><span class="insertion">+</span> <span class="insertion">&lt;b&gt;View&lt;/b&gt;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l230" name="l230">230</a></td><td><pre><span class="insertion">+</span> <span class="insertion">&lt;/td&gt;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l231" name="l231">231</a></td><td><pre><span class="insertion">+</span> <span class="insertion">&lt;/tr&gt;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l232" name="l232">232</a></td><td><pre><span class="insertion">+</span> <span class="insertion">&lt;/table&gt;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l233" name="l233">233</a></td><td><pre><span class="insertion">+</span> <span class="insertion">&lt;/form&gt;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l234" name="l234">234</a></td><td><pre><span class="insertion">+</span> <span class="insertion">&lt;div id=&quot;showcase&quot; class=&quot;showcase&quot;&gt;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l235" name="l235">235</a></td><td><pre><span class="insertion">+</span> <span class="insertion">&lt;span class=&quot;placeholder&quot;&gt;*HTML view will appear here*&lt;/span&gt;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l236" name="l236">236</a></td><td><pre><span class="insertion">+</span> <span class="insertion">&lt;/div&gt;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l237" name="l237">237</a></td><td><pre><span class="insertion">+</span> <span class="insertion">&lt;/div&gt;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l238" name="l238">238</a></td><td><pre><span class="insertion">+</span> <span class="insertion">&lt;script type=&quot;text/javascript&quot;&gt;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l239" name="l239">239</a></td><td><pre><span class="insertion">+</span> <span class="insertion">document.getElementById(&quot;script&quot;).style.display = &quot;block&quot;;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l240" name="l240">240</a></td><td><pre><span class="insertion">+</span> <span class="insertion">&lt;/script&gt;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l241" name="l241">241</a></td><td><pre><span class="insertion">+</span> <span class="insertion">&lt;noscript&gt;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l242" name="l242">242</a></td><td><pre><span class="insertion">+</span> <span class="insertion">Javascript is required to use this tool.</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l243" name="l243">243</a></td><td><pre><span class="insertion">+</span> <span class="insertion">&lt;/noscript&gt;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l244" name="l244">244</a></td><td><pre><span class="insertion">+</span> <span class="insertion">&lt;/body&gt;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l245" name="l245">245</a></td><td><pre><span class="insertion">+</span><span class="insertion">&lt;/html&gt;</span></pre></td></tr>
</table>
<div id="footer">site generated by <a href="https://github.com/acidvegas/stagit" target="_blank">stagit</a> on <a href="#">05/03/20</a></div>

View File

@ -1,14 +0,0 @@
<!doctype html>
<link rel="stylesheet" href="../style.css">
<title>irc2html</title>
<h1><a href="../index.html" title="Home">&#8962;&#xFE0E;</a> irc2html</h1>
<div style="padding-left:30px">
<h4>convert irc ascii art to html</h4>
<h5>git clone <a href="https://github.com/ircart/irc2html.git" title="irc2html clone URL">https://github.com/ircart/irc2html.git</a></h5>
</div>
<hr>
<table id="main" cellpadding="0" cellspacing="0">
<tr id="navigation"><th></th><th>Hash</th><th>Commit message</th><th>Author</th><th>Date</th><th align="right">Files</th><th align="right">+</th><th align="right">-</th></tr>
<tr class="item"><td></td><td><a href="commit/3748504.html" title="View this commit">3748504</a></td><td>Initial commit</td><td>acidvegas</td><td>2019-06-24 22:47</td><td align="right">3</td><td align="right">+216</td><td align="right">-0</td></tr>
</table>
<div id="footer">site generated by <a href="https://github.com/acidvegas/stagit" target="_blank">stagit</a> on <a href="#">05/03/20</a></div>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,33 +0,0 @@
<!doctype html>
<link rel="stylesheet" href="../../style.css">
<title>ircart :: 4d88628</title>
<h1><a href="../index.html" title="Back to Repository">&larr;&#xFE0E;</a> ircart :: 4d88628</h1>
<hr>
<table id="main" cellpadding="0" cellspacing="0">
<tr class="item"><td class="linenumber"><a href="#l1" name="l1">1</a></td><td><pre><span class="commit">commit 4d8862875a3418233aa59e5e4d0e2a27eac99168</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l2" name="l2">2</a></td><td><pre>Author: acidvegas &lt;acidvegas@users.noreply.github.com&gt;</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l3" name="l3">3</a></td><td><pre>Date: Sat Mar 31 17:23:40 2018 -0400</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l4" name="l4">4</a></td><td><pre></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l5" name="l5">5</a></td><td><pre> added banners</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l6" name="l6">6</a></td><td><pre>---</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l7" name="l7">7</a></td><td><pre> supernets/supernets_banner_crab.txt | 10 <span class="insertion">++++++++++</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l8" name="l8">8</a></td><td><pre> 1 file changed, 10 insertions(+)</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l9" name="l9">9</a></td><td><pre></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l10" name="l10">10</a></td><td><pre><span class="bold">diff --git a/supernets/supernets_banner_crab.txt b/supernets/supernets_banner_crab.txt</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l11" name="l11">11</a></td><td><pre><span class="bold">new file mode 100644</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l12" name="l12">12</a></td><td><pre><span class="bold">index 0000000..168d051</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l13" name="l13">13</a></td><td><pre><span class="bold">--- /dev/null</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l14" name="l14">14</a></td><td><pre><span class="bold">+++ b/supernets/supernets_banner_crab.txt</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l15" name="l15">15</a></td><td><pre><span class="hunk">@@ -0,0 +1,10 @@</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l16" name="l16">16</a></td><td><pre><span class="insertion">+</span><span class="insertion">5 , ,</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l17" name="l17">17</a></td><td><pre><span class="insertion">+</span><span class="insertion">5 /(_, ,_)\</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l18" name="l18">18</a></td><td><pre><span class="insertion">+</span><span class="insertion">5 \ _/ \_ / irc.supernets.org</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l19" name="l19">19</a></td><td><pre><span class="insertion">+</span><span class="insertion">5 // \\</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l20" name="l20">20</a></td><td><pre><span class="insertion">+</span><span class="insertion">5 \\ 15(7@15)(7@15)5 // #superbowl</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l21" name="l21">21</a></td><td><pre><span class="insertion">+</span><span class="insertion">5 \'=\&quot;==\&quot;='/</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l22" name="l22">22</a></td><td><pre><span class="insertion">+</span><span class="insertion">5 ,===/ \===,</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l23" name="l23">23</a></td><td><pre><span class="insertion">+</span><span class="insertion">5\&quot;,===\ /===,\&quot;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l24" name="l24">24</a></td><td><pre><span class="insertion">+</span><span class="insertion">5\&quot; ,==='------'===, \&quot; happy april floods day!</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l25" name="l25">25</a></td><td><pre><span class="insertion">+</span><span class="insertion">5 \&quot; \&quot;</span></pre></td></tr>
</table>
<div id="footer">site generated by <a href="https://github.com/acidvegas/stagit" target="_blank">stagit</a> on <a href="#">05/03/20</a></div>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,24 +0,0 @@
<!doctype html>
<link rel="stylesheet" href="../../style.css">
<title>ircart :: f935b28</title>
<h1><a href="../index.html" title="Back to Repository">&larr;&#xFE0E;</a> ircart :: f935b28</h1>
<hr>
<table id="main" cellpadding="0" cellspacing="0">
<tr class="item"><td class="linenumber"><a href="#l1" name="l1">1</a></td><td><pre><span class="commit">commit f935b285c5a28d93331d2ea1fe3f54bf5810a484</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l2" name="l2">2</a></td><td><pre>Author: acidvegas &lt;acidvegas@users.noreply.github.com&gt;</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l3" name="l3">3</a></td><td><pre>Date: Thu Mar 22 20:29:24 2018 -0400</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l4" name="l4">4</a></td><td><pre></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l5" name="l5">5</a></td><td><pre> added list.txt</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l6" name="l6">6</a></td><td><pre>---</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l7" name="l7">7</a></td><td><pre> list.txt | 1 <span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l8" name="l8">8</a></td><td><pre> 1 file changed, 1 insertion(+)</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l9" name="l9">9</a></td><td><pre></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l10" name="l10">10</a></td><td><pre><span class="bold">diff --git a/list.txt b/list.txt</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l11" name="l11">11</a></td><td><pre><span class="bold">new file mode 100644</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l12" name="l12">12</a></td><td><pre><span class="bold">index 0000000..fa745c2</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l13" name="l13">13</a></td><td><pre><span class="bold">--- /dev/null</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l14" name="l14">14</a></td><td><pre><span class="bold">+++ b/list.txt</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l15" name="l15">15</a></td><td><pre><span class="hunk">@@ -0,0 +1 @@</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l16" name="l16">16</a></td><td><pre><span class="insertion">+</span><span class="insertion">https://supernets.github.io/dl/ascii_list.txt</span></pre></td></tr>
</table>
<div id="footer">site generated by <a href="https://github.com/acidvegas/stagit" target="_blank">stagit</a> on <a href="#">05/03/20</a></div>

View File

@ -1,30 +0,0 @@
<!doctype html>
<link rel="stylesheet" href="../style.css">
<title>ircart</title>
<h1><a href="../index.html" title="Home">&#8962;&#xFE0E;</a> ircart</h1>
<div style="padding-left:30px">
<h4>massive collection of organized irc ascii art</h4>
<h5>git clone <a href="https://github.com/ircart/ircart.git" title="ircart clone URL">https://github.com/ircart/ircart.git</a></h5>
</div>
<hr>
<table id="main" cellpadding="0" cellspacing="0">
<tr id="navigation"><th></th><th>Hash</th><th>Commit message</th><th>Author</th><th>Date</th><th align="right">Files</th><th align="right">+</th><th align="right">-</th></tr>
<tr class="item"><td></td><td><a href="commit/45ea8e4.html" title="View this commit">45ea8e4</a></td><td>Cleaned up dupe files and same name asciis have been renamed.</td><td>acidvegas</td><td>2020-03-19 02:55</td><td align="right">780</td><td align="right">+807</td><td align="right">-34837</td></tr>
<tr class="item"><td></td><td><a href="commit/6e8767b.html" title="View this commit">6e8767b</a></td><td>Updated with mircart packs 21-40 (unsorted)</td><td>acidvegas</td><td>2019-06-28 06:28</td><td align="right">1173</td><td align="right">+56872</td><td align="right">-0</td></tr>
<tr class="item"><td></td><td><a href="commit/a696048.html" title="View this commit">a696048</a></td><td>Updated with mircart pack 20 and 21</td><td>acidvegas</td><td>2018-06-19 21:13</td><td align="right">60</td><td align="right">+2768</td><td align="right">-0</td></tr>
<tr class="item"><td></td><td><a href="commit/15db5ff.html" title="View this commit">15db5ff</a></td><td>Updated with mircart pack 19</td><td>acidvegas</td><td>2018-06-12 14:32</td><td align="right">28</td><td align="right">+1651</td><td align="right">-0</td></tr>
<tr class="item"><td></td><td><a href="commit/40fe34d.html" title="View this commit">40fe34d</a></td><td>Updated with mircart pack 18, spoke art, and more</td><td>acidvegas</td><td>2018-06-05 03:39</td><td align="right">85</td><td align="right">+3044</td><td align="right">-1</td></tr>
<tr class="item"><td></td><td><a href="commit/7f06a7b.html" title="View this commit">7f06a7b</a></td><td>Updated with mircart pack 16, OC from spoke, cleanup and more</td><td>acidvegas</td><td>2018-05-23 08:10</td><td align="right">73</td><td align="right">+2356</td><td align="right">-105</td></tr>
<tr class="item"><td></td><td><a href="commit/de870f5.html" title="View this commit">de870f5</a></td><td>Updated with mircart pack 15 and more cleanup</td><td>acidvegas</td><td>2018-05-09 23:17</td><td align="right">50</td><td align="right">+868</td><td align="right">-84</td></tr>
<tr class="item"><td></td><td><a href="commit/d652c36.html" title="View this commit">d652c36</a></td><td>Updated with mircart pack 14, more cleanup and organization, etc. pp4l</td><td>acidvegas</td><td>2018-04-26 18:20</td><td align="right">36</td><td align="right">+1606</td><td align="right">-78</td></tr>
<tr class="item"><td></td><td><a href="commit/f688ce4.html" title="View this commit">f688ce4</a></td><td>Updated with mircart pack 13 and more cleanup</td><td>acidvegas</td><td>2018-04-19 17:31</td><td align="right">42</td><td align="right">+918</td><td align="right">-200</td></tr>
<tr class="item"><td></td><td><a href="commit/9c396c9.html" title="View this commit">9c396c9</a></td><td>Updated with mircart pack 12 and more cleanup</td><td>acidvegas</td><td>2018-04-13 04:03</td><td align="right">47</td><td align="right">+3735</td><td align="right">-0</td></tr>
<tr class="item"><td></td><td><a href="commit/d5bc474.html" title="View this commit">d5bc474</a></td><td>Updated with mircart pack 11, cleaned up uncat, added new asciis, etc</td><td>acidvegas</td><td>2018-04-05 07:44</td><td align="right">51</td><td align="right">+1952</td><td align="right">-82</td></tr>
<tr class="item"><td></td><td><a href="commit/3f9aafb.html" title="View this commit">3f9aafb</a></td><td>Updated with new ascii / uncat cleanup</td><td>acidvegas</td><td>2018-04-03 10:05</td><td align="right">67</td><td align="right">+413</td><td align="right">-721701</td></tr>
<tr class="item"><td></td><td><a href="commit/4d88628.html" title="View this commit">4d88628</a></td><td>added banners</td><td>acidvegas</td><td>2018-03-31 17:23</td><td align="right">1</td><td align="right">+10</td><td align="right">-0</td></tr>
<tr class="item"><td></td><td><a href="commit/17071eb.html" title="View this commit">17071eb</a></td><td>Added some uncat asciis and more</td><td>acidvegas</td><td>2018-03-28 22:49</td><td align="right">360</td><td align="right">+746976</td><td align="right">-1213</td></tr>
<tr class="item"><td></td><td><a href="commit/f935b28.html" title="View this commit">f935b28</a></td><td>added list.txt</td><td>acidvegas</td><td>2018-03-22 20:29</td><td align="right">1</td><td align="right">+1</td><td align="right">-0</td></tr>
<tr class="item"><td></td><td><a href="commit/8cd2db5.html" title="View this commit">8cd2db5</a></td><td>Renamed all asciis with the same name and added more</td><td>acidvegas</td><td>2018-03-21 14:32</td><td align="right">133</td><td align="right">+398</td><td align="right">-2494</td></tr>
<tr class="item"><td></td><td><a href="commit/20b88a5.html" title="View this commit">20b88a5</a></td><td>Initial commit</td><td>acidvegas</td><td>2018-03-20 02:37</td><td align="right">3146</td><td align="right">+293318</td><td align="right">-0</td></tr>
</table>
<div id="footer">site generated by <a href="https://github.com/acidvegas/stagit" target="_blank">stagit</a> on <a href="#">05/03/20</a></div>

File diff suppressed because it is too large Load Diff

View File

@ -1,257 +0,0 @@
<!doctype html>
<link rel="stylesheet" href="../../style.css">
<title>irccex :: 55d5438</title>
<h1><a href="../index.html" title="Back to Repository">&larr;&#xFE0E;</a> irccex :: 55d5438</h1>
<hr>
<table id="main" cellpadding="0" cellspacing="0">
<tr class="item"><td class="linenumber"><a href="#l1" name="l1">1</a></td><td><pre><span class="commit">commit 55d54389c46a8fbf76666a48f558fbea185e21e7</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l2" name="l2">2</a></td><td><pre>Author: acidvegas &lt;acid.vegas@acid.vegas&gt;</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l3" name="l3">3</a></td><td><pre>Date: Sat Mar 21 03:14:11 2020 -0400</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l4" name="l4">4</a></td><td><pre></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l5" name="l5">5</a></td><td><pre> Added double fees loop, removed all 3rd party library requirements, cleaned up</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l6" name="l6">6</a></td><td><pre>---</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l7" name="l7">7</a></td><td><pre> README.md | 3 <span class="insertion">++</span><span class="deletion">-</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l8" name="l8">8</a></td><td><pre> irccex/core/{cmc.py =&gt; coinmarketcap.py} | 29 <span class="insertion">++++++++++</span><span class="deletion">----------</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l9" name="l9">9</a></td><td><pre> irccex/core/config.py | 1 <span class="deletion">-</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l10" name="l10">10</a></td><td><pre> irccex/core/irc.py | 45 <span class="insertion">+++++++++++++++++++++++</span><span class="deletion">---------</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l11" name="l11">11</a></td><td><pre> irccex/data/cert/.gitignore | 4 <span class="deletion">---</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l12" name="l12">12</a></td><td><pre> irccex/data/dbx.py | 12 <span class="deletion">---------</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l13" name="l13">13</a></td><td><pre> irccex/data/logs/.gitignore | 4 <span class="deletion">---</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l14" name="l14">14</a></td><td><pre> 7 files changed, 48 insertions(+), 50 deletions(-)</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l15" name="l15">15</a></td><td><pre></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l16" name="l16">16</a></td><td><pre><span class="bold">diff --git a/README.md b/README.md</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l17" name="l17">17</a></td><td><pre><span class="bold">index 49e4cc3..788783c 100644</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l18" name="l18">18</a></td><td><pre><span class="bold">--- a/README.md</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l19" name="l19">19</a></td><td><pre><span class="bold">+++ b/README.md</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l20" name="l20">20</a></td><td><pre><span class="hunk">@@ -83,15 +83,16 @@</span> </span>Support the project development if you like it: [Patreon.com/irccex](https://pat</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l21" name="l21">21</a></td><td><pre> The IRCCEX project is completely open source &amp; non-profit, though any support/pledges will help in motivation towards more development and adding new features!</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l22" name="l22">22</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l23" name="l23">23</a></td><td><pre> ###### Future Concepts &amp; Ideas</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l24" name="l24">24</a></td><td><pre><span class="insertion">+</span><span class="insertion">* Use multiple API keys to prevent rate limiting.</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l25" name="l25">25</a></td><td><pre> * IRCCEX BlockChain - Keep an on-going ledger of every single transaction ever made in the channel. *(No idea what use it would have. Maybe a `!trades` command for recent history. The idea makes me laugh)*</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l26" name="l26">26</a></td><td><pre> * Buying options - Spend a large sum of money on features like locking someone from trading for X amount of time (Charge Y per hour and max it to 24 hours), wallet spying, wallet bombing (sending a bunch of shitcoins), hindsight where you get private message alerts on a coins price changing (can be used whenever only once).</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l27" name="l27">27</a></td><td><pre><span class="deletion">-* Double fees for 1-3 days randomly in round!</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l28" name="l28">28</a></td><td><pre> * Post reward pool bangs will make you lose money to fuck with people spamming hard with bots to rack up the pool</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l29" name="l29">29</a></td><td><pre> * Crate Drops - A &quot;crate&quot; will drop randomly in the channel that requires multiple `!break`'s to open it. Once opened, there will be 4 items you can get by typing the ! command under it. Items will include money, extra privlegges like holding more coins, and other items you can win.</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l30" name="l30">30</a></td><td><pre> * **Suicide Round** - There is no bank in this mode, and if you lose your nick through a NICK or QUIT, you lose your wallet. Round can last 3-7 days and the top 10 wallets will score.</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l31" name="l31">31</a></td><td><pre> * **Bank Round** - Round lasts a week and the top 10 players in the bank will score.</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l32" name="l32">32</a></td><td><pre> * **Flash Match** - Round lasts a day and the top 10 players in the bank will score.</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l33" name="l33">33</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l34" name="l34">34</a></td><td><pre><span class="insertion">+</span><span class="insertion">###### Try it out</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l35" name="l35">35</a></td><td><pre> We are running IRCCEX actively in **#exchange** on **EFNet** &amp; **SuperNETs**, come chat with us, make some money, and share ideas!</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l36" name="l36">36</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l37" name="l37">37</a></td><td><pre> ###### Mirrors</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l38" name="l38">38</a></td><td><pre><span class="bold">diff --git a/irccex/core/cmc.py b/irccex/core/coinmarketcap.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l39" name="l39">39</a></td><td><pre><span class="bold">similarity index 63%</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l40" name="l40">40</a></td><td><pre><span class="bold">rename from irccex/core/cmc.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l41" name="l41">41</a></td><td><pre><span class="bold">rename to irccex/core/coinmarketcap.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l42" name="l42">42</a></td><td><pre><span class="bold">index 7a2a2d9..3d2cfe3 100644</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l43" name="l43">43</a></td><td><pre><span class="bold">--- a/irccex/core/cmc.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l44" name="l44">44</a></td><td><pre><span class="bold">+++ b/irccex/core/coinmarketcap.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l45" name="l45">45</a></td><td><pre><span class="hunk">@@ -1,24 +1,23 @@</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l46" name="l46">46</a></td><td><pre> #!/usr/bin/env python</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l47" name="l47">47</a></td><td><pre><span class="deletion">-# IRC Cryptocurrency Exchange (IRCCEX) - Developed by acidvegas in Python (https://acid.vegas/irccex)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l48" name="l48">48</a></td><td><pre><span class="deletion">-# cmc.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l49" name="l49">49</a></td><td><pre><span class="insertion">+</span><span class="insertion"># CoinMarketCap API Class - Developed by acidvegas in Python (https://acid.vegas/coinmarketcap)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l50" name="l50">50</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l51" name="l51">51</a></td><td><pre><span class="insertion">+</span><span class="insertion">import http.client</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l52" name="l52">52</a></td><td><pre> import json</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l53" name="l53">53</a></td><td><pre> import time</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l54" name="l54">54</a></td><td><pre><span class="deletion">-</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l55" name="l55">55</a></td><td><pre><span class="deletion">-import requests</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l56" name="l56">56</a></td><td><pre><span class="deletion">-</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l57" name="l57">57</a></td><td><pre><span class="deletion">-import config</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l58" name="l58">58</a></td><td><pre><span class="insertion">+</span><span class="insertion">import zlib</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l59" name="l59">59</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l60" name="l60">60</a></td><td><pre> class CoinMarketCap(object):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l61" name="l61">61</a></td><td><pre><span class="deletion">- def __init__(self):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l62" name="l62">62</a></td><td><pre><span class="deletion">- self.cache = {'global':dict(), 'ticker':dict()}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l63" name="l63">63</a></td><td><pre><span class="deletion">- self.last = {'global':0 , 'ticker':0 }</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l64" name="l64">64</a></td><td><pre><span class="insertion">+</span> <span class="insertion">def __init__(self, api_key):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l65" name="l65">65</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.api_key = api_key</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l66" name="l66">66</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.cache = {'global':dict(), 'ticker':dict()}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l67" name="l67">67</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.last = {'global':0 , 'ticker':0 }</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l68" name="l68">68</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l69" name="l69">69</a></td><td><pre><span class="deletion">- def _api(self, _endpoint, _params={}):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l70" name="l70">70</a></td><td><pre><span class="deletion">- session = requests.Session()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l71" name="l71">71</a></td><td><pre><span class="deletion">- session.headers.update({'Accept':'application/json', 'Accept-Encoding':'deflate, gzip', 'X-CMC_PRO_API_KEY':config.CMC_API_KEY})</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l72" name="l72">72</a></td><td><pre><span class="deletion">- response = session.get('https://pro-api.coinmarketcap.com/v1/' + _endpoint, params=_params, timeout=15)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l73" name="l73">73</a></td><td><pre><span class="deletion">- return json.loads(response.text.replace(': null', ': &quot;0&quot;'))['data']</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l74" name="l74">74</a></td><td><pre><span class="insertion">+</span> <span class="insertion">def _api(self, _endpoint):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l75" name="l75">75</a></td><td><pre><span class="insertion">+</span> <span class="insertion">conn = http.client.HTTPSConnection('pro-api.coinmarketcap.com', timeout=15)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l76" name="l76">76</a></td><td><pre><span class="insertion">+</span> <span class="insertion">conn.request('GET', '/v1/' + _endpoint, headers={'Accept':'application/json', 'Accept-Encoding':'deflate, gzip', 'X-CMC_PRO_API_KEY':self.api_key})</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l77" name="l77">77</a></td><td><pre><span class="insertion">+</span> <span class="insertion">response = zlib.decompress(conn.getresponse().read(), 16+zlib.MAX_WBITS).decode('utf-8').replace(': null', ': &quot;0&quot;')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l78" name="l78">78</a></td><td><pre><span class="insertion">+</span> <span class="insertion">conn.close()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l79" name="l79">79</a></td><td><pre><span class="insertion">+</span> <span class="insertion">return json.loads(response)['data']</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l80" name="l80">80</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l81" name="l81">81</a></td><td><pre> def _global(self):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l82" name="l82">82</a></td><td><pre> if time.time() - self.last['global'] &lt; 300:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l83" name="l83">83</a></td><td><pre><span class="hunk">@@ -40,7 +39,7 @@</span> </span>class CoinMarketCap(object):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l84" name="l84">84</a></td><td><pre> if time.time() - self.last['ticker'] &lt; 300:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l85" name="l85">85</a></td><td><pre> return self.cache['ticker']</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l86" name="l86">86</a></td><td><pre> else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l87" name="l87">87</a></td><td><pre><span class="deletion">- data = self._api('cryptocurrency/listings/latest', {'limit':'5000'})</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l88" name="l88">88</a></td><td><pre><span class="insertion">+</span> <span class="insertion">data = self._api('cryptocurrency/listings/latest?limit=5000')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l89" name="l89">89</a></td><td><pre> self.cache['ticker'] = dict()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l90" name="l90">90</a></td><td><pre> for item in data:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l91" name="l91">91</a></td><td><pre> self.cache['ticker'][item['symbol']] = {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l92" name="l92">92</a></td><td><pre><span class="bold">diff --git a/irccex/core/config.py b/irccex/core/config.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l93" name="l93">93</a></td><td><pre><span class="bold">index 81e4b3c..f1c56e3 100644</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l94" name="l94">94</a></td><td><pre><span class="bold">--- a/irccex/core/config.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l95" name="l95">95</a></td><td><pre><span class="bold">+++ b/irccex/core/config.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l96" name="l96">96</a></td><td><pre><span class="hunk">@@ -15,7 +15,6 @@</span> </span>class connection:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l97" name="l97">97</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l98" name="l98">98</a></td><td><pre> class cert:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l99" name="l99">99</a></td><td><pre> key = None</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l100" name="l100">100</a></td><td><pre><span class="deletion">- file = None</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l101" name="l101">101</a></td><td><pre> password = None</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l102" name="l102">102</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l103" name="l103">103</a></td><td><pre> class ident:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l104" name="l104">104</a></td><td><pre><span class="bold">diff --git a/irccex/core/irc.py b/irccex/core/irc.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l105" name="l105">105</a></td><td><pre><span class="bold">index 09d5ea8..c5b3491 100644</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l106" name="l106">106</a></td><td><pre><span class="bold">--- a/irccex/core/irc.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l107" name="l107">107</a></td><td><pre><span class="bold">+++ b/irccex/core/irc.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l108" name="l108">108</a></td><td><pre><span class="hunk">@@ -20,7 +20,7 @@</span> </span>import time</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l109" name="l109">109</a></td><td><pre> import config</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l110" name="l110">110</a></td><td><pre> import constants</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l111" name="l111">111</a></td><td><pre> import functions</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l112" name="l112">112</a></td><td><pre><span class="deletion">-from cmc import CoinMarketCap</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l113" name="l113">113</a></td><td><pre><span class="insertion">+</span><span class="insertion">from coinmarketcap import CoinMarketCap</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l114" name="l114">114</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l115" name="l115">115</a></td><td><pre> if config.connection.ssl:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l116" name="l116">116</a></td><td><pre> import ssl</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l117" name="l117">117</a></td><td><pre><span class="hunk">@@ -43,8 +43,8 @@</span> </span>class IRC(object):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l118" name="l118">118</a></td><td><pre> self.start = time.time()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l119" name="l119">119</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l120" name="l120">120</a></td><td><pre> def run(self):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l121" name="l121">121</a></td><td><pre><span class="deletion">- if os.path.isfile('data/db.pkl'):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l122" name="l122">122</a></td><td><pre><span class="deletion">- with open('data/db.pkl', 'rb') as db_file:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l123" name="l123">123</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if os.path.isfile('db.pkl'):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l124" name="l124">124</a></td><td><pre><span class="insertion">+</span> <span class="insertion">with open('db.pkl', 'rb') as db_file:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l125" name="l125">125</a></td><td><pre> self.db = pickle.load(db_file)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l126" name="l126">126</a></td><td><pre> print('[+] - Restored database!')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l127" name="l127">127</a></td><td><pre> Loops.start_loops()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l128" name="l128">128</a></td><td><pre><span class="hunk">@@ -62,21 +62,19 @@</span> </span>class IRC(object):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l129" name="l129">129</a></td><td><pre> self.listen()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l130" name="l130">130</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l131" name="l131">131</a></td><td><pre> def create_socket(self):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l132" name="l132">132</a></td><td><pre><span class="deletion">- family = socket.AF_INET6 if config.connection.ipv6 else socket.AF_INET</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l133" name="l133">133</a></td><td><pre><span class="deletion">- self.sock = socket.socket(family, socket.SOCK_STREAM)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l134" name="l134">134</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.sock = socket.socket(AF_INET6) if config.connection.ipv6 else socket.socket()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l135" name="l135">135</a></td><td><pre> if config.connection.vhost:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l136" name="l136">136</a></td><td><pre> self.sock.bind((config.connection.vhost, 0))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l137" name="l137">137</a></td><td><pre> if config.connection.ssl:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l138" name="l138">138</a></td><td><pre> ctx = ssl.SSLContext()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l139" name="l139">139</a></td><td><pre> if config.cert.file:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l140" name="l140">140</a></td><td><pre><span class="deletion">- ctx.load_cert_chain(config.cert.file, config.cert.key, config.cert.password)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l141" name="l141">141</a></td><td><pre><span class="insertion">+</span> <span class="insertion">ctx.load_cert_chain(config.cert.file, password=config.cert.password)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l142" name="l142">142</a></td><td><pre> if config.connection.ssl_verify:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l143" name="l143">143</a></td><td><pre><span class="deletion">- ctx.verify_mode = ssl.CERT_REQUIRED</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l144" name="l144">144</a></td><td><pre><span class="insertion">+</span> <span class="insertion">ctx.check_hostname = True</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l145" name="l145">145</a></td><td><pre> ctx.load_default_certs()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l146" name="l146">146</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.sock = ctx.wrap_socket(self.sock, server_hostname=config.connection.server)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l147" name="l147">147</a></td><td><pre> else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l148" name="l148">148</a></td><td><pre><span class="deletion">- ctx.check_hostname = False</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l149" name="l149">149</a></td><td><pre><span class="deletion">- ctx.verify_mode = ssl.CERT_NONE</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l150" name="l150">150</a></td><td><pre><span class="deletion">- self.sock = ctx.wrap_socket(self.sock)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l151" name="l151">151</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.sock = ctx.wrap_socket(self.sock)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l152" name="l152">152</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l153" name="l153">153</a></td><td><pre> def listen(self):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l154" name="l154">154</a></td><td><pre> while True:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l155" name="l155">155</a></td><td><pre><span class="hunk">@@ -204,7 +202,7 @@</span> </span>class Events:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l156" name="l156">156</a></td><td><pre> Commands.sendmsg(chan, 'Cashed out {0} to your bank account! {1}'.format(color('${:,}'.format(int(amount)), constants.green), color('(current balance: ${:,})'.format(int(Bot.db['bank'][nick][0])), constants.grey)))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l157" name="l157">157</a></td><td><pre> elif len(args) == 1:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l158" name="l158">158</a></td><td><pre> if msg == '@irccex':</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l159" name="l159">159</a></td><td><pre><span class="deletion">- Commands.sendmsg(chan, constants.bold + 'IRC Cryptocurrency Exchange (IRCCEX) - Developed by acidvegas in Python - https://acid.vegas/irccex')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l160" name="l160">160</a></td><td><pre><span class="insertion">+</span> <span class="insertion">Commands.sendmsg(chan, constants.bold + 'IRC Cryptocurrency Exchange (IRCCEX) - Developed by acidvegas in Python - https://github.com/acidvegas/irccex')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l161" name="l161">161</a></td><td><pre> elif msg == '@stats':</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l162" name="l162">162</a></td><td><pre> bank_total = 0</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l163" name="l163">163</a></td><td><pre> global_data = CMC._global()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l164" name="l164">164</a></td><td><pre><span class="hunk">@@ -501,6 +499,7 @@</span> </span>class Events:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l165" name="l165">165</a></td><td><pre> class Loops:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l166" name="l166">166</a></td><td><pre> def start_loops():</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l167" name="l167">167</a></td><td><pre> threading.Thread(target=Loops.backup).start()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l168" name="l168">168</a></td><td><pre><span class="insertion">+</span> <span class="insertion">threading.Thread(target=Loops.double_fees).start()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l169" name="l169">169</a></td><td><pre> threading.Thread(target=Loops.maintenance).start()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l170" name="l170">170</a></td><td><pre> threading.Thread(target=Loops.remind).start()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l171" name="l171">171</a></td><td><pre> threading.Thread(target=Loops.reward).start()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l172" name="l172">172</a></td><td><pre><span class="hunk">@@ -510,11 +509,31 @@</span> </span>class Loops:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l173" name="l173">173</a></td><td><pre> def backup():</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l174" name="l174">174</a></td><td><pre> while True:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l175" name="l175">175</a></td><td><pre> time.sleep(3600) # 1H</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l176" name="l176">176</a></td><td><pre><span class="deletion">- with open('data/db.pkl', 'wb') as db_file:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l177" name="l177">177</a></td><td><pre><span class="insertion">+</span> <span class="insertion">with open('db.pkl', 'wb') as db_file:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l178" name="l178">178</a></td><td><pre> pickle.dump(Bot.db, db_file, pickle.HIGHEST_PROTOCOL)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l179" name="l179">179</a></td><td><pre> Bot.last_backup = time.strftime('%I:%M')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l180" name="l180">180</a></td><td><pre> print('[+] - Database backed up!')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l181" name="l181">181</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l182" name="l182">182</a></td><td><pre><span class="insertion">+</span> <span class="insertion">def double_fees():</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l183" name="l183">183</a></td><td><pre><span class="insertion">+</span> <span class="insertion">original_fees = {'cashout':config.fees.cashout,'send':config.fees.send,'trade':config.fees.trade}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l184" name="l184">184</a></td><td><pre><span class="insertion">+</span> <span class="insertion">while True:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l185" name="l185">185</a></td><td><pre><span class="insertion">+</span> <span class="insertion">try:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l186" name="l186">186</a></td><td><pre><span class="insertion">+</span> <span class="insertion">time.sleep(functions.random_int(604800,864000)) # 7D - 10D</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l187" name="l187">187</a></td><td><pre><span class="insertion">+</span> <span class="insertion">config.fees.cashout = original_fees['cashout']*2</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l188" name="l188">188</a></td><td><pre><span class="insertion">+</span> <span class="insertion">config.fees.send = original_fees['send']*2</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l189" name="l189">189</a></td><td><pre><span class="insertion">+</span> <span class="insertion">config.fees.trade = original_fees['trade']*2</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l190" name="l190">190</a></td><td><pre><span class="insertion">+</span> <span class="insertion">Commands.action(config.connection.channel, color('Double fees have been activated!', constants.red))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l191" name="l191">191</a></td><td><pre><span class="insertion">+</span> <span class="insertion">time.sleep(functions.random_int(86400, 259200)) # 1D - 3D</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l192" name="l192">192</a></td><td><pre><span class="insertion">+</span> <span class="insertion">config.fees.cashout = original_fees['cashout']/2</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l193" name="l193">193</a></td><td><pre><span class="insertion">+</span> <span class="insertion">config.fees.send = original_fees['send']/2</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l194" name="l194">194</a></td><td><pre><span class="insertion">+</span> <span class="insertion">config.fees.trade = original_fees['trade']/2</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l195" name="l195">195</a></td><td><pre><span class="insertion">+</span> <span class="insertion">Commands.notice(config.connection.channel, color('Double fees have been deactivated!', constants.red))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l196" name="l196">196</a></td><td><pre><span class="insertion">+</span> <span class="insertion">except Exception as ex:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l197" name="l197">197</a></td><td><pre><span class="insertion">+</span> <span class="insertion">config.fees.cashout = original_fees['cashout']</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l198" name="l198">198</a></td><td><pre><span class="insertion">+</span> <span class="insertion">config.fees.send = original_fees['send']</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l199" name="l199">199</a></td><td><pre><span class="insertion">+</span> <span class="insertion">config.fees.trade = original_fees['trade']</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l200" name="l200">200</a></td><td><pre><span class="insertion">+</span> <span class="insertion">print('[!] - Error occured in the double fees loop! (' + str(ex) + ')')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l201" name="l201">201</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l202" name="l202">202</a></td><td><pre> def maintenance():</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l203" name="l203">203</a></td><td><pre> while True:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l204" name="l204">204</a></td><td><pre> try:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l205" name="l205">205</a></td><td><pre><span class="hunk">@@ -596,5 +615,5 @@</span> </span>class Loops:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l206" name="l206">206</a></td><td><pre> finally:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l207" name="l207">207</a></td><td><pre> time.sleep(3600) # 1H</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l208" name="l208">208</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l209" name="l209">209</a></td><td><pre><span class="deletion">-CMC = CoinMarketCap()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l210" name="l210">210</a></td><td><pre> Bot = IRC()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l211" name="l211">211</a></td><td><pre><span class="insertion">+</span><span class="insertion">CMC = CoinMarketCap(config.CMC_API_KEY)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l212" name="l212">212</a></td><td><pre><span class="bold">diff --git a/irccex/data/cert/.gitignore b/irccex/data/cert/.gitignore</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l213" name="l213">213</a></td><td><pre><span class="bold">deleted file mode 100644</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l214" name="l214">214</a></td><td><pre><span class="bold">index 86d0cb2..0000000</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l215" name="l215">215</a></td><td><pre><span class="bold">--- a/irccex/data/cert/.gitignore</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l216" name="l216">216</a></td><td><pre><span class="bold">+++ /dev/null</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l217" name="l217">217</a></td><td><pre><span class="hunk">@@ -1,4 +0,0 @@</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l218" name="l218">218</a></td><td><pre><span class="deletion">-# Ignore everything in this directory</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l219" name="l219">219</a></td><td><pre><span class="deletion">-*</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l220" name="l220">220</a></td><td><pre><span class="deletion">-# Except this file</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l221" name="l221">221</a></td><td><pre><span class="deletion">-!.gitignore</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l222" name="l222">222</a></td><td><pre><span class="bold">diff --git a/irccex/data/dbx.py b/irccex/data/dbx.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l223" name="l223">223</a></td><td><pre><span class="bold">deleted file mode 100644</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l224" name="l224">224</a></td><td><pre><span class="bold">index 066067b..0000000</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l225" name="l225">225</a></td><td><pre><span class="bold">--- a/irccex/data/dbx.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l226" name="l226">226</a></td><td><pre><span class="bold">+++ /dev/null</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l227" name="l227">227</a></td><td><pre><span class="hunk">@@ -1,12 +0,0 @@</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l228" name="l228">228</a></td><td><pre><span class="deletion">-import pickle, coinmarketcap</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l229" name="l229">229</a></td><td><pre><span class="deletion">-CMC = coinmarketcap.CoinMarketCap()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l230" name="l230">230</a></td><td><pre><span class="deletion">-DB = pickle.load(open('db.pkl' 'rb'))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l231" name="l231">231</a></td><td><pre><span class="deletion">-wallets = dict()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l232" name="l232">232</a></td><td><pre><span class="deletion">-for nick in DB['wallet']:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l233" name="l233">233</a></td><td><pre><span class="deletion">- total = 0</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l234" name="l234">234</a></td><td><pre><span class="deletion">- for symbol in DB['wallet'][nick]:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l235" name="l235">235</a></td><td><pre><span class="deletion">- total += DB['wallet'][nick][symbol] if symbol == 'USD' else CMC.get()[symbol]['price_usd']*DB['wallet'][nick][symbol]</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l236" name="l236">236</a></td><td><pre><span class="deletion">- wallets[nick] = total</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l237" name="l237">237</a></td><td><pre><span class="deletion">-data = sorted(wallets, key=wallets.get, reverse=True)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l238" name="l238">238</a></td><td><pre><span class="deletion">-for item in data:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l239" name="l239">239</a></td><td><pre><span class="deletion">- print('[{0:02}] {1} ${2:,}'.format(data.index(item)+1, item.ljust(9), wallets[item]))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l240" name="l240">240</a></td><td><pre><span class="bold">diff --git a/irccex/data/logs/.gitignore b/irccex/data/logs/.gitignore</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l241" name="l241">241</a></td><td><pre><span class="bold">deleted file mode 100644</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l242" name="l242">242</a></td><td><pre><span class="bold">index 86d0cb2..0000000</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l243" name="l243">243</a></td><td><pre><span class="bold">--- a/irccex/data/logs/.gitignore</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l244" name="l244">244</a></td><td><pre><span class="bold">+++ /dev/null</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l245" name="l245">245</a></td><td><pre><span class="hunk">@@ -1,4 +0,0 @@</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l246" name="l246">246</a></td><td><pre><span class="deletion">-# Ignore everything in this directory</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l247" name="l247">247</a></td><td><pre><span class="deletion">-*</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l248" name="l248">248</a></td><td><pre><span class="deletion">-# Except this file</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l249" name="l249">249</a></td><td><pre><span class="deletion">-!.gitignore</span></pre></td></tr>
</table>
<div id="footer">site generated by <a href="https://github.com/acidvegas/stagit" target="_blank">stagit</a> on <a href="#">05/03/20</a></div>

View File

@ -1,61 +0,0 @@
<!doctype html>
<link rel="stylesheet" href="../../style.css">
<title>irccex :: b682885</title>
<h1><a href="../index.html" title="Back to Repository">&larr;&#xFE0E;</a> irccex :: b682885</h1>
<hr>
<table id="main" cellpadding="0" cellspacing="0">
<tr class="item"><td class="linenumber"><a href="#l1" name="l1">1</a></td><td><pre><span class="commit">commit b68288566a6c92a22949cd39634e54f5a792b196</span><span class="commit"> (</span><span class="reference">HEAD -&gt; </span><span class="branch">master</span><span class="commit">, </span><span class="remote">origin/master</span><span class="commit">)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l2" name="l2">2</a></td><td><pre>Author: acidvegas &lt;acid.vegas@acid.vegas&gt;</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l3" name="l3">3</a></td><td><pre>Date: Wed Apr 22 02:58:42 2020 -0400</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l4" name="l4">4</a></td><td><pre></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l5" name="l5">5</a></td><td><pre> Fixed null values</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l6" name="l6">6</a></td><td><pre>---</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l7" name="l7">7</a></td><td><pre> irccex/.gitignore | 1 <span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l8" name="l8">8</a></td><td><pre> irccex/core/coinmarketcap.py | 11 <span class="insertion">++++++++++</span><span class="deletion">-</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l9" name="l9">9</a></td><td><pre> 2 files changed, 11 insertions(+), 1 deletion(-)</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l10" name="l10">10</a></td><td><pre></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l11" name="l11">11</a></td><td><pre><span class="bold">diff --git a/irccex/.gitignore b/irccex/.gitignore</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l12" name="l12">12</a></td><td><pre><span class="bold">new file mode 100644</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l13" name="l13">13</a></td><td><pre><span class="bold">index 0000000..98e6ef6</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l14" name="l14">14</a></td><td><pre><span class="bold">--- /dev/null</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l15" name="l15">15</a></td><td><pre><span class="bold">+++ b/irccex/.gitignore</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l16" name="l16">16</a></td><td><pre><span class="hunk">@@ -0,0 +1 @@</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l17" name="l17">17</a></td><td><pre><span class="insertion">+</span><span class="insertion">*.db</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l18" name="l18">18</a></td><td><pre><span class="bold">diff --git a/irccex/core/coinmarketcap.py b/irccex/core/coinmarketcap.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l19" name="l19">19</a></td><td><pre><span class="bold">index 3d2cfe3..467efe6 100644</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l20" name="l20">20</a></td><td><pre><span class="bold">--- a/irccex/core/coinmarketcap.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l21" name="l21">21</a></td><td><pre><span class="bold">+++ b/irccex/core/coinmarketcap.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l22" name="l22">22</a></td><td><pre><span class="hunk">@@ -6,6 +6,14 @@</span> </span>import json</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l23" name="l23">23</a></td><td><pre> import time</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l24" name="l24">24</a></td><td><pre> import zlib</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l25" name="l25">25</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l26" name="l26">26</a></td><td><pre><span class="insertion">+</span><span class="insertion">def replace_nulls(json_elem):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l27" name="l27">27</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if isinstance(json_elem, list):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l28" name="l28">28</a></td><td><pre><span class="insertion">+</span> <span class="insertion">return [replace_nulls(elem) for elem in json_elem]</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l29" name="l29">29</a></td><td><pre><span class="insertion">+</span> <span class="insertion">elif isinstance(json_elem, dict):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l30" name="l30">30</a></td><td><pre><span class="insertion">+</span> <span class="insertion">return {key: replace_nulls(value) for key, value in json_elem.items()}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l31" name="l31">31</a></td><td><pre><span class="insertion">+</span> <span class="insertion">else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l32" name="l32">32</a></td><td><pre><span class="insertion">+</span> <span class="insertion">return '0' if json_elem is None else json_elem</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l33" name="l33">33</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l34" name="l34">34</a></td><td><pre> class CoinMarketCap(object):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l35" name="l35">35</a></td><td><pre> def __init__(self, api_key):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l36" name="l36">36</a></td><td><pre> self.api_key = api_key</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l37" name="l37">37</a></td><td><pre><span class="hunk">@@ -15,7 +23,7 @@</span> </span>class CoinMarketCap(object):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l38" name="l38">38</a></td><td><pre> def _api(self, _endpoint):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l39" name="l39">39</a></td><td><pre> conn = http.client.HTTPSConnection('pro-api.coinmarketcap.com', timeout=15)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l40" name="l40">40</a></td><td><pre> conn.request('GET', '/v1/' + _endpoint, headers={'Accept':'application/json', 'Accept-Encoding':'deflate, gzip', 'X-CMC_PRO_API_KEY':self.api_key})</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l41" name="l41">41</a></td><td><pre><span class="deletion">- response = zlib.decompress(conn.getresponse().read(), 16+zlib.MAX_WBITS).decode('utf-8').replace(': null', ': &quot;0&quot;')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l42" name="l42">42</a></td><td><pre><span class="insertion">+</span> <span class="insertion">response = zlib.decompress(conn.getresponse().read(), 16+zlib.MAX_WBITS).decode('utf-8')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l43" name="l43">43</a></td><td><pre> conn.close()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l44" name="l44">44</a></td><td><pre> return json.loads(response)['data']</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l45" name="l45">45</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l46" name="l46">46</a></td><td><pre><span class="hunk">@@ -40,6 +48,7 @@</span> </span>class CoinMarketCap(object):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l47" name="l47">47</a></td><td><pre> return self.cache['ticker']</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l48" name="l48">48</a></td><td><pre> else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l49" name="l49">49</a></td><td><pre> data = self._api('cryptocurrency/listings/latest?limit=5000')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l50" name="l50">50</a></td><td><pre><span class="insertion">+</span> <span class="insertion">data = replace_nulls(data)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l51" name="l51">51</a></td><td><pre> self.cache['ticker'] = dict()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l52" name="l52">52</a></td><td><pre> for item in data:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l53" name="l53">53</a></td><td><pre> self.cache['ticker'][item['symbol']] = {</span></pre></td></tr>
</table>
<div id="footer">site generated by <a href="https://github.com/acidvegas/stagit" target="_blank">stagit</a> on <a href="#">05/03/20</a></div>

View File

@ -1,35 +0,0 @@
<!doctype html>
<link rel="stylesheet" href="../../style.css">
<title>irccex :: b82fe23</title>
<h1><a href="../index.html" title="Back to Repository">&larr;&#xFE0E;</a> irccex :: b82fe23</h1>
<hr>
<table id="main" cellpadding="0" cellspacing="0">
<tr class="item"><td class="linenumber"><a href="#l1" name="l1">1</a></td><td><pre><span class="commit">commit b82fe23f8034b19589dc5629a904701ba3f3623a</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l2" name="l2">2</a></td><td><pre>Author: acidvegas &lt;acid.vegas@acid.vegas&gt;</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l3" name="l3">3</a></td><td><pre>Date: Sat Mar 21 03:20:00 2020 -0400</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l4" name="l4">4</a></td><td><pre></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l5" name="l5">5</a></td><td><pre> added double fees mode info</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l6" name="l6">6</a></td><td><pre>---</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l7" name="l7">7</a></td><td><pre> README.md | 4 <span class="insertion">+++</span><span class="deletion">-</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l8" name="l8">8</a></td><td><pre> 1 file changed, 3 insertions(+), 1 deletion(-)</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l9" name="l9">9</a></td><td><pre></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l10" name="l10">10</a></td><td><pre><span class="bold">diff --git a/README.md b/README.md</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l11" name="l11">11</a></td><td><pre><span class="bold">index 788783c..8cb83ea 100644</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l12" name="l12">12</a></td><td><pre><span class="bold">--- a/README.md</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l13" name="l13">13</a></td><td><pre><span class="bold">+++ b/README.md</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l14" name="l14">14</a></td><td><pre><span class="hunk">@@ -29,10 +29,12 @@</span> </span>This game can introduce lots of trolling &amp; botting. Get creative &amp; figure out wa</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l15" name="l15">15</a></td><td><pre> ###### Loops</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l16" name="l16">16</a></td><td><pre> * The database will backup to a pickle file every hour. The last backup time can be seen in the `@stats` reply. Make note of this before restarting the bot for some reason.</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l17" name="l17">17</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l18" name="l18">18</a></td><td><pre><span class="deletion">-* The exchange will random enter &quot;maintenance mode&quot; once every 3 days, which locks the use of all exchange commands. Maintenance can last an hour to a full day.</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l19" name="l19">19</a></td><td><pre><span class="insertion">+</span><span class="insertion">* The exchange will random enter &quot;maintenance mode&quot; randomly every 7 to 14 days, which locks the use of all exchange commands. Maintenance can last an hour to a full day.</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l20" name="l20">20</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l21" name="l21">21</a></td><td><pre> * All fees are collected &amp; stored in the &quot;reward pool&quot;. The bot will make an announcement randomly before the round ends &amp; anyone who types `!bang` after that will get a reward taken from the pool. It takes 25 to 50 `!bang`'s to completely empty the pool. The final person to `!bang` will get the largest reward.</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l22" name="l22">22</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l23" name="l23">23</a></td><td><pre><span class="insertion">+</span><span class="insertion">* Double fees mode will be activated randomly every 7 to 10 days, which will double the fees for cashout, trade, and send usage, and can last for 1 to 3 days.</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l24" name="l24">24</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l25" name="l25">25</a></td><td><pre> ###### Trading Pair Rules</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l26" name="l26">26</a></td><td><pre> - USD can only be used for buying or selling BTC, ETH, &amp; LTC.</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l27" name="l27">27</a></td><td><pre> </span></pre></td></tr>
</table>
<div id="footer">site generated by <a href="https://github.com/acidvegas/stagit" target="_blank">stagit</a> on <a href="#">05/03/20</a></div>

View File

@ -1,17 +0,0 @@
<!doctype html>
<link rel="stylesheet" href="../style.css">
<title>irccex</title>
<h1><a href="../index.html" title="Home">&#8962;&#xFE0E;</a> irccex</h1>
<div style="padding-left:30px">
<h4>fantasy cryptocurrency exchange for irc</h4>
<h5>git clone <a href="https://github.com/acidvegas/irccex.git" title="irccex clone URL">https://github.com/acidvegas/irccex.git</a></h5>
</div>
<hr>
<table id="main" cellpadding="0" cellspacing="0">
<tr id="navigation"><th></th><th>Hash</th><th>Commit message</th><th>Author</th><th>Date</th><th align="right">Files</th><th align="right">+</th><th align="right">-</th></tr>
<tr class="item"><td><span style="color:green" title="acidvegas (MOST DANGEROUS MOTHERFUCK) <acid.vegas@acid.vegas>&#13;EF4B922DB85DC9DE">&#128274;&#xFE0E;</span></td><td><a href="commit/b682885.html" title="View this commit">b682885</a></td><td>Fixed null values</td><td>acidvegas</td><td>2020-04-22 02:58</td><td align="right">2</td><td align="right">+11</td><td align="right">-1</td></tr>
<tr class="item"><td><span style="color:green" title="acidvegas (MOST DANGEROUS MOTHERFUCK) <acid.vegas@acid.vegas>&#13;EF4B922DB85DC9DE">&#128274;&#xFE0E;</span></td><td><a href="commit/b82fe23.html" title="View this commit">b82fe23</a></td><td>added double fees mode info</td><td>acidvegas</td><td>2020-03-21 03:20</td><td align="right">1</td><td align="right">+3</td><td align="right">-1</td></tr>
<tr class="item"><td><span style="color:green" title="acidvegas (MOST DANGEROUS MOTHERFUCK) <acid.vegas@acid.vegas>&#13;EF4B922DB85DC9DE">&#128274;&#xFE0E;</span></td><td><a href="commit/55d5438.html" title="View this commit">55d5438</a></td><td>Added double fees loop, removed all 3rd party library requirements, cleaned up</td><td>acidvegas</td><td>2020-03-21 03:14</td><td align="right">7</td><td align="right">+48</td><td align="right">-50</td></tr>
<tr class="item"><td><span style="color:green" title="acidvegas (MOST DANGEROUS MOTHERFUCK) <acid.vegas@acid.vegas>&#13;EF4B922DB85DC9DE">&#128274;&#xFE0E;</span></td><td><a href="commit/54783c8.html" title="View this commit">54783c8</a></td><td>Initial commit</td><td>acidvegas</td><td>2020-02-21 22:10</td><td align="right">12</td><td align="right">+1207</td><td align="right">-0</td></tr>
</table>
<div id="footer">site generated by <a href="https://github.com/acidvegas/stagit" target="_blank">stagit</a> on <a href="#">05/03/20</a></div>

16
music/index.html Normal file
View File

@ -0,0 +1,16 @@
<!doctype html>
<link rel="stylesheet" href="../style.css">
<title>acidvegas x music</title>
<center>
<br><img src="../i/acidvegas.png">
<br><img src="../i/mostdangerous.png">
<br><a href="../hardcore.wav"><img src="../i/crowdkill.gif"></a>
<table>
<tr>
<td><img src="../i/x.png"></td>
<td><img src="../i/musick.png"></td>
<td><img src="../i/x.png"></td>
</tr>
</table>
<br><b>under construction</b>
</center>

View File

@ -1,300 +0,0 @@
<!doctype html>
<link rel="stylesheet" href="../../style.css">
<title>mzk :: 04a1f6e</title>
<h1><a href="../index.html" title="Back to Repository">&larr;&#xFE0E;</a> mzk :: 04a1f6e</h1>
<hr>
<table id="main" cellpadding="0" cellspacing="0">
<tr class="item"><td class="linenumber"><a href="#l1" name="l1">1</a></td><td><pre><span class="commit">commit 04a1f6e01876eaee762033ca2f9ed372d8d99c2d</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l2" name="l2">2</a></td><td><pre>Author: acidvegas &lt;acid.vegas@acid.vegas&gt;</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l3" name="l3">3</a></td><td><pre>Date: Sat Jul 13 18:52:23 2019 -0400</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l4" name="l4">4</a></td><td><pre></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l5" name="l5">5</a></td><td><pre> Initial commit</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l6" name="l6">6</a></td><td><pre>---</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l7" name="l7">7</a></td><td><pre> LICENSE | 15 <span class="insertion">++++++</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l8" name="l8">8</a></td><td><pre> README.md | 0</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l9" name="l9">9</a></td><td><pre> mzk/constants.py | 78 <span class="insertion">++++++++++++++++++++++++++++</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l10" name="l10">10</a></td><td><pre> mzk/functions.py | 153 <span class="insertion">+++++++++++++++++++++++++++++++++++++++++++++++++++++++</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l11" name="l11">11</a></td><td><pre> mzk/main.py | 6 <span class="insertion">+++</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l12" name="l12">12</a></td><td><pre> 5 files changed, 252 insertions(+)</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l13" name="l13">13</a></td><td><pre></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l14" name="l14">14</a></td><td><pre><span class="bold">diff --git a/LICENSE b/LICENSE</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l15" name="l15">15</a></td><td><pre><span class="bold">new file mode 100644</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l16" name="l16">16</a></td><td><pre><span class="bold">index 0000000..69997e8</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l17" name="l17">17</a></td><td><pre><span class="bold">--- /dev/null</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l18" name="l18">18</a></td><td><pre><span class="bold">+++ b/LICENSE</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l19" name="l19">19</a></td><td><pre><span class="hunk">@@ -0,0 +1,15 @@</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l20" name="l20">20</a></td><td><pre><span class="insertion">+</span><span class="insertion">ISC License</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l21" name="l21">21</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l22" name="l22">22</a></td><td><pre><span class="insertion">+</span><span class="insertion">Copyright (c) 2019, acidvegas &lt;acid.vegas@acid.vegas&gt;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l23" name="l23">23</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l24" name="l24">24</a></td><td><pre><span class="insertion">+</span><span class="insertion">Permission to use, copy, modify, and/or distribute this software for any</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l25" name="l25">25</a></td><td><pre><span class="insertion">+</span><span class="insertion">purpose with or without fee is hereby granted, provided that the above</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l26" name="l26">26</a></td><td><pre><span class="insertion">+</span><span class="insertion">copyright notice and this permission notice appear in all copies.</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l27" name="l27">27</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l28" name="l28">28</a></td><td><pre><span class="insertion">+</span><span class="insertion">THE SOFTWARE IS PROVIDED &quot;AS IS&quot; AND THE AUTHOR DISCLAIMS ALL WARRANTIES</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l29" name="l29">29</a></td><td><pre><span class="insertion">+</span><span class="insertion">WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l30" name="l30">30</a></td><td><pre><span class="insertion">+</span><span class="insertion">MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l31" name="l31">31</a></td><td><pre><span class="insertion">+</span><span class="insertion">ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l32" name="l32">32</a></td><td><pre><span class="insertion">+</span><span class="insertion">WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l33" name="l33">33</a></td><td><pre><span class="insertion">+</span><span class="insertion">ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l34" name="l34">34</a></td><td><pre><span class="insertion">+</span><span class="insertion">OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l35" name="l35">35</a></td><td><pre><span class="bold">diff --git a/README.md b/README.md</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l36" name="l36">36</a></td><td><pre><span class="bold">new file mode 100644</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l37" name="l37">37</a></td><td><pre><span class="bold">index 0000000..e69de29</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l38" name="l38">38</a></td><td><pre><span class="bold">diff --git a/mzk/constants.py b/mzk/constants.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l39" name="l39">39</a></td><td><pre><span class="bold">new file mode 100644</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l40" name="l40">40</a></td><td><pre><span class="bold">index 0000000..670489d</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l41" name="l41">41</a></td><td><pre><span class="bold">--- /dev/null</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l42" name="l42">42</a></td><td><pre><span class="bold">+++ b/mzk/constants.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l43" name="l43">43</a></td><td><pre><span class="hunk">@@ -0,0 +1,78 @@</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l44" name="l44">44</a></td><td><pre><span class="insertion">+</span><span class="insertion">#!/usr/bin/env python</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l45" name="l45">45</a></td><td><pre><span class="insertion">+</span><span class="insertion"># mzk music theory helper - developed by acidvegas in python (https://acid.vegas/mzk)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l46" name="l46">46</a></td><td><pre><span class="insertion">+</span><span class="insertion"># constants.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l47" name="l47">47</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l48" name="l48">48</a></td><td><pre><span class="insertion">+</span><span class="insertion">circle = ''' major</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l49" name="l49">49</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l50" name="l50">50</a></td><td><pre><span class="insertion">+</span><span class="insertion"> C</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l51" name="l51">51</a></td><td><pre><span class="insertion">+</span><span class="insertion"> F G</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l52" name="l52">52</a></td><td><pre><span class="insertion">+</span><span class="insertion"></span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l53" name="l53">53</a></td><td><pre><span class="insertion">+</span><span class="insertion"> 1♭ 1♯</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l54" name="l54">54</a></td><td><pre><span class="insertion">+</span><span class="insertion"> a</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l55" name="l55">55</a></td><td><pre><span class="insertion">+</span><span class="insertion"> B♭ d c D</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l56" name="l56">56</a></td><td><pre><span class="insertion">+</span><span class="insertion"> 2♭ 2♯</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l57" name="l57">57</a></td><td><pre><span class="insertion">+</span><span class="insertion"> g minor b</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l58" name="l58">58</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l59" name="l59">59</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l60" name="l60">60</a></td><td><pre><span class="insertion">+</span><span class="insertion"> E♭ 3♭ c f♯ 3♯ A</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l61" name="l61">61</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l62" name="l62">62</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l63" name="l63">63</a></td><td><pre><span class="insertion">+</span><span class="insertion"> f c♯</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l64" name="l64">64</a></td><td><pre><span class="insertion">+</span><span class="insertion"> 4♭ 4</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l65" name="l65">65</a></td><td><pre><span class="insertion">+</span><span class="insertion"> A♭ b♭ g♯ E</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l66" name="l66">66</a></td><td><pre><span class="insertion">+</span><span class="insertion"> e♭/d♯</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l67" name="l67">67</a></td><td><pre><span class="insertion">+</span><span class="insertion"> 5♭/7♯ 7♭/5♯</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l68" name="l68">68</a></td><td><pre><span class="insertion">+</span><span class="insertion"> 6♭/6♯</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l69" name="l69">69</a></td><td><pre><span class="insertion">+</span><span class="insertion"> D♭ B</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l70" name="l70">70</a></td><td><pre><span class="insertion">+</span><span class="insertion"> G♭/F♯</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l71" name="l71">71</a></td><td><pre><span class="insertion">+</span><span class="insertion"> C♯ C♭'''</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l72" name="l72">72</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l73" name="l73">73</a></td><td><pre><span class="insertion">+</span><span class="insertion">colors = {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l74" name="l74">74</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'gray' : '\033[0;90m',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l75" name="l75">75</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'red' : '\033[0;91m',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l76" name="l76">76</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'green' : '\033[0;92m',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l77" name="l77">77</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'reset' : '\033[0m'</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l78" name="l78">78</a></td><td><pre><span class="insertion">+</span><span class="insertion">}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l79" name="l79">79</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l80" name="l80">80</a></td><td><pre><span class="insertion">+</span><span class="insertion">intervals = {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l81" name="l81">81</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'unison' : {'semitones':0, 'short_name':'P1' },</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l82" name="l82">82</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'minor_second' : {'semitones':1, 'short_name':'m2' },</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l83" name="l83">83</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'major_second' : {'semitones':2, 'short_name':'M2' },</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l84" name="l84">84</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'minor_third' : {'semitones':3, 'short_name':'m3' },</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l85" name="l85">85</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'major_third' : {'semitones':4, 'short_name':'M3' },</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l86" name="l86">86</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'perfect_fourth' : {'semitones':5, 'short_name':'P4' },</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l87" name="l87">87</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'augmented_fourth' : {'semitones':6, 'short_name':'+4' },</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l88" name="l88">88</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'diminished_fifth' : {'semitones':6, 'short_name':'d5' },</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l89" name="l89">89</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'perfect_fifth' : {'semitones':7, 'short_name':'P5' },</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l90" name="l90">90</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'minor_sixth' : {'semitones':8, 'short_name':'m6' },</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l91" name="l91">91</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'major_sixth' : {'semitones':9, 'short_name':'M6' },</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l92" name="l92">92</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'minor_seventh' : {'semitones':10, 'short_name':'m7' },</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l93" name="l93">93</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'major_seventh' : {'semitones':11, 'short_name':'M7' },</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l94" name="l94">94</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'perfect_octave' : {'semitones':12, 'short_name':'8va'}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l95" name="l95">95</a></td><td><pre><span class="insertion">+</span><span class="insertion">}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l96" name="l96">96</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l97" name="l97">97</a></td><td><pre><span class="insertion">+</span><span class="insertion">notes = ('A', 'A#', 'B', 'C', 'C#', 'D', 'D#', 'E', 'F', 'F#', 'G', 'G#' )</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l98" name="l98">98</a></td><td><pre><span class="insertion">+</span><span class="insertion">numerals = ('I', 'II', 'III', 'IV', 'V', 'VI', 'VII', 'VIII', 'IX', 'X', 'XI', 'XII' )</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l99" name="l99">99</a></td><td><pre><span class="insertion">+</span><span class="insertion">scale_degrees = ('tonic','supertonic','mediant','subdominant','dominant''submediant','subtonic')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l100" name="l100">100</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l101" name="l101">101</a></td><td><pre><span class="insertion">+</span><span class="insertion">scales = {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l102" name="l102">102</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'algerian' : '2131131',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l103" name="l103">103</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'aeolian' : '2122122',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l104" name="l104">104</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'blues' : '321132',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l105" name="l105">105</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'chromatic' : '1111111',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l106" name="l106">106</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'dorian' : '2122212',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l107" name="l107">107</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'half_whole_diminished' : '12121212',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l108" name="l108">108</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'harmonic_minor' : '2122131',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l109" name="l109">109</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'ionian' : '2212221',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l110" name="l110">110</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'locrian' : '1221222',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l111" name="l111">111</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'lydian' : '2221221',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l112" name="l112">112</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'major' : '2212221',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l113" name="l113">113</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'major_pentatonic' : '22323',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l114" name="l114">114</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'melodic_minor' : '2122221',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l115" name="l115">115</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'mixolydian' : '2212212',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l116" name="l116">116</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'natural_minor' : '2122122',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l117" name="l117">117</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'persian' : '1311231',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l118" name="l118">118</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'phrygian' : '1222122',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l119" name="l119">119</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'whole_half_diminished' : '21212121',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l120" name="l120">120</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'whole_tone' : '2222222'</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l121" name="l121">121</a></td><td><pre><span class="insertion">+</span><span class="insertion">}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l122" name="l122">122</a></td><td><pre><span class="bold">diff --git a/mzk/functions.py b/mzk/functions.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l123" name="l123">123</a></td><td><pre><span class="bold">new file mode 100644</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l124" name="l124">124</a></td><td><pre><span class="bold">index 0000000..b3cf09a</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l125" name="l125">125</a></td><td><pre><span class="bold">--- /dev/null</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l126" name="l126">126</a></td><td><pre><span class="bold">+++ b/mzk/functions.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l127" name="l127">127</a></td><td><pre><span class="hunk">@@ -0,0 +1,153 @@</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l128" name="l128">128</a></td><td><pre><span class="insertion">+</span><span class="insertion">#!/usr/bin/env python</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l129" name="l129">129</a></td><td><pre><span class="insertion">+</span><span class="insertion"># mzk music theory helper - developed by acidvegas in python (https://acid.vegas/mzk)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l130" name="l130">130</a></td><td><pre><span class="insertion">+</span><span class="insertion"># functions.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l131" name="l131">131</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l132" name="l132">132</a></td><td><pre><span class="insertion">+</span><span class="insertion">import constants</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l133" name="l133">133</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l134" name="l134">134</a></td><td><pre><span class="insertion">+</span><span class="insertion">def generate_notes(key):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l135" name="l135">135</a></td><td><pre><span class="insertion">+</span> <span class="insertion">notes = ['A','A#','B','C','C#','D','D#','E','F','F#','G','G#']</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l136" name="l136">136</a></td><td><pre><span class="insertion">+</span> <span class="insertion">while notes[0] != key:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l137" name="l137">137</a></td><td><pre><span class="insertion">+</span> <span class="insertion">notes.append(notes.pop(0))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l138" name="l138">138</a></td><td><pre><span class="insertion">+</span> <span class="insertion">return notes</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l139" name="l139">139</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l140" name="l140">140</a></td><td><pre><span class="insertion">+</span><span class="insertion">def generate_scale(string, scale_notes, full=False):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l141" name="l141">141</a></td><td><pre><span class="insertion">+</span> <span class="insertion">notes = generate_notes(string.upper())*2 if full else generate_notes(string.upper())</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l142" name="l142">142</a></td><td><pre><span class="insertion">+</span> <span class="insertion">notes.append(notes[0]) # add root note to the end</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l143" name="l143">143</a></td><td><pre><span class="insertion">+</span> <span class="insertion">for index,note in enumerate(notes):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l144" name="l144">144</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if note in scale_notes:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l145" name="l145">145</a></td><td><pre><span class="insertion">+</span> <span class="insertion">notes[index] = notes[index].center(5, '-')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l146" name="l146">146</a></td><td><pre><span class="insertion">+</span> <span class="insertion">else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l147" name="l147">147</a></td><td><pre><span class="insertion">+</span> <span class="insertion">notes[index] = '-'*5</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l148" name="l148">148</a></td><td><pre><span class="insertion">+</span> <span class="insertion">return notes</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l149" name="l149">149</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l150" name="l150">150</a></td><td><pre><span class="insertion">+</span><span class="insertion">def get_pattern(pattern):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l151" name="l151">151</a></td><td><pre><span class="insertion">+</span> <span class="insertion">new_pattern = list()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l152" name="l152">152</a></td><td><pre><span class="insertion">+</span> <span class="insertion">for step in pattern:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l153" name="l153">153</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if step == '1' : new_pattern.append('H')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l154" name="l154">154</a></td><td><pre><span class="insertion">+</span> <span class="insertion">elif step == '2' : new_pattern.append('W')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l155" name="l155">155</a></td><td><pre><span class="insertion">+</span> <span class="insertion">elif step == '3' : new_pattern.append('WH')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l156" name="l156">156</a></td><td><pre><span class="insertion">+</span> <span class="insertion">return ' '.join(new_pattern)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l157" name="l157">157</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l158" name="l158">158</a></td><td><pre><span class="insertion">+</span><span class="insertion">def scale(type, key):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l159" name="l159">159</a></td><td><pre><span class="insertion">+</span> <span class="insertion">last = 0</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l160" name="l160">160</a></td><td><pre><span class="insertion">+</span> <span class="insertion">notes = generate_notes(key)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l161" name="l161">161</a></td><td><pre><span class="insertion">+</span> <span class="insertion">scale_notes = [notes[0],]</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l162" name="l162">162</a></td><td><pre><span class="insertion">+</span> <span class="insertion">for step in scales[type]:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l163" name="l163">163</a></td><td><pre><span class="insertion">+</span> <span class="insertion">last += int(step)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l164" name="l164">164</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if last &gt;= len(notes):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l165" name="l165">165</a></td><td><pre><span class="insertion">+</span> <span class="insertion">last -= len(notes)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l166" name="l166">166</a></td><td><pre><span class="insertion">+</span> <span class="insertion">scale_notes.append(notes[last])</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l167" name="l167">167</a></td><td><pre><span class="insertion">+</span> <span class="insertion">return scale_notes</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l168" name="l168">168</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l169" name="l169">169</a></td><td><pre><span class="insertion">+</span><span class="insertion">def print_chord():</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l170" name="l170">170</a></td><td><pre><span class="insertion">+</span> <span class="insertion"># todo: finish this</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l171" name="l171">171</a></td><td><pre><span class="insertion">+</span> <span class="insertion">print('◯ ⬤ ')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l172" name="l172">172</a></td><td><pre><span class="insertion">+</span> <span class="insertion">print(''' </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l173" name="l173">173</a></td><td><pre><span class="insertion">+</span><span class="insertion">┌───┬───┬───┬───┬───┐</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l174" name="l174">174</a></td><td><pre><span class="insertion">+</span><span class="insertion">│ │ │ │ │ │</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l175" name="l175">175</a></td><td><pre><span class="insertion">+</span><span class="insertion">├───┼───┼───┼───┼───┤</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l176" name="l176">176</a></td><td><pre><span class="insertion">+</span><span class="insertion">│ │ │ │ │ │</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l177" name="l177">177</a></td><td><pre><span class="insertion">+</span><span class="insertion">├───┼───┼───┼───┼───┤</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l178" name="l178">178</a></td><td><pre><span class="insertion">+</span><span class="insertion">│ │ │ │ │ │</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l179" name="l179">179</a></td><td><pre><span class="insertion">+</span><span class="insertion">├───┼───┼───┼───┼───┤</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l180" name="l180">180</a></td><td><pre><span class="insertion">+</span><span class="insertion">│ │ │ │ │ │</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l181" name="l181">181</a></td><td><pre><span class="insertion">+</span><span class="insertion">├───┼───┼───┼───┼───┤</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l182" name="l182">182</a></td><td><pre><span class="insertion">+</span><span class="insertion">│ │ │ │ │ │</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l183" name="l183">183</a></td><td><pre><span class="insertion">+</span><span class="insertion">└───┴───┴───┴───┴───┘</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l184" name="l184">184</a></td><td><pre><span class="insertion">+</span><span class="insertion">E A D G B e''')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l185" name="l185">185</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l186" name="l186">186</a></td><td><pre><span class="insertion">+</span><span class="insertion">def print_circle_of_fifths():</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l187" name="l187">187</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'''</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l188" name="l188">188</a></td><td><pre><span class="insertion">+</span> <span class="insertion">definition:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l189" name="l189">189</a></td><td><pre><span class="insertion">+</span> <span class="insertion">the relationship among the 12 tones of the chromatic scale, their corresponding key signatures, &amp; the associated major/minor keys</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l190" name="l190">190</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l191" name="l191">191</a></td><td><pre><span class="insertion">+</span> <span class="insertion">accidentals:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l192" name="l192">192</a></td><td><pre><span class="insertion">+</span> <span class="insertion">sharps - F, C, G, D, A, E, B</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l193" name="l193">193</a></td><td><pre><span class="insertion">+</span> <span class="insertion">flats - B, E, A, D, G, C, F</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l194" name="l194">194</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l195" name="l195">195</a></td><td><pre><span class="insertion">+</span> <span class="insertion">intervals:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l196" name="l196">196</a></td><td><pre><span class="insertion">+</span> <span class="insertion">unison</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l197" name="l197">197</a></td><td><pre><span class="insertion">+</span> <span class="insertion">perfect fifth</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l198" name="l198">198</a></td><td><pre><span class="insertion">+</span> <span class="insertion">major sencond</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l199" name="l199">199</a></td><td><pre><span class="insertion">+</span> <span class="insertion">major sixth</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l200" name="l200">200</a></td><td><pre><span class="insertion">+</span> <span class="insertion">major third</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l201" name="l201">201</a></td><td><pre><span class="insertion">+</span> <span class="insertion">major seventh</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l202" name="l202">202</a></td><td><pre><span class="insertion">+</span> <span class="insertion">augmented fourth</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l203" name="l203">203</a></td><td><pre><span class="insertion">+</span> <span class="insertion">minor second</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l204" name="l204">204</a></td><td><pre><span class="insertion">+</span> <span class="insertion">minor sixth</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l205" name="l205">205</a></td><td><pre><span class="insertion">+</span> <span class="insertion">minor third</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l206" name="l206">206</a></td><td><pre><span class="insertion">+</span> <span class="insertion">minor seventh</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l207" name="l207">207</a></td><td><pre><span class="insertion">+</span> <span class="insertion">perfect fourth</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l208" name="l208">208</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'''</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l209" name="l209">209</a></td><td><pre><span class="insertion">+</span> <span class="insertion">circle = constants.circle.replace('\n',' \n') + ' ' # todo: fix this</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l210" name="l210">210</a></td><td><pre><span class="insertion">+</span> <span class="insertion">for note in ('major','C','F','B♭','E♭','A♭','D♭','C♯','G♭/F♯','B','C♭','E','A','D','G'): # todo: reverse</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l211" name="l211">211</a></td><td><pre><span class="insertion">+</span> <span class="insertion">circle = circle.replace(f' {note} ', f' \033[91m{note}\033[0m ')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l212" name="l212">212</a></td><td><pre><span class="insertion">+</span> <span class="insertion">for item in ('♮','1♭','2♭','3♭','4♭','5♭/7♯','6♭/6♯','7♭/5♯','4','3♯','2♯','1♯'):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l213" name="l213">213</a></td><td><pre><span class="insertion">+</span> <span class="insertion">circle = circle.replace(f' {item} ', f' \033[90m{item}\033[0m ')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l214" name="l214">214</a></td><td><pre><span class="insertion">+</span> <span class="insertion">for note in ('minor','a','d','g','c','f','b♭','e♭/d♯','g♯','c♯','f♯','b','c'):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l215" name="l215">215</a></td><td><pre><span class="insertion">+</span> <span class="insertion">circle = circle.replace(f' {note} ', f' \033[92m{note}\033[0m ')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l216" name="l216">216</a></td><td><pre><span class="insertion">+</span> <span class="insertion">print(circle)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l217" name="l217">217</a></td><td><pre><span class="insertion">+</span> <span class="insertion">#print(print_circle_of_fifths.__doc__)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l218" name="l218">218</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l219" name="l219">219</a></td><td><pre><span class="insertion">+</span><span class="insertion">def print_intervals():</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l220" name="l220">220</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'''</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l221" name="l221">221</a></td><td><pre><span class="insertion">+</span> <span class="insertion">definition:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l222" name="l222">222</a></td><td><pre><span class="insertion">+</span> <span class="insertion">the distance between two notes or pitches</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l223" name="l223">223</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l224" name="l224">224</a></td><td><pre><span class="insertion">+</span> <span class="insertion">note:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l225" name="l225">225</a></td><td><pre><span class="insertion">+</span> <span class="insertion">semitone - half step</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l226" name="l226">226</a></td><td><pre><span class="insertion">+</span> <span class="insertion">tone - whole step (b to c &amp; e to f is a tone)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l227" name="l227">227</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l228" name="l228">228</a></td><td><pre><span class="insertion">+</span> <span class="insertion">types:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l229" name="l229">229</a></td><td><pre><span class="insertion">+</span> <span class="insertion">harmonic interval - notes played simultaneously</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l230" name="l230">230</a></td><td><pre><span class="insertion">+</span> <span class="insertion">melodic interval - notes played successively</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l231" name="l231">231</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l232" name="l232">232</a></td><td><pre><span class="insertion">+</span> <span class="insertion">makeup:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l233" name="l233">233</a></td><td><pre><span class="insertion">+</span> <span class="insertion">quantity - distance between two notes</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l234" name="l234">234</a></td><td><pre><span class="insertion">+</span> <span class="insertion">quality - number of semitones between notes</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l235" name="l235">235</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l236" name="l236">236</a></td><td><pre><span class="insertion">+</span> <span class="insertion">qualities:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l237" name="l237">237</a></td><td><pre><span class="insertion">+</span> <span class="insertion">major/minor - 2nds, 3rds, 6ths, 7ths</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l238" name="l238">238</a></td><td><pre><span class="insertion">+</span> <span class="insertion">perfect - 4ths, 5ths, octaves</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l239" name="l239">239</a></td><td><pre><span class="insertion">+</span> <span class="insertion">diminished - minor/perfect - 1 semitone</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l240" name="l240">240</a></td><td><pre><span class="insertion">+</span> <span class="insertion">augmented - major/perfect + 1 semitone</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l241" name="l241">241</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'''</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l242" name="l242">242</a></td><td><pre><span class="insertion">+</span> <span class="insertion">print(' I N T E R V A L S ')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l243" name="l243">243</a></td><td><pre><span class="insertion">+</span> <span class="insertion">print('┌───────────┬──────────────────┬───────┐')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l244" name="l244">244</a></td><td><pre><span class="insertion">+</span> <span class="insertion">print('│ semitones │ quality │ short │')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l245" name="l245">245</a></td><td><pre><span class="insertion">+</span> <span class="insertion">print('├───────────┼──────────────────┼───────┤')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l246" name="l246">246</a></td><td><pre><span class="insertion">+</span> <span class="insertion">for interval, info in constants.intervals.items():</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l247" name="l247">247</a></td><td><pre><span class="insertion">+</span> <span class="insertion">print('│ {0} │ {1} │ {2} │'.format(str(info['semitones']).rjust(9), interval.ljust(16), info['short_name'].ljust(5)))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l248" name="l248">248</a></td><td><pre><span class="insertion">+</span> <span class="insertion">print('└───────────┴──────────────────┴───────┘')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l249" name="l249">249</a></td><td><pre><span class="insertion">+</span> <span class="insertion">#print(print_intervals.__doc__)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l250" name="l250">250</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l251" name="l251">251</a></td><td><pre><span class="insertion">+</span><span class="insertion">def print_scale(root, type, full=False):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l252" name="l252">252</a></td><td><pre><span class="insertion">+</span> <span class="insertion">frets = (24,147) if full else (12,75)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l253" name="l253">253</a></td><td><pre><span class="insertion">+</span> <span class="insertion">print(f'{root.upper()} {type.upper()} SCALE'.center(frets[1]))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l254" name="l254">254</a></td><td><pre><span class="insertion">+</span> <span class="insertion">print(' ┌' + '┬'.join('─'*5 for x in range(frets[0])) + '┐')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l255" name="l255">255</a></td><td><pre><span class="insertion">+</span> <span class="insertion">print('0 │' + '│'.join(str(x).center(5) for x in range(1,frets[0]+1)) + '│')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l256" name="l256">256</a></td><td><pre><span class="insertion">+</span> <span class="insertion">print(' ├' + '┼'.join('─'*5 for x in range(frets[0])) + '┤')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l257" name="l257">257</a></td><td><pre><span class="insertion">+</span> <span class="insertion">scale_notes = scale(type, root)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l258" name="l258">258</a></td><td><pre><span class="insertion">+</span> <span class="insertion">for string in ('eBGDAE'):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l259" name="l259">259</a></td><td><pre><span class="insertion">+</span> <span class="insertion">string_notes = generate_scale(string, scale_notes, full)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l260" name="l260">260</a></td><td><pre><span class="insertion">+</span> <span class="insertion">print(string + ' │' + '│'.join(note.center(5, '-') for note in string_notes[1:]) + '│')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l261" name="l261">261</a></td><td><pre><span class="insertion">+</span> <span class="insertion">print(' └' + '┴'.join('─'*5 for x in range(frets[0])) + '┘')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l262" name="l262">262</a></td><td><pre><span class="insertion">+</span> <span class="insertion">print((', '.join(scale_notes) + ' / ' + get_pattern(scales[type])).rjust(frets[1]))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l263" name="l263">263</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l264" name="l264">264</a></td><td><pre><span class="insertion">+</span><span class="insertion">def print_scales():</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l265" name="l265">265</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'''</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l266" name="l266">266</a></td><td><pre><span class="insertion">+</span> <span class="insertion">definition:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l267" name="l267">267</a></td><td><pre><span class="insertion">+</span> <span class="insertion">any set of musical notes ordered by fundamental frequency or pitch</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l268" name="l268">268</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l269" name="l269">269</a></td><td><pre><span class="insertion">+</span> <span class="insertion">note:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l270" name="l270">270</a></td><td><pre><span class="insertion">+</span> <span class="insertion">1 - half step</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l271" name="l271">271</a></td><td><pre><span class="insertion">+</span> <span class="insertion">2 - whole step</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l272" name="l272">272</a></td><td><pre><span class="insertion">+</span> <span class="insertion">3 - whole step half step'''</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l273" name="l273">273</a></td><td><pre><span class="insertion">+</span> <span class="insertion">print(' S C A L E S ')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l274" name="l274">274</a></td><td><pre><span class="insertion">+</span> <span class="insertion">print('┌───────────────────────┬─────────────────┐')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l275" name="l275">275</a></td><td><pre><span class="insertion">+</span> <span class="insertion">print('│ name │ intervals │')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l276" name="l276">276</a></td><td><pre><span class="insertion">+</span> <span class="insertion">print('├───────────────────────┼─────────────────┤')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l277" name="l277">277</a></td><td><pre><span class="insertion">+</span> <span class="insertion">for name, pattern in constants.scales.items():</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l278" name="l278">278</a></td><td><pre><span class="insertion">+</span> <span class="insertion">print(f'│ {name.ljust(21)} │ {get_pattern(pattern).rjust(15)} │')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l279" name="l279">279</a></td><td><pre><span class="insertion">+</span> <span class="insertion">print('└───────────────────────┴─────────────────┘')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l280" name="l280">280</a></td><td><pre><span class="insertion">+</span> <span class="insertion">#print(print_scales.__doc__)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l281" name="l281">281</a></td><td><pre><span class="bold">diff --git a/mzk/main.py b/mzk/main.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l282" name="l282">282</a></td><td><pre><span class="bold">new file mode 100644</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l283" name="l283">283</a></td><td><pre><span class="bold">index 0000000..ab013d2</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l284" name="l284">284</a></td><td><pre><span class="bold">--- /dev/null</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l285" name="l285">285</a></td><td><pre><span class="bold">+++ b/mzk/main.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l286" name="l286">286</a></td><td><pre><span class="hunk">@@ -0,0 +1,6 @@</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l287" name="l287">287</a></td><td><pre><span class="insertion">+</span><span class="insertion">#!/usr/bin/env python</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l288" name="l288">288</a></td><td><pre><span class="insertion">+</span><span class="insertion"># mzk music theory helper - developed by acidvegas in python (https://acid.vegas/mzk)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l289" name="l289">289</a></td><td><pre><span class="insertion">+</span><span class="insertion"># main.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l290" name="l290">290</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l291" name="l291">291</a></td><td><pre><span class="insertion">+</span><span class="insertion">import argparser</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l292" name="l292">292</a></td><td><pre><span class="insertion">+</span><span class="insertion">import sys</span></pre></td></tr>
</table>
<div id="footer">site generated by <a href="https://github.com/acidvegas/stagit" target="_blank">stagit</a> on <a href="#">05/03/20</a></div>

View File

@ -1,37 +0,0 @@
<!doctype html>
<link rel="stylesheet" href="../../style.css">
<title>mzk :: 244878c</title>
<h1><a href="../index.html" title="Back to Repository">&larr;&#xFE0E;</a> mzk :: 244878c</h1>
<hr>
<table id="main" cellpadding="0" cellspacing="0">
<tr class="item"><td class="linenumber"><a href="#l1" name="l1">1</a></td><td><pre><span class="commit">commit 244878ca40eb979982edba15b486899f820d8837</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l2" name="l2">2</a></td><td><pre>Author: acidvegas &lt;acid.vegas@acid.vegas&gt;</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l3" name="l3">3</a></td><td><pre>Date: Thu Jul 25 01:01:24 2019 -0400</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l4" name="l4">4</a></td><td><pre></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l5" name="l5">5</a></td><td><pre> added todos</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l6" name="l6">6</a></td><td><pre>---</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l7" name="l7">7</a></td><td><pre> README.md | 10 <span class="insertion">++++++++</span><span class="deletion">--</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l8" name="l8">8</a></td><td><pre> 1 file changed, 8 insertions(+), 2 deletions(-)</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l9" name="l9">9</a></td><td><pre></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l10" name="l10">10</a></td><td><pre><span class="bold">diff --git a/README.md b/README.md</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l11" name="l11">11</a></td><td><pre><span class="bold">index 2314d4d..e59e62a 100644</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l12" name="l12">12</a></td><td><pre><span class="bold">--- a/README.md</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l13" name="l13">13</a></td><td><pre><span class="bold">+++ b/README.md</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l14" name="l14">14</a></td><td><pre><span class="hunk">@@ -5,7 +5,13 @@</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l15" name="l15">15</a></td><td><pre> ![](screens/intervals_scales.png)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l16" name="l16">16</a></td><td><pre> ![](screens/scale.png)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l17" name="l17">17</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l18" name="l18">18</a></td><td><pre><span class="deletion">-# Information</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l19" name="l19">19</a></td><td><pre><span class="insertion">+</span><span class="insertion">## Information</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l20" name="l20">20</a></td><td><pre> This repository originally started off as a means of using Python to learn music theory, specifcally guitar theory, since the basis of musical sound can be described mathematically *(in acoustics)* and exhibits a remarkable array of number properties.</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l21" name="l21">21</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l22" name="l22">22</a></td><td><pre><span class="deletion">-It is still a work in progress, so some functions and features may not work as excepted or at all. Would love some collaboration on this project!</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l23" name="l23">23</a></td><td><pre><span class="insertion">+</span><span class="insertion">It is still a work in progress, so some functions and features may not work as excepted or at all. Would love some collaboration on this project!</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l24" name="l24">24</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l25" name="l25">25</a></td><td><pre><span class="insertion">+</span><span class="insertion">## Todo</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l26" name="l26">26</a></td><td><pre><span class="insertion">+</span><span class="insertion">* Dynamic table sizing based on item/key lengths</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l27" name="l27">27</a></td><td><pre><span class="insertion">+</span><span class="insertion">* Finish chord generation</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l28" name="l28">28</a></td><td><pre><span class="insertion">+</span><span class="insertion">* Color support for windows</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l29" name="l29">29</a></td><td><pre><span class="insertion">+</span><span class="insertion">* Scale/chord ASCII coloring</span></pre></td></tr>
</table>
<div id="footer">site generated by <a href="https://github.com/acidvegas/stagit" target="_blank">stagit</a> on <a href="#">05/03/20</a></div>

View File

@ -1,55 +0,0 @@
<!doctype html>
<link rel="stylesheet" href="../../style.css">
<title>mzk :: 37b724d</title>
<h1><a href="../index.html" title="Back to Repository">&larr;&#xFE0E;</a> mzk :: 37b724d</h1>
<hr>
<table id="main" cellpadding="0" cellspacing="0">
<tr class="item"><td class="linenumber"><a href="#l1" name="l1">1</a></td><td><pre><span class="commit">commit 37b724d1dc18b28310b0a63875657f70d9a22c44</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l2" name="l2">2</a></td><td><pre>Author: acidvegas &lt;acid.vegas@acid.vegas&gt;</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l3" name="l3">3</a></td><td><pre>Date: Sat Jul 13 23:27:47 2019 -0400</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l4" name="l4">4</a></td><td><pre></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l5" name="l5">5</a></td><td><pre> Updated README</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l6" name="l6">6</a></td><td><pre>---</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l7" name="l7">7</a></td><td><pre> README.md | 10 <span class="insertion">++++++++</span><span class="deletion">--</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l8" name="l8">8</a></td><td><pre> mzk/__pycache__/constants.cpython-37.pyc | Bin <span class="deletion">0</span> -&gt; <span class="insertion">2215</span> bytes</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l9" name="l9">9</a></td><td><pre> screens/circle.png | Bin <span class="deletion">0</span> -&gt; <span class="insertion">89664</span> bytes</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l10" name="l10">10</a></td><td><pre> screens/intervals_scales.png | Bin <span class="deletion">0</span> -&gt; <span class="insertion">172551</span> bytes</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l11" name="l11">11</a></td><td><pre> screens/scale.png | Bin <span class="deletion">0</span> -&gt; <span class="insertion">46742</span> bytes</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l12" name="l12">12</a></td><td><pre> 5 files changed, 8 insertions(+), 2 deletions(-)</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l13" name="l13">13</a></td><td><pre></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l14" name="l14">14</a></td><td><pre><span class="bold">diff --git a/README.md b/README.md</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l15" name="l15">15</a></td><td><pre><span class="bold">index a0bb1c1..2314d4d 100644</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l16" name="l16">16</a></td><td><pre><span class="bold">--- a/README.md</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l17" name="l17">17</a></td><td><pre><span class="bold">+++ b/README.md</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l18" name="l18">18</a></td><td><pre><span class="hunk">@@ -1,5 +1,11 @@</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l19" name="l19">19</a></td><td><pre> # mzk</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l20" name="l20">20</a></td><td><pre> &gt; music theory helper</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l21" name="l21">21</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l22" name="l22">22</a></td><td><pre><span class="deletion">-###### Information</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l23" name="l23">23</a></td><td><pre><span class="deletion">-This repository is a work in progress</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l24" name="l24">24</a></td><td><pre><span class="insertion">+</span><span class="insertion">![](screens/circle.png)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l25" name="l25">25</a></td><td><pre><span class="insertion">+</span><span class="insertion">![](screens/intervals_scales.png)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l26" name="l26">26</a></td><td><pre><span class="insertion">+</span><span class="insertion">![](screens/scale.png)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l27" name="l27">27</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l28" name="l28">28</a></td><td><pre><span class="insertion">+</span><span class="insertion"># Information</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l29" name="l29">29</a></td><td><pre><span class="insertion">+</span><span class="insertion">This repository originally started off as a means of using Python to learn music theory, specifcally guitar theory, since the basis of musical sound can be described mathematically *(in acoustics)* and exhibits a remarkable array of number properties.</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l30" name="l30">30</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l31" name="l31">31</a></td><td><pre><span class="insertion">+</span><span class="insertion">It is still a work in progress, so some functions and features may not work as excepted or at all. Would love some collaboration on this project!</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l32" name="l32">32</a></td><td><pre><span class="bold">diff --git a/mzk/__pycache__/constants.cpython-37.pyc b/mzk/__pycache__/constants.cpython-37.pyc</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l33" name="l33">33</a></td><td><pre><span class="bold">new file mode 100644</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l34" name="l34">34</a></td><td><pre><span class="bold">index 0000000..e081a07</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l35" name="l35">35</a></td><td><pre>Binary files /dev/null and b/mzk/__pycache__/constants.cpython-37.pyc differ</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l36" name="l36">36</a></td><td><pre><span class="bold">diff --git a/screens/circle.png b/screens/circle.png</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l37" name="l37">37</a></td><td><pre><span class="bold">new file mode 100644</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l38" name="l38">38</a></td><td><pre><span class="bold">index 0000000..f2a2871</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l39" name="l39">39</a></td><td><pre>Binary files /dev/null and b/screens/circle.png differ</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l40" name="l40">40</a></td><td><pre><span class="bold">diff --git a/screens/intervals_scales.png b/screens/intervals_scales.png</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l41" name="l41">41</a></td><td><pre><span class="bold">new file mode 100644</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l42" name="l42">42</a></td><td><pre><span class="bold">index 0000000..fe28e28</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l43" name="l43">43</a></td><td><pre>Binary files /dev/null and b/screens/intervals_scales.png differ</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l44" name="l44">44</a></td><td><pre><span class="bold">diff --git a/screens/scale.png b/screens/scale.png</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l45" name="l45">45</a></td><td><pre><span class="bold">new file mode 100644</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l46" name="l46">46</a></td><td><pre><span class="bold">index 0000000..99f2cdb</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l47" name="l47">47</a></td><td><pre>Binary files /dev/null and b/screens/scale.png differ</pre></td></tr>
</table>
<div id="footer">site generated by <a href="https://github.com/acidvegas/stagit" target="_blank">stagit</a> on <a href="#">05/03/20</a></div>

View File

@ -1,30 +0,0 @@
<!doctype html>
<link rel="stylesheet" href="../../style.css">
<title>mzk :: 47e74cd</title>
<h1><a href="../index.html" title="Back to Repository">&larr;&#xFE0E;</a> mzk :: 47e74cd</h1>
<hr>
<table id="main" cellpadding="0" cellspacing="0">
<tr class="item"><td class="linenumber"><a href="#l1" name="l1">1</a></td><td><pre><span class="commit">commit 47e74cd31f9179f4f3207097338838eca89fe5c7</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l2" name="l2">2</a></td><td><pre>Author: acidvegas &lt;acid.vegas@acid.vegas&gt;</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l3" name="l3">3</a></td><td><pre>Date: Thu Jul 25 02:12:59 2019 -0400</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l4" name="l4">4</a></td><td><pre></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l5" name="l5">5</a></td><td><pre> fixed help function name</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l6" name="l6">6</a></td><td><pre>---</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l7" name="l7">7</a></td><td><pre> mzk/functions.py | 2 <span class="insertion">+</span><span class="deletion">-</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l8" name="l8">8</a></td><td><pre> 1 file changed, 1 insertion(+), 1 deletion(-)</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l9" name="l9">9</a></td><td><pre></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l10" name="l10">10</a></td><td><pre><span class="bold">diff --git a/mzk/functions.py b/mzk/functions.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l11" name="l11">11</a></td><td><pre><span class="bold">index 3ac50bf..344f42e 100644</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l12" name="l12">12</a></td><td><pre><span class="bold">--- a/mzk/functions.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l13" name="l13">13</a></td><td><pre><span class="bold">+++ b/mzk/functions.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l14" name="l14">14</a></td><td><pre><span class="hunk">@@ -87,7 +87,7 @@</span> </span>def print_circle_of_fifths():</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l15" name="l15">15</a></td><td><pre> print(circle)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l16" name="l16">16</a></td><td><pre> print(print_circle_of_fifths.__doc__)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l17" name="l17">17</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l18" name="l18">18</a></td><td><pre><span class="deletion">-def help():</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l19" name="l19">19</a></td><td><pre><span class="insertion">+</span><span class="insertion">def print_help():</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l20" name="l20">20</a></td><td><pre> print('usage: python mzk.py [OPTIONS]')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l21" name="l21">21</a></td><td><pre> print('\noptions:')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l22" name="l22">22</a></td><td><pre> print('--chord=KEY_TYPE │ print a TYPE chord in the key of KEY')</span></pre></td></tr>
</table>
<div id="footer">site generated by <a href="https://github.com/acidvegas/stagit" target="_blank">stagit</a> on <a href="#">05/03/20</a></div>

View File

@ -1,61 +0,0 @@
<!doctype html>
<link rel="stylesheet" href="../../style.css">
<title>mzk :: 60160fb</title>
<h1><a href="../index.html" title="Back to Repository">&larr;&#xFE0E;</a> mzk :: 60160fb</h1>
<hr>
<table id="main" cellpadding="0" cellspacing="0">
<tr class="item"><td class="linenumber"><a href="#l1" name="l1">1</a></td><td><pre><span class="commit">commit 60160fbb00f7dbcb34a3b17d6152a9957e77d069</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l2" name="l2">2</a></td><td><pre>Author: acidvegas &lt;acid.vegas@acid.vegas&gt;</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l3" name="l3">3</a></td><td><pre>Date: Thu Jul 25 01:06:44 2019 -0400</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l4" name="l4">4</a></td><td><pre></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l5" name="l5">5</a></td><td><pre> updated intervals with tritone</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l6" name="l6">6</a></td><td><pre>---</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l7" name="l7">7</a></td><td><pre> mzk/constants.py | 31 <span class="insertion">+++++++++++++++</span><span class="deletion">----------------</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l8" name="l8">8</a></td><td><pre> 1 file changed, 15 insertions(+), 16 deletions(-)</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l9" name="l9">9</a></td><td><pre></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l10" name="l10">10</a></td><td><pre><span class="bold">diff --git a/mzk/constants.py b/mzk/constants.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l11" name="l11">11</a></td><td><pre><span class="bold">index 670489d..05d59f2 100644</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l12" name="l12">12</a></td><td><pre><span class="bold">--- a/mzk/constants.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l13" name="l13">13</a></td><td><pre><span class="bold">+++ b/mzk/constants.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l14" name="l14">14</a></td><td><pre><span class="hunk">@@ -35,24 +35,23 @@</span> </span>colors = {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l15" name="l15">15</a></td><td><pre> }</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l16" name="l16">16</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l17" name="l17">17</a></td><td><pre> intervals = {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l18" name="l18">18</a></td><td><pre><span class="deletion">- 'unison' : {'semitones':0, 'short_name':'P1' },</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l19" name="l19">19</a></td><td><pre><span class="deletion">- 'minor_second' : {'semitones':1, 'short_name':'m2' },</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l20" name="l20">20</a></td><td><pre><span class="deletion">- 'major_second' : {'semitones':2, 'short_name':'M2' },</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l21" name="l21">21</a></td><td><pre><span class="deletion">- 'minor_third' : {'semitones':3, 'short_name':'m3' },</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l22" name="l22">22</a></td><td><pre><span class="deletion">- 'major_third' : {'semitones':4, 'short_name':'M3' },</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l23" name="l23">23</a></td><td><pre><span class="deletion">- 'perfect_fourth' : {'semitones':5, 'short_name':'P4' },</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l24" name="l24">24</a></td><td><pre><span class="deletion">- 'augmented_fourth' : {'semitones':6, 'short_name':'+4' },</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l25" name="l25">25</a></td><td><pre><span class="deletion">- 'diminished_fifth' : {'semitones':6, 'short_name':'d5' },</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l26" name="l26">26</a></td><td><pre><span class="deletion">- 'perfect_fifth' : {'semitones':7, 'short_name':'P5' },</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l27" name="l27">27</a></td><td><pre><span class="deletion">- 'minor_sixth' : {'semitones':8, 'short_name':'m6' },</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l28" name="l28">28</a></td><td><pre><span class="deletion">- 'major_sixth' : {'semitones':9, 'short_name':'M6' },</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l29" name="l29">29</a></td><td><pre><span class="deletion">- 'minor_seventh' : {'semitones':10, 'short_name':'m7' },</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l30" name="l30">30</a></td><td><pre><span class="deletion">- 'major_seventh' : {'semitones':11, 'short_name':'M7' },</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l31" name="l31">31</a></td><td><pre><span class="deletion">- 'perfect_octave' : {'semitones':12, 'short_name':'8va'}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l32" name="l32">32</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'perfect_unison' : {'semitones':0, 'short_name':'P1'},</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l33" name="l33">33</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'minor_second' : {'semitones':1, 'short_name':'m2'},</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l34" name="l34">34</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'major_second' : {'semitones':2, 'short_name':'M2'},</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l35" name="l35">35</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'minor_third' : {'semitones':3, 'short_name':'m3'},</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l36" name="l36">36</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'major_third' : {'semitones':4, 'short_name':'M3'},</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l37" name="l37">37</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'perfect_fourth' : {'semitones':5, 'short_name':'P4'},</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l38" name="l38">38</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'tritone' : {'semitones':6, 'short_name':'TT'}, # diminished fifth / augmented fourt</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l39" name="l39">39</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'perfect_fifth' : {'semitones':7, 'short_name':'P5'},</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l40" name="l40">40</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'minor_sixth' : {'semitones':8, 'short_name':'m6'},</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l41" name="l41">41</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'major_sixth' : {'semitones':9, 'short_name':'M6'},</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l42" name="l42">42</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'minor_seventh' : {'semitones':10, 'short_name':'m7'},</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l43" name="l43">43</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'major_seventh' : {'semitones':11, 'short_name':'M7'},</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l44" name="l44">44</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'perfect_octave' : {'semitones':12, 'short_name':'P8'}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l45" name="l45">45</a></td><td><pre> }</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l46" name="l46">46</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l47" name="l47">47</a></td><td><pre><span class="deletion">-notes = ('A', 'A#', 'B', 'C', 'C#', 'D', 'D#', 'E', 'F', 'F#', 'G', 'G#' )</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l48" name="l48">48</a></td><td><pre><span class="deletion">-numerals = ('I', 'II', 'III', 'IV', 'V', 'VI', 'VII', 'VIII', 'IX', 'X', 'XI', 'XII' )</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l49" name="l49">49</a></td><td><pre><span class="insertion">+</span><span class="insertion">notes = ('A', 'A#', 'B', 'C', 'C#', 'D', 'D#', 'E', 'F', 'F#', 'G', 'G#')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l50" name="l50">50</a></td><td><pre><span class="insertion">+</span><span class="insertion">numerals = ('I', 'II', 'III', 'IV', 'V', 'VI', 'VII', 'VIII', 'IX', 'X', 'XI', 'XII')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l51" name="l51">51</a></td><td><pre> scale_degrees = ('tonic','supertonic','mediant','subdominant','dominant''submediant','subtonic')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l52" name="l52">52</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l53" name="l53">53</a></td><td><pre> scales = {</span></pre></td></tr>
</table>
<div id="footer">site generated by <a href="https://github.com/acidvegas/stagit" target="_blank">stagit</a> on <a href="#">05/03/20</a></div>

View File

@ -1,30 +0,0 @@
<!doctype html>
<link rel="stylesheet" href="../../style.css">
<title>mzk :: 99519b0</title>
<h1><a href="../index.html" title="Back to Repository">&larr;&#xFE0E;</a> mzk :: 99519b0</h1>
<hr>
<table id="main" cellpadding="0" cellspacing="0">
<tr class="item"><td class="linenumber"><a href="#l1" name="l1">1</a></td><td><pre><span class="commit">commit 99519b0d9ea070ec90d0af69e80cd4a8cbac7d20</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l2" name="l2">2</a></td><td><pre>Author: acidvegas &lt;acid.vegas@acid.vegas&gt;</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l3" name="l3">3</a></td><td><pre>Date: Thu Jul 25 02:35:55 2019 -0400</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l4" name="l4">4</a></td><td><pre></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l5" name="l5">5</a></td><td><pre> fixed double octave type</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l6" name="l6">6</a></td><td><pre>---</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l7" name="l7">7</a></td><td><pre> mzk/constants.py | 2 <span class="insertion">+</span><span class="deletion">-</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l8" name="l8">8</a></td><td><pre> 1 file changed, 1 insertion(+), 1 deletion(-)</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l9" name="l9">9</a></td><td><pre></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l10" name="l10">10</a></td><td><pre><span class="bold">diff --git a/mzk/constants.py b/mzk/constants.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l11" name="l11">11</a></td><td><pre><span class="bold">index 18dc1b0..5a418db 100644</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l12" name="l12">12</a></td><td><pre><span class="bold">--- a/mzk/constants.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l13" name="l13">13</a></td><td><pre><span class="bold">+++ b/mzk/constants.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l14" name="l14">14</a></td><td><pre><span class="hunk">@@ -46,7 +46,7 @@</span> </span>compound_intervals = {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l15" name="l15">15</a></td><td><pre> 'major_thirteenth' : {'semitones':21, 'short_name':'M13'},</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l16" name="l16">16</a></td><td><pre> 'minor_fourteenth' : {'semitones':22, 'short_name':'m14'},</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l17" name="l17">17</a></td><td><pre> 'major_fourteenth' : {'semitones':23, 'short_name':'M14'},</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l18" name="l18">18</a></td><td><pre><span class="deletion">- 'double_octave' : {'semitones':25, 'short_name':'15ma'}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l19" name="l19">19</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'double_octave' : {'semitones':24, 'short_name':'15ma'}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l20" name="l20">20</a></td><td><pre> }</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l21" name="l21">21</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l22" name="l22">22</a></td><td><pre> intervals = {</span></pre></td></tr>
</table>
<div id="footer">site generated by <a href="https://github.com/acidvegas/stagit" target="_blank">stagit</a> on <a href="#">05/03/20</a></div>

View File

@ -1,128 +0,0 @@
<!doctype html>
<link rel="stylesheet" href="../../style.css">
<title>mzk :: a4bccd7</title>
<h1><a href="../index.html" title="Back to Repository">&larr;&#xFE0E;</a> mzk :: a4bccd7</h1>
<hr>
<table id="main" cellpadding="0" cellspacing="0">
<tr class="item"><td class="linenumber"><a href="#l1" name="l1">1</a></td><td><pre><span class="commit">commit a4bccd73624babb4682e5dfa278894dd8c7c92f3</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l2" name="l2">2</a></td><td><pre>Author: acidvegas &lt;acid.vegas@acid.vegas&gt;</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l3" name="l3">3</a></td><td><pre>Date: Thu Jul 25 00:58:26 2019 -0400</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l4" name="l4">4</a></td><td><pre></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l5" name="l5">5</a></td><td><pre> fixed docstring whitepace</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l6" name="l6">6</a></td><td><pre>---</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l7" name="l7">7</a></td><td><pre> mzk/functions.py | 35 <span class="insertion">++++++++++++++++</span><span class="deletion">-------------------</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l8" name="l8">8</a></td><td><pre> 1 file changed, 16 insertions(+), 19 deletions(-)</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l9" name="l9">9</a></td><td><pre></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l10" name="l10">10</a></td><td><pre><span class="bold">diff --git a/mzk/functions.py b/mzk/functions.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l11" name="l11">11</a></td><td><pre><span class="bold">index b3cf09a..1c8db9e 100644</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l12" name="l12">12</a></td><td><pre><span class="bold">--- a/mzk/functions.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l13" name="l13">13</a></td><td><pre><span class="bold">+++ b/mzk/functions.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l14" name="l14">14</a></td><td><pre><span class="hunk">@@ -12,7 +12,7 @@</span> </span>def generate_notes(key):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l15" name="l15">15</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l16" name="l16">16</a></td><td><pre> def generate_scale(string, scale_notes, full=False):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l17" name="l17">17</a></td><td><pre> notes = generate_notes(string.upper())*2 if full else generate_notes(string.upper())</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l18" name="l18">18</a></td><td><pre><span class="deletion">- notes.append(notes[0]) # add root note to the end</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l19" name="l19">19</a></td><td><pre><span class="insertion">+</span> <span class="insertion">notes.append(notes[0])</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l20" name="l20">20</a></td><td><pre> for index,note in enumerate(notes):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l21" name="l21">21</a></td><td><pre> if note in scale_notes:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l22" name="l22">22</a></td><td><pre> notes[index] = notes[index].center(5, '-')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l23" name="l23">23</a></td><td><pre><span class="hunk">@@ -32,7 +32,7 @@</span> </span>def scale(type, key):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l24" name="l24">24</a></td><td><pre> last = 0</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l25" name="l25">25</a></td><td><pre> notes = generate_notes(key)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l26" name="l26">26</a></td><td><pre> scale_notes = [notes[0],]</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l27" name="l27">27</a></td><td><pre><span class="deletion">- for step in scales[type]:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l28" name="l28">28</a></td><td><pre><span class="insertion">+</span> <span class="insertion">for step in constants.scales[type]:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l29" name="l29">29</a></td><td><pre> last += int(step)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l30" name="l30">30</a></td><td><pre> if last &gt;= len(notes):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l31" name="l31">31</a></td><td><pre> last -= len(notes)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l32" name="l32">32</a></td><td><pre><span class="hunk">@@ -57,8 +57,7 @@</span> </span>def print_chord():</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l33" name="l33">33</a></td><td><pre> E A D G B e''')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l34" name="l34">34</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l35" name="l35">35</a></td><td><pre> def print_circle_of_fifths():</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l36" name="l36">36</a></td><td><pre><span class="deletion">- '''</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l37" name="l37">37</a></td><td><pre><span class="deletion">- definition:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l38" name="l38">38</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'''definition:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l39" name="l39">39</a></td><td><pre> the relationship among the 12 tones of the chromatic scale, their corresponding key signatures, &amp; the associated major/minor keys</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l40" name="l40">40</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l41" name="l41">41</a></td><td><pre> accidentals:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l42" name="l42">42</a></td><td><pre><span class="hunk">@@ -77,8 +76,7 @@</span> </span>def print_circle_of_fifths():</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l43" name="l43">43</a></td><td><pre> minor sixth</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l44" name="l44">44</a></td><td><pre> minor third</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l45" name="l45">45</a></td><td><pre> minor seventh</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l46" name="l46">46</a></td><td><pre><span class="deletion">- perfect fourth</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l47" name="l47">47</a></td><td><pre><span class="deletion">- '''</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l48" name="l48">48</a></td><td><pre><span class="insertion">+</span> <span class="insertion">perfect fourth'''</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l49" name="l49">49</a></td><td><pre> circle = constants.circle.replace('\n',' \n') + ' ' # todo: fix this</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l50" name="l50">50</a></td><td><pre> for note in ('major','C','F','B♭','E♭','A♭','D♭','C♯','G♭/F♯','B','C♭','E','A','D','G'): # todo: reverse</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l51" name="l51">51</a></td><td><pre> circle = circle.replace(f' {note} ', f' \033[91m{note}\033[0m ')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l52" name="l52">52</a></td><td><pre><span class="hunk">@@ -87,16 +85,15 @@</span> </span>def print_circle_of_fifths():</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l53" name="l53">53</a></td><td><pre> for note in ('minor','a','d','g','c','f','b♭','e♭/d♯','g♯','c♯','f♯','b','c'):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l54" name="l54">54</a></td><td><pre> circle = circle.replace(f' {note} ', f' \033[92m{note}\033[0m ')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l55" name="l55">55</a></td><td><pre> print(circle)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l56" name="l56">56</a></td><td><pre><span class="deletion">- #print(print_circle_of_fifths.__doc__)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l57" name="l57">57</a></td><td><pre><span class="insertion">+</span> <span class="insertion">print(print_circle_of_fifths.__doc__)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l58" name="l58">58</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l59" name="l59">59</a></td><td><pre> def print_intervals():</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l60" name="l60">60</a></td><td><pre><span class="deletion">- '''</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l61" name="l61">61</a></td><td><pre><span class="deletion">- definition:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l62" name="l62">62</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'''definition:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l63" name="l63">63</a></td><td><pre> the distance between two notes or pitches</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l64" name="l64">64</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l65" name="l65">65</a></td><td><pre> note:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l66" name="l66">66</a></td><td><pre><span class="deletion">- semitone - half step</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l67" name="l67">67</a></td><td><pre><span class="deletion">- tone - whole step (b to c &amp; e to f is a tone)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l68" name="l68">68</a></td><td><pre><span class="insertion">+</span> <span class="insertion">semitone - half step (b/c &amp; e/f is a half step)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l69" name="l69">69</a></td><td><pre><span class="insertion">+</span> <span class="insertion">tone - whole step</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l70" name="l70">70</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l71" name="l71">71</a></td><td><pre> types:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l72" name="l72">72</a></td><td><pre> harmonic interval - notes played simultaneously</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l73" name="l73">73</a></td><td><pre><span class="hunk">@@ -110,8 +107,7 @@</span> </span>def print_intervals():</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l74" name="l74">74</a></td><td><pre> major/minor - 2nds, 3rds, 6ths, 7ths</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l75" name="l75">75</a></td><td><pre> perfect - 4ths, 5ths, octaves</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l76" name="l76">76</a></td><td><pre> diminished - minor/perfect - 1 semitone</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l77" name="l77">77</a></td><td><pre><span class="deletion">- augmented - major/perfect + 1 semitone</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l78" name="l78">78</a></td><td><pre><span class="deletion">- '''</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l79" name="l79">79</a></td><td><pre><span class="insertion">+</span> <span class="insertion">augmented - major/perfect + 1 semitone'''</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l80" name="l80">80</a></td><td><pre> print(' I N T E R V A L S ')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l81" name="l81">81</a></td><td><pre> print('┌───────────┬──────────────────┬───────┐')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l82" name="l82">82</a></td><td><pre> print('│ semitones │ quality │ short │')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l83" name="l83">83</a></td><td><pre><span class="hunk">@@ -119,7 +115,7 @@</span> </span>def print_intervals():</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l84" name="l84">84</a></td><td><pre> for interval, info in constants.intervals.items():</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l85" name="l85">85</a></td><td><pre> print('│ {0} │ {1} │ {2} │'.format(str(info['semitones']).rjust(9), interval.ljust(16), info['short_name'].ljust(5)))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l86" name="l86">86</a></td><td><pre> print('└───────────┴──────────────────┴───────┘')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l87" name="l87">87</a></td><td><pre><span class="deletion">- #print(print_intervals.__doc__)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l88" name="l88">88</a></td><td><pre><span class="insertion">+</span> <span class="insertion">print(print_intervals.__doc__)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l89" name="l89">89</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l90" name="l90">90</a></td><td><pre> def print_scale(root, type, full=False):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l91" name="l91">91</a></td><td><pre> frets = (24,147) if full else (12,75)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l92" name="l92">92</a></td><td><pre><span class="hunk">@@ -132,22 +128,23 @@</span> </span>def print_scale(root, type, full=False):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l93" name="l93">93</a></td><td><pre> string_notes = generate_scale(string, scale_notes, full)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l94" name="l94">94</a></td><td><pre> print(string + ' │' + '│'.join(note.center(5, '-') for note in string_notes[1:]) + '│')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l95" name="l95">95</a></td><td><pre> print(' └' + '┴'.join('─'*5 for x in range(frets[0])) + '┘')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l96" name="l96">96</a></td><td><pre><span class="deletion">- print((', '.join(scale_notes) + ' / ' + get_pattern(scales[type])).rjust(frets[1]))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l97" name="l97">97</a></td><td><pre><span class="insertion">+</span> <span class="insertion">print((', '.join(scale_notes) + ' / ' + get_pattern(constants.scales[type])).rjust(frets[1]))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l98" name="l98">98</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l99" name="l99">99</a></td><td><pre> def print_scales():</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l100" name="l100">100</a></td><td><pre><span class="deletion">- '''</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l101" name="l101">101</a></td><td><pre><span class="deletion">- definition:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l102" name="l102">102</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'''definition:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l103" name="l103">103</a></td><td><pre> any set of musical notes ordered by fundamental frequency or pitch</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l104" name="l104">104</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l105" name="l105">105</a></td><td><pre> note:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l106" name="l106">106</a></td><td><pre> 1 - half step</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l107" name="l107">107</a></td><td><pre> 2 - whole step</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l108" name="l108">108</a></td><td><pre> 3 - whole step half step'''</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l109" name="l109">109</a></td><td><pre><span class="deletion">- print(' S C A L E S ')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l110" name="l110">110</a></td><td><pre><span class="insertion">+</span> <span class="insertion">print('S C A L E S'.center(43))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l111" name="l111">111</a></td><td><pre> print('┌───────────────────────┬─────────────────┐')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l112" name="l112">112</a></td><td><pre> print('│ name │ intervals │')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l113" name="l113">113</a></td><td><pre> print('├───────────────────────┼─────────────────┤')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l114" name="l114">114</a></td><td><pre> for name, pattern in constants.scales.items():</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l115" name="l115">115</a></td><td><pre> print(f'│ {name.ljust(21)} │ {get_pattern(pattern).rjust(15)} │')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l116" name="l116">116</a></td><td><pre> print('└───────────────────────┴─────────────────┘')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l117" name="l117">117</a></td><td><pre><span class="deletion">- #print(print_scales.__doc__)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l118" name="l118">118</a></td><td><pre><span class="insertion">+</span> <span class="insertion">print(print_scales.__doc__)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l119" name="l119">119</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l120" name="l120">120</a></td><td><pre><span class="insertion">+</span><span class="insertion">print_scales()</span></pre></td></tr>
</table>
<div id="footer">site generated by <a href="https://github.com/acidvegas/stagit" target="_blank">stagit</a> on <a href="#">05/03/20</a></div>

View File

@ -1,29 +0,0 @@
<!doctype html>
<link rel="stylesheet" href="../../style.css">
<title>mzk :: b2c7601</title>
<h1><a href="../index.html" title="Back to Repository">&larr;&#xFE0E;</a> mzk :: b2c7601</h1>
<hr>
<table id="main" cellpadding="0" cellspacing="0">
<tr class="item"><td class="linenumber"><a href="#l1" name="l1">1</a></td><td><pre><span class="commit">commit b2c76017143b423ccc37a6e5dca1cb57c45a7ddd</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l2" name="l2">2</a></td><td><pre>Author: acidvegas &lt;acid.vegas@acid.vegas&gt;</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l3" name="l3">3</a></td><td><pre>Date: Thu Jul 25 02:11:43 2019 -0400</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l4" name="l4">4</a></td><td><pre></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l5" name="l5">5</a></td><td><pre> fixed</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l6" name="l6">6</a></td><td><pre>---</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l7" name="l7">7</a></td><td><pre> mzk/functions.py | 4 <span class="insertion">+</span><span class="deletion">---</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l8" name="l8">8</a></td><td><pre> 1 file changed, 1 insertion(+), 3 deletions(-)</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l9" name="l9">9</a></td><td><pre></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l10" name="l10">10</a></td><td><pre><span class="bold">diff --git a/mzk/functions.py b/mzk/functions.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l11" name="l11">11</a></td><td><pre><span class="bold">index 4e1e05a..3ac50bf 100644</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l12" name="l12">12</a></td><td><pre><span class="bold">--- a/mzk/functions.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l13" name="l13">13</a></td><td><pre><span class="bold">+++ b/mzk/functions.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l14" name="l14">14</a></td><td><pre><span class="hunk">@@ -155,6 +155,4 @@</span> </span>def print_scales():</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l15" name="l15">15</a></td><td><pre> for name, pattern in constants.scales.items():</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l16" name="l16">16</a></td><td><pre> print(f'│ {name.ljust(21)} │ {get_pattern(pattern).rjust(15)} │')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l17" name="l17">17</a></td><td><pre> print('└───────────────────────┴─────────────────┘')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l18" name="l18">18</a></td><td><pre><span class="deletion">- print(print_scales.__doc__)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l19" name="l19">19</a></td><td><pre><span class="deletion">-</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l20" name="l20">20</a></td><td><pre><span class="deletion">-print_scale('C','major')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l21" name="l21">21</a></td><td><pre><span class="insertion">+</span> <span class="insertion">print(print_scales.__doc__)</span></pre></td></tr>
</table>
<div id="footer">site generated by <a href="https://github.com/acidvegas/stagit" target="_blank">stagit</a> on <a href="#">05/03/20</a></div>

View File

@ -1,64 +0,0 @@
<!doctype html>
<link rel="stylesheet" href="../../style.css">
<title>mzk :: c5f05ae</title>
<h1><a href="../index.html" title="Back to Repository">&larr;&#xFE0E;</a> mzk :: c5f05ae</h1>
<hr>
<table id="main" cellpadding="0" cellspacing="0">
<tr class="item"><td class="linenumber"><a href="#l1" name="l1">1</a></td><td><pre><span class="commit">commit c5f05ae1bc58f5f9dae89d3e698fc955682ce5e6</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l2" name="l2">2</a></td><td><pre>Author: acidvegas &lt;acid.vegas@acid.vegas&gt;</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l3" name="l3">3</a></td><td><pre>Date: Thu Jul 25 02:11:07 2019 -0400</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l4" name="l4">4</a></td><td><pre></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l5" name="l5">5</a></td><td><pre> updated</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l6" name="l6">6</a></td><td><pre>---</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l7" name="l7">7</a></td><td><pre> mzk/functions.py | 24 <span class="insertion">+++++++++++++++++</span><span class="deletion">-------</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l8" name="l8">8</a></td><td><pre> 1 file changed, 17 insertions(+), 7 deletions(-)</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l9" name="l9">9</a></td><td><pre></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l10" name="l10">10</a></td><td><pre><span class="bold">diff --git a/mzk/functions.py b/mzk/functions.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l11" name="l11">11</a></td><td><pre><span class="bold">index 1c8db9e..4e1e05a 100644</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l12" name="l12">12</a></td><td><pre><span class="bold">--- a/mzk/functions.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l13" name="l13">13</a></td><td><pre><span class="bold">+++ b/mzk/functions.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l14" name="l14">14</a></td><td><pre><span class="hunk">@@ -87,6 +87,16 @@</span> </span>def print_circle_of_fifths():</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l15" name="l15">15</a></td><td><pre> print(circle)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l16" name="l16">16</a></td><td><pre> print(print_circle_of_fifths.__doc__)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l17" name="l17">17</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l18" name="l18">18</a></td><td><pre><span class="insertion">+</span><span class="insertion">def help():</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l19" name="l19">19</a></td><td><pre><span class="insertion">+</span> <span class="insertion">print('usage: python mzk.py [OPTIONS]')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l20" name="l20">20</a></td><td><pre><span class="insertion">+</span> <span class="insertion">print('\noptions:')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l21" name="l21">21</a></td><td><pre><span class="insertion">+</span> <span class="insertion">print('--chord=KEY_TYPE │ print a TYPE chord in the key of KEY')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l22" name="l22">22</a></td><td><pre><span class="insertion">+</span> <span class="insertion">print('--circle │ print the circle of fifths')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l23" name="l23">23</a></td><td><pre><span class="insertion">+</span> <span class="insertion">print('--intervals │ print list of intervals')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l24" name="l24">24</a></td><td><pre><span class="insertion">+</span> <span class="insertion">print('--scale=KEY_TYPE │ print a TYPE scale in the key of KEY')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l25" name="l25">25</a></td><td><pre><span class="insertion">+</span> <span class="insertion">print('--scales │ print list of scale types &amp; patterns')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l26" name="l26">26</a></td><td><pre><span class="insertion">+</span> <span class="insertion">print('\nnote: KEY_TYPE must be formatted as such: c_major, f#_mixolydian, etc.')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l27" name="l27">27</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l28" name="l28">28</a></td><td><pre> def print_intervals():</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l29" name="l29">29</a></td><td><pre> '''definition:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l30" name="l30">30</a></td><td><pre> the distance between two notes or pitches</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l31" name="l31">31</a></td><td><pre><span class="hunk">@@ -108,13 +118,13 @@</span> </span>def print_intervals():</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l32" name="l32">32</a></td><td><pre> perfect - 4ths, 5ths, octaves</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l33" name="l33">33</a></td><td><pre> diminished - minor/perfect - 1 semitone</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l34" name="l34">34</a></td><td><pre> augmented - major/perfect + 1 semitone'''</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l35" name="l35">35</a></td><td><pre><span class="deletion">- print(' I N T E R V A L S ')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l36" name="l36">36</a></td><td><pre><span class="deletion">- print('┌───────────┬──────────────────┬───────┐')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l37" name="l37">37</a></td><td><pre><span class="deletion">- print('│ semitones │ quality │ short │')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l38" name="l38">38</a></td><td><pre><span class="deletion">- print('├───────────┼──────────────────┼───────┤')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l39" name="l39">39</a></td><td><pre><span class="insertion">+</span> <span class="insertion">print('I N T E R V A L S'.center(38))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l40" name="l40">40</a></td><td><pre><span class="insertion">+</span> <span class="insertion">print('┌───────────┬────────────────┬───────┐')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l41" name="l41">41</a></td><td><pre><span class="insertion">+</span> <span class="insertion">print('│ semitones │ quality │ short │')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l42" name="l42">42</a></td><td><pre><span class="insertion">+</span> <span class="insertion">print('├───────────┼────────────────┼───────┤')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l43" name="l43">43</a></td><td><pre> for interval, info in constants.intervals.items():</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l44" name="l44">44</a></td><td><pre><span class="deletion">- print('│ {0} │ {1} │ {2} │'.format(str(info['semitones']).rjust(9), interval.ljust(16), info['short_name'].ljust(5)))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l45" name="l45">45</a></td><td><pre><span class="deletion">- print('└───────────┴──────────────────┴───────┘')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l46" name="l46">46</a></td><td><pre><span class="insertion">+</span> <span class="insertion">print('│ {0} │ {1} │ {2} │'.format(str(info['semitones']).rjust(9), interval.ljust(14), info['short_name'].ljust(5)))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l47" name="l47">47</a></td><td><pre><span class="insertion">+</span> <span class="insertion">print('└───────────┴────────────────┴───────┘')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l48" name="l48">48</a></td><td><pre> print(print_intervals.__doc__)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l49" name="l49">49</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l50" name="l50">50</a></td><td><pre> def print_scale(root, type, full=False):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l51" name="l51">51</a></td><td><pre><span class="hunk">@@ -147,4 +157,4 @@</span> </span>def print_scales():</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l52" name="l52">52</a></td><td><pre> print('└───────────────────────┴─────────────────┘')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l53" name="l53">53</a></td><td><pre> print(print_scales.__doc__)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l54" name="l54">54</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l55" name="l55">55</a></td><td><pre><span class="deletion">-print_scales()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l56" name="l56">56</a></td><td><pre><span class="insertion">+</span><span class="insertion">print_scale('C','major')</span></pre></td></tr>
</table>
<div id="footer">site generated by <a href="https://github.com/acidvegas/stagit" target="_blank">stagit</a> on <a href="#">05/03/20</a></div>

View File

@ -1,66 +0,0 @@
<!doctype html>
<link rel="stylesheet" href="../../style.css">
<title>mzk :: cea16c6</title>
<h1><a href="../index.html" title="Back to Repository">&larr;&#xFE0E;</a> mzk :: cea16c6</h1>
<hr>
<table id="main" cellpadding="0" cellspacing="0">
<tr class="item"><td class="linenumber"><a href="#l1" name="l1">1</a></td><td><pre><span class="commit">commit cea16c62d2647e5ecb1440e16bc2701d6d8660d5</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l2" name="l2">2</a></td><td><pre>Author: acidvegas &lt;acid.vegas@acid.vegas&gt;</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l3" name="l3">3</a></td><td><pre>Date: Thu Jul 25 02:10:33 2019 -0400</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l4" name="l4">4</a></td><td><pre></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l5" name="l5">5</a></td><td><pre> added argument parsing to interact with the functions</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l6" name="l6">6</a></td><td><pre>---</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l7" name="l7">7</a></td><td><pre> mzk/main.py | 41 <span class="insertion">+++++++++++++++++++++++++++++++++++++++</span><span class="deletion">--</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l8" name="l8">8</a></td><td><pre> 1 file changed, 39 insertions(+), 2 deletions(-)</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l9" name="l9">9</a></td><td><pre></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l10" name="l10">10</a></td><td><pre><span class="bold">diff --git a/mzk/main.py b/mzk/main.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l11" name="l11">11</a></td><td><pre><span class="bold">index ab013d2..e836018 100644</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l12" name="l12">12</a></td><td><pre><span class="bold">--- a/mzk/main.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l13" name="l13">13</a></td><td><pre><span class="bold">+++ b/mzk/main.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l14" name="l14">14</a></td><td><pre><span class="hunk">@@ -2,5 +2,42 @@</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l15" name="l15">15</a></td><td><pre> # mzk music theory helper - developed by acidvegas in python (https://acid.vegas/mzk)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l16" name="l16">16</a></td><td><pre> # main.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l17" name="l17">17</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l18" name="l18">18</a></td><td><pre><span class="deletion">-import argparser</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l19" name="l19">19</a></td><td><pre><span class="deletion">-import sys</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l20" name="l20">20</a></td><td><pre><span class="insertion">+</span><span class="insertion">import sys</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l21" name="l21">21</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l22" name="l22">22</a></td><td><pre><span class="insertion">+</span><span class="insertion">sys.dont_write_bytecode = True</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l23" name="l23">23</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l24" name="l24">24</a></td><td><pre><span class="insertion">+</span><span class="insertion">import constants</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l25" name="l25">25</a></td><td><pre><span class="insertion">+</span><span class="insertion">import functions</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l26" name="l26">26</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l27" name="l27">27</a></td><td><pre><span class="insertion">+</span><span class="insertion">if len(sys.argv) != 2:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l28" name="l28">28</a></td><td><pre><span class="insertion">+</span> <span class="insertion">functions.print_help()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l29" name="l29">29</a></td><td><pre><span class="insertion">+</span><span class="insertion">else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l30" name="l30">30</a></td><td><pre><span class="insertion">+</span> <span class="insertion">sys.argv[1] = sys.argv[1].lower()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l31" name="l31">31</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if sys.argv[1].startswith('--chord='):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l32" name="l32">32</a></td><td><pre><span class="insertion">+</span> <span class="insertion">chord = sys.argv[1][8:]</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l33" name="l33">33</a></td><td><pre><span class="insertion">+</span> <span class="insertion">key = chord.split('_')[0]</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l34" name="l34">34</a></td><td><pre><span class="insertion">+</span> <span class="insertion">type = chord[len(key)+1:]</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l35" name="l35">35</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if key in constants.notes and type in constants.scales:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l36" name="l36">36</a></td><td><pre><span class="insertion">+</span> <span class="insertion">functions.print_chord(key, type)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l37" name="l37">37</a></td><td><pre><span class="insertion">+</span> <span class="insertion">else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l38" name="l38">38</a></td><td><pre><span class="insertion">+</span> <span class="insertion">print('error: invalid key or chord type\n\n')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l39" name="l39">39</a></td><td><pre><span class="insertion">+</span> <span class="insertion">functions.print_help()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l40" name="l40">40</a></td><td><pre><span class="insertion">+</span> <span class="insertion">elif sys.argv[1] == '--chords':</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l41" name="l41">41</a></td><td><pre><span class="insertion">+</span> <span class="insertion">functions.print_chords()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l42" name="l42">42</a></td><td><pre><span class="insertion">+</span> <span class="insertion">elif sys.argv[1] == '--circle':</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l43" name="l43">43</a></td><td><pre><span class="insertion">+</span> <span class="insertion">functions.print_circle()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l44" name="l44">44</a></td><td><pre><span class="insertion">+</span> <span class="insertion">elif sys.argv[1] == '--intervals':</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l45" name="l45">45</a></td><td><pre><span class="insertion">+</span> <span class="insertion">functions.print_intervals()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l46" name="l46">46</a></td><td><pre><span class="insertion">+</span> <span class="insertion">elif sys.argv[1].startswith('--scale='):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l47" name="l47">47</a></td><td><pre><span class="insertion">+</span> <span class="insertion">scale = sys.argv[1][8:]</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l48" name="l48">48</a></td><td><pre><span class="insertion">+</span> <span class="insertion">key = scale.split('_')[0]</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l49" name="l49">49</a></td><td><pre><span class="insertion">+</span> <span class="insertion">type = scale[len(key)+1:]</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l50" name="l50">50</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if key in constants.notes and type in constants.scales:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l51" name="l51">51</a></td><td><pre><span class="insertion">+</span> <span class="insertion">functions.print_scale(key, type)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l52" name="l52">52</a></td><td><pre><span class="insertion">+</span> <span class="insertion">else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l53" name="l53">53</a></td><td><pre><span class="insertion">+</span> <span class="insertion">print('error: invalid key or chord type\n\n')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l54" name="l54">54</a></td><td><pre><span class="insertion">+</span> <span class="insertion">functions.print_help()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l55" name="l55">55</a></td><td><pre><span class="insertion">+</span> <span class="insertion">elif sys.argv[1] == '--scales':</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l56" name="l56">56</a></td><td><pre><span class="insertion">+</span> <span class="insertion">functions.print_scales()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l57" name="l57">57</a></td><td><pre><span class="insertion">+</span> <span class="insertion">else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l58" name="l58">58</a></td><td><pre><span class="insertion">+</span> <span class="insertion">functions.print_help()</span></pre></td></tr>
</table>
<div id="footer">site generated by <a href="https://github.com/acidvegas/stagit" target="_blank">stagit</a> on <a href="#">05/03/20</a></div>

View File

@ -1,52 +0,0 @@
<!doctype html>
<link rel="stylesheet" href="../../style.css">
<title>mzk :: e9326b2</title>
<h1><a href="../index.html" title="Back to Repository">&larr;&#xFE0E;</a> mzk :: e9326b2</h1>
<hr>
<table id="main" cellpadding="0" cellspacing="0">
<tr class="item"><td class="linenumber"><a href="#l1" name="l1">1</a></td><td><pre><span class="commit">commit e9326b22d9130ff7d8550637b9726b396cb0e831</span><span class="commit"> (</span><span class="reference">HEAD -&gt; </span><span class="branch">master</span><span class="commit">)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l2" name="l2">2</a></td><td><pre>Author: acidvegas &lt;acid.vegas@acid.vegas&gt;</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l3" name="l3">3</a></td><td><pre>Date: Thu Jul 25 02:36:58 2019 -0400</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l4" name="l4">4</a></td><td><pre></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l5" name="l5">5</a></td><td><pre> fixed casing</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l6" name="l6">6</a></td><td><pre>---</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l7" name="l7">7</a></td><td><pre> mzk/main.py | 11 <span class="insertion">+++++</span><span class="deletion">------</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l8" name="l8">8</a></td><td><pre> 1 file changed, 5 insertions(+), 6 deletions(-)</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l9" name="l9">9</a></td><td><pre></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l10" name="l10">10</a></td><td><pre><span class="bold">diff --git a/mzk/main.py b/mzk/main.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l11" name="l11">11</a></td><td><pre><span class="bold">index e836018..4a4e9f7 100644</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l12" name="l12">12</a></td><td><pre><span class="bold">--- a/mzk/main.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l13" name="l13">13</a></td><td><pre><span class="bold">+++ b/mzk/main.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l14" name="l14">14</a></td><td><pre><span class="hunk">@@ -12,11 +12,10 @@</span> </span>import functions</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l15" name="l15">15</a></td><td><pre> if len(sys.argv) != 2:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l16" name="l16">16</a></td><td><pre> functions.print_help()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l17" name="l17">17</a></td><td><pre> else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l18" name="l18">18</a></td><td><pre><span class="deletion">- sys.argv[1] = sys.argv[1].lower()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l19" name="l19">19</a></td><td><pre> if sys.argv[1].startswith('--chord='):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l20" name="l20">20</a></td><td><pre> chord = sys.argv[1][8:]</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l21" name="l21">21</a></td><td><pre><span class="deletion">- key = chord.split('_')[0]</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l22" name="l22">22</a></td><td><pre><span class="deletion">- type = chord[len(key)+1:]</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l23" name="l23">23</a></td><td><pre><span class="insertion">+</span> <span class="insertion">key = chord.split('_')[0].upper()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l24" name="l24">24</a></td><td><pre><span class="insertion">+</span> <span class="insertion">type = chord[len(key)+1:].lower()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l25" name="l25">25</a></td><td><pre> if key in constants.notes and type in constants.scales:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l26" name="l26">26</a></td><td><pre> functions.print_chord(key, type)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l27" name="l27">27</a></td><td><pre> else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l28" name="l28">28</a></td><td><pre><span class="hunk">@@ -25,13 +24,13 @@</span> </span>else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l29" name="l29">29</a></td><td><pre> elif sys.argv[1] == '--chords':</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l30" name="l30">30</a></td><td><pre> functions.print_chords()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l31" name="l31">31</a></td><td><pre> elif sys.argv[1] == '--circle':</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l32" name="l32">32</a></td><td><pre><span class="deletion">- functions.print_circle()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l33" name="l33">33</a></td><td><pre><span class="insertion">+</span> <span class="insertion">functions.print_circle_of_fifths()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l34" name="l34">34</a></td><td><pre> elif sys.argv[1] == '--intervals':</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l35" name="l35">35</a></td><td><pre> functions.print_intervals()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l36" name="l36">36</a></td><td><pre> elif sys.argv[1].startswith('--scale='):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l37" name="l37">37</a></td><td><pre> scale = sys.argv[1][8:]</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l38" name="l38">38</a></td><td><pre><span class="deletion">- key = scale.split('_')[0]</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l39" name="l39">39</a></td><td><pre><span class="deletion">- type = scale[len(key)+1:]</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l40" name="l40">40</a></td><td><pre><span class="insertion">+</span> <span class="insertion">key = scale.split('_')[0].upper()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l41" name="l41">41</a></td><td><pre><span class="insertion">+</span> <span class="insertion">type = scale[len(key)+1:].lower()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l42" name="l42">42</a></td><td><pre> if key in constants.notes and type in constants.scales:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l43" name="l43">43</a></td><td><pre> functions.print_scale(key, type)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l44" name="l44">44</a></td><td><pre> else:</span></pre></td></tr>
</table>
<div id="footer">site generated by <a href="https://github.com/acidvegas/stagit" target="_blank">stagit</a> on <a href="#">05/03/20</a></div>

View File

@ -1,27 +0,0 @@
<!doctype html>
<link rel="stylesheet" href="../../style.css">
<title>mzk :: f13aeb5</title>
<h1><a href="../index.html" title="Back to Repository">&larr;&#xFE0E;</a> mzk :: f13aeb5</h1>
<hr>
<table id="main" cellpadding="0" cellspacing="0">
<tr class="item"><td class="linenumber"><a href="#l1" name="l1">1</a></td><td><pre><span class="commit">commit f13aeb51420036adf052e83e8156a8650a59c626</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l2" name="l2">2</a></td><td><pre>Author: acidvegas &lt;acid.vegas@acid.vegas&gt;</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l3" name="l3">3</a></td><td><pre>Date: Sat Jul 13 18:57:54 2019 -0400</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l4" name="l4">4</a></td><td><pre></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l5" name="l5">5</a></td><td><pre> Added README notice</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l6" name="l6">6</a></td><td><pre>---</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l7" name="l7">7</a></td><td><pre> README.md | 5 <span class="insertion">+++++</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l8" name="l8">8</a></td><td><pre> 1 file changed, 5 insertions(+)</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l9" name="l9">9</a></td><td><pre></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l10" name="l10">10</a></td><td><pre><span class="bold">diff --git a/README.md b/README.md</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l11" name="l11">11</a></td><td><pre><span class="bold">index e69de29..a0bb1c1 100644</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l12" name="l12">12</a></td><td><pre><span class="bold">--- a/README.md</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l13" name="l13">13</a></td><td><pre><span class="bold">+++ b/README.md</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l14" name="l14">14</a></td><td><pre><span class="hunk">@@ -0,0 +1,5 @@</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l15" name="l15">15</a></td><td><pre><span class="insertion">+</span><span class="insertion"># mzk</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l16" name="l16">16</a></td><td><pre><span class="insertion">+</span><span class="insertion">&gt; music theory helper</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l17" name="l17">17</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l18" name="l18">18</a></td><td><pre><span class="insertion">+</span><span class="insertion">###### Information</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l19" name="l19">19</a></td><td><pre><span class="insertion">+</span><span class="insertion">This repository is a work in progress</span></pre></td></tr>
</table>
<div id="footer">site generated by <a href="https://github.com/acidvegas/stagit" target="_blank">stagit</a> on <a href="#">05/03/20</a></div>

View File

@ -1,38 +0,0 @@
<!doctype html>
<link rel="stylesheet" href="../../style.css">
<title>mzk :: f2506cd</title>
<h1><a href="../index.html" title="Back to Repository">&larr;&#xFE0E;</a> mzk :: f2506cd</h1>
<hr>
<table id="main" cellpadding="0" cellspacing="0">
<tr class="item"><td class="linenumber"><a href="#l1" name="l1">1</a></td><td><pre><span class="commit">commit f2506cd785c9aec06555f4696da2d2c7debe7857</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l2" name="l2">2</a></td><td><pre>Author: acidvegas &lt;acid.vegas@acid.vegas&gt;</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l3" name="l3">3</a></td><td><pre>Date: Thu Jul 25 02:36:25 2019 -0400</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l4" name="l4">4</a></td><td><pre></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l5" name="l5">5</a></td><td><pre> print compound intervals</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l6" name="l6">6</a></td><td><pre>---</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l7" name="l7">7</a></td><td><pre> mzk/functions.py | 10 <span class="insertion">+++++++++</span><span class="deletion">-</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l8" name="l8">8</a></td><td><pre> 1 file changed, 9 insertions(+), 1 deletion(-)</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l9" name="l9">9</a></td><td><pre></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l10" name="l10">10</a></td><td><pre><span class="bold">diff --git a/mzk/functions.py b/mzk/functions.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l11" name="l11">11</a></td><td><pre><span class="bold">index 344f42e..8ab115c 100644</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l12" name="l12">12</a></td><td><pre><span class="bold">--- a/mzk/functions.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l13" name="l13">13</a></td><td><pre><span class="bold">+++ b/mzk/functions.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l14" name="l14">14</a></td><td><pre><span class="hunk">@@ -125,7 +125,15 @@</span> </span>def print_intervals():</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l15" name="l15">15</a></td><td><pre> for interval, info in constants.intervals.items():</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l16" name="l16">16</a></td><td><pre> print('│ {0} │ {1} │ {2} │'.format(str(info['semitones']).rjust(9), interval.ljust(14), info['short_name'].ljust(5)))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l17" name="l17">17</a></td><td><pre> print('└───────────┴────────────────┴───────┘')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l18" name="l18">18</a></td><td><pre><span class="deletion">- print(print_intervals.__doc__)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l19" name="l19">19</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l20" name="l20">20</a></td><td><pre><span class="insertion">+</span> <span class="insertion">print('C O M P O U N D I N T E R V A L S'.center(42))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l21" name="l21">21</a></td><td><pre><span class="insertion">+</span> <span class="insertion">print('┌───────────┬────────────────────┬───────┐')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l22" name="l22">22</a></td><td><pre><span class="insertion">+</span> <span class="insertion">print('│ semitones │ quality │ short │')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l23" name="l23">23</a></td><td><pre><span class="insertion">+</span> <span class="insertion">print('├───────────┼────────────────────┼───────┤')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l24" name="l24">24</a></td><td><pre><span class="insertion">+</span> <span class="insertion">for interval, info in constants.compound_intervals.items():</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l25" name="l25">25</a></td><td><pre><span class="insertion">+</span> <span class="insertion">print('│ {0} │ {1} │ {2} │'.format(str(info['semitones']).rjust(9), interval.ljust(18), info['short_name'].ljust(5)))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l26" name="l26">26</a></td><td><pre><span class="insertion">+</span> <span class="insertion">print('└───────────┴────────────────────┴───────┘')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l27" name="l27">27</a></td><td><pre><span class="insertion">+</span> <span class="insertion">print(trim(print_intervals.__doc__))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l28" name="l28">28</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l29" name="l29">29</a></td><td><pre> def print_scale(root, type, full=False):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l30" name="l30">30</a></td><td><pre> frets = (24,147) if full else (12,75)</span></pre></td></tr>
</table>
<div id="footer">site generated by <a href="https://github.com/acidvegas/stagit" target="_blank">stagit</a> on <a href="#">05/03/20</a></div>

View File

@ -1,52 +0,0 @@
<!doctype html>
<link rel="stylesheet" href="../../style.css">
<title>mzk :: ff5d07b</title>
<h1><a href="../index.html" title="Back to Repository">&larr;&#xFE0E;</a> mzk :: ff5d07b</h1>
<hr>
<table id="main" cellpadding="0" cellspacing="0">
<tr class="item"><td class="linenumber"><a href="#l1" name="l1">1</a></td><td><pre><span class="commit">commit ff5d07b842cc6cd04784ff38a6337757e72d7451</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l2" name="l2">2</a></td><td><pre>Author: acidvegas &lt;acid.vegas@acid.vegas&gt;</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l3" name="l3">3</a></td><td><pre>Date: Thu Jul 25 02:32:18 2019 -0400</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l4" name="l4">4</a></td><td><pre></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l5" name="l5">5</a></td><td><pre> added compound intervals</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l6" name="l6">6</a></td><td><pre>---</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l7" name="l7">7</a></td><td><pre> mzk/constants.py | 17 <span class="insertion">++++++++++++++++</span><span class="deletion">-</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l8" name="l8">8</a></td><td><pre> 1 file changed, 16 insertions(+), 1 deletion(-)</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l9" name="l9">9</a></td><td><pre></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l10" name="l10">10</a></td><td><pre><span class="bold">diff --git a/mzk/constants.py b/mzk/constants.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l11" name="l11">11</a></td><td><pre><span class="bold">index 05d59f2..18dc1b0 100644</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l12" name="l12">12</a></td><td><pre><span class="bold">--- a/mzk/constants.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l13" name="l13">13</a></td><td><pre><span class="bold">+++ b/mzk/constants.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l14" name="l14">14</a></td><td><pre><span class="hunk">@@ -34,6 +34,21 @@</span> </span>colors = {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l15" name="l15">15</a></td><td><pre> 'reset' : '\033[0m'</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l16" name="l16">16</a></td><td><pre> }</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l17" name="l17">17</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l18" name="l18">18</a></td><td><pre><span class="insertion">+</span><span class="insertion">compound_intervals = {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l19" name="l19">19</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'minor_ninth' : {'semitones':13, 'short_name':'m9'},</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l20" name="l20">20</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'major_ninth' : {'semitones':14, 'short_name':'M9'},</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l21" name="l21">21</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'minor_tenth' : {'semitones':15, 'short_name':'m10'},</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l22" name="l22">22</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'major_tenth' : {'semitones':16, 'short_name':'M10'},</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l23" name="l23">23</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'perfect_eleventh' : {'semitones':17, 'short_name':'P11'},</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l24" name="l24">24</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'augmented_eleventh' : {'semitones':18, 'short_name':'TT'},</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l25" name="l25">25</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'perfect_twelfth' : {'semitones':19, 'short_name':'P12'},</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l26" name="l26">26</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'minor_thirteenth' : {'semitones':20, 'short_name':'m13'},</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l27" name="l27">27</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'major_thirteenth' : {'semitones':21, 'short_name':'M13'},</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l28" name="l28">28</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'minor_fourteenth' : {'semitones':22, 'short_name':'m14'},</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l29" name="l29">29</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'major_fourteenth' : {'semitones':23, 'short_name':'M14'},</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l30" name="l30">30</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'double_octave' : {'semitones':25, 'short_name':'15ma'}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l31" name="l31">31</a></td><td><pre><span class="insertion">+</span><span class="insertion">}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l32" name="l32">32</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l33" name="l33">33</a></td><td><pre> intervals = {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l34" name="l34">34</a></td><td><pre> 'perfect_unison' : {'semitones':0, 'short_name':'P1'},</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l35" name="l35">35</a></td><td><pre> 'minor_second' : {'semitones':1, 'short_name':'m2'},</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l36" name="l36">36</a></td><td><pre><span class="hunk">@@ -47,7 +62,7 @@</span> </span>intervals = {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l37" name="l37">37</a></td><td><pre> 'major_sixth' : {'semitones':9, 'short_name':'M6'},</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l38" name="l38">38</a></td><td><pre> 'minor_seventh' : {'semitones':10, 'short_name':'m7'},</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l39" name="l39">39</a></td><td><pre> 'major_seventh' : {'semitones':11, 'short_name':'M7'},</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l40" name="l40">40</a></td><td><pre><span class="deletion">- 'perfect_octave' : {'semitones':12, 'short_name':'P8'}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l41" name="l41">41</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'perfect_octave' : {'semitones':12, 'short_name':'8va'}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l42" name="l42">42</a></td><td><pre> }</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l43" name="l43">43</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l44" name="l44">44</a></td><td><pre> notes = ('A', 'A#', 'B', 'C', 'C#', 'D', 'D#', 'E', 'F', 'F#', 'G', 'G#')</span></pre></td></tr>
</table>
<div id="footer">site generated by <a href="https://github.com/acidvegas/stagit" target="_blank">stagit</a> on <a href="#">05/03/20</a></div>

View File

@ -1,27 +0,0 @@
<!doctype html>
<link rel="stylesheet" href="../style.css">
<title>mzk</title>
<h1><a href="../index.html" title="Home">&#8962;&#xFE0E;</a> mzk</h1>
<div style="padding-left:30px">
<h4>music theory helper</h4>
<h5>git clone <a href="https://github.com/acidvegas/mzk.git" title="mzk clone URL">https://github.com/acidvegas/mzk.git</a></h5>
</div>
<hr>
<table id="main" cellpadding="0" cellspacing="0">
<tr id="navigation"><th></th><th>Hash</th><th>Commit message</th><th>Author</th><th>Date</th><th align="right">Files</th><th align="right">+</th><th align="right">-</th></tr>
<tr class="item"><td></td><td><a href="commit/e9326b2.html" title="View this commit">e9326b2</a></td><td>fixed casing</td><td>acidvegas</td><td>2019-07-25 02:36</td><td align="right">1</td><td align="right">+5</td><td align="right">-6</td></tr>
<tr class="item"><td></td><td><a href="commit/f2506cd.html" title="View this commit">f2506cd</a></td><td>print compound intervals</td><td>acidvegas</td><td>2019-07-25 02:36</td><td align="right">1</td><td align="right">+9</td><td align="right">-1</td></tr>
<tr class="item"><td></td><td><a href="commit/99519b0.html" title="View this commit">99519b0</a></td><td>fixed double octave type</td><td>acidvegas</td><td>2019-07-25 02:35</td><td align="right">1</td><td align="right">+1</td><td align="right">-1</td></tr>
<tr class="item"><td></td><td><a href="commit/ff5d07b.html" title="View this commit">ff5d07b</a></td><td>added compound intervals</td><td>acidvegas</td><td>2019-07-25 02:32</td><td align="right">1</td><td align="right">+16</td><td align="right">-1</td></tr>
<tr class="item"><td></td><td><a href="commit/47e74cd.html" title="View this commit">47e74cd</a></td><td>fixed help function name</td><td>acidvegas</td><td>2019-07-25 02:12</td><td align="right">1</td><td align="right">+1</td><td align="right">-1</td></tr>
<tr class="item"><td></td><td><a href="commit/b2c7601.html" title="View this commit">b2c7601</a></td><td>fixed</td><td>acidvegas</td><td>2019-07-25 02:11</td><td align="right">1</td><td align="right">+1</td><td align="right">-3</td></tr>
<tr class="item"><td></td><td><a href="commit/c5f05ae.html" title="View this commit">c5f05ae</a></td><td>updated</td><td>acidvegas</td><td>2019-07-25 02:11</td><td align="right">1</td><td align="right">+17</td><td align="right">-7</td></tr>
<tr class="item"><td></td><td><a href="commit/cea16c6.html" title="View this commit">cea16c6</a></td><td>added argument parsing to interact with the functions</td><td>acidvegas</td><td>2019-07-25 02:10</td><td align="right">1</td><td align="right">+39</td><td align="right">-2</td></tr>
<tr class="item"><td></td><td><a href="commit/60160fb.html" title="View this commit">60160fb</a></td><td>updated intervals with tritone</td><td>acidvegas</td><td>2019-07-25 01:06</td><td align="right">1</td><td align="right">+15</td><td align="right">-16</td></tr>
<tr class="item"><td></td><td><a href="commit/244878c.html" title="View this commit">244878c</a></td><td>added todos</td><td>acidvegas</td><td>2019-07-25 01:01</td><td align="right">1</td><td align="right">+8</td><td align="right">-2</td></tr>
<tr class="item"><td></td><td><a href="commit/a4bccd7.html" title="View this commit">a4bccd7</a></td><td>fixed docstring whitepace</td><td>acidvegas</td><td>2019-07-25 00:58</td><td align="right">1</td><td align="right">+16</td><td align="right">-19</td></tr>
<tr class="item"><td></td><td><a href="commit/37b724d.html" title="View this commit">37b724d</a></td><td>Updated README</td><td>acidvegas</td><td>2019-07-13 23:27</td><td align="right">5</td><td align="right">+8</td><td align="right">-2</td></tr>
<tr class="item"><td></td><td><a href="commit/f13aeb5.html" title="View this commit">f13aeb5</a></td><td>Added README notice</td><td>acidvegas</td><td>2019-07-13 18:57</td><td align="right">1</td><td align="right">+5</td><td align="right">-0</td></tr>
<tr class="item"><td></td><td><a href="commit/04a1f6e.html" title="View this commit">04a1f6e</a></td><td>Initial commit</td><td>acidvegas</td><td>2019-07-13 18:52</td><td align="right">5</td><td align="right">+252</td><td align="right">-0</td></tr>
</table>
<div id="footer">site generated by <a href="https://github.com/acidvegas/stagit" target="_blank">stagit</a> on <a href="#">05/03/20</a></div>

View File

@ -1,430 +0,0 @@
<!doctype html>
<link rel="stylesheet" href="../../style.css">
<title>pastebin :: 31ee5d3</title>
<h1><a href="../index.html" title="Back to Repository">&larr;&#xFE0E;</a> pastebin :: 31ee5d3</h1>
<hr>
<table id="main" cellpadding="0" cellspacing="0">
<tr class="item"><td class="linenumber"><a href="#l1" name="l1">1</a></td><td><pre><span class="commit">commit 31ee5d3a5273142e3467e71dd8a1485db1dc8ec3</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l2" name="l2">2</a></td><td><pre>Author: acidvegas &lt;acid.vegas@acid.vegas&gt;</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l3" name="l3">3</a></td><td><pre>Date: Fri Jun 28 01:28:33 2019 -0400</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l4" name="l4">4</a></td><td><pre></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l5" name="l5">5</a></td><td><pre> Initial commit</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l6" name="l6">6</a></td><td><pre>---</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l7" name="l7">7</a></td><td><pre> LICENSE | 15 <span class="insertion">+++</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l8" name="l8">8</a></td><td><pre> README.md | 11 <span class="insertion">++</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l9" name="l9">9</a></td><td><pre> pastebin/example.py | 32 <span class="insertion">+++++</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l10" name="l10">10</a></td><td><pre> pastebin/pastebin.py | 328 <span class="insertion">+++++++++++++++++++++++++++++++++++++++++++++++++++</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l11" name="l11">11</a></td><td><pre> 4 files changed, 386 insertions(+)</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l12" name="l12">12</a></td><td><pre></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l13" name="l13">13</a></td><td><pre><span class="bold">diff --git a/LICENSE b/LICENSE</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l14" name="l14">14</a></td><td><pre><span class="bold">new file mode 100644</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l15" name="l15">15</a></td><td><pre><span class="bold">index 0000000..69997e8</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l16" name="l16">16</a></td><td><pre><span class="bold">--- /dev/null</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l17" name="l17">17</a></td><td><pre><span class="bold">+++ b/LICENSE</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l18" name="l18">18</a></td><td><pre><span class="hunk">@@ -0,0 +1,15 @@</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l19" name="l19">19</a></td><td><pre><span class="insertion">+</span><span class="insertion">ISC License</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l20" name="l20">20</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l21" name="l21">21</a></td><td><pre><span class="insertion">+</span><span class="insertion">Copyright (c) 2019, acidvegas &lt;acid.vegas@acid.vegas&gt;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l22" name="l22">22</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l23" name="l23">23</a></td><td><pre><span class="insertion">+</span><span class="insertion">Permission to use, copy, modify, and/or distribute this software for any</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l24" name="l24">24</a></td><td><pre><span class="insertion">+</span><span class="insertion">purpose with or without fee is hereby granted, provided that the above</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l25" name="l25">25</a></td><td><pre><span class="insertion">+</span><span class="insertion">copyright notice and this permission notice appear in all copies.</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l26" name="l26">26</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l27" name="l27">27</a></td><td><pre><span class="insertion">+</span><span class="insertion">THE SOFTWARE IS PROVIDED &quot;AS IS&quot; AND THE AUTHOR DISCLAIMS ALL WARRANTIES</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l28" name="l28">28</a></td><td><pre><span class="insertion">+</span><span class="insertion">WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l29" name="l29">29</a></td><td><pre><span class="insertion">+</span><span class="insertion">MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l30" name="l30">30</a></td><td><pre><span class="insertion">+</span><span class="insertion">ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l31" name="l31">31</a></td><td><pre><span class="insertion">+</span><span class="insertion">WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l32" name="l32">32</a></td><td><pre><span class="insertion">+</span><span class="insertion">ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l33" name="l33">33</a></td><td><pre><span class="insertion">+</span><span class="insertion">OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l34" name="l34">34</a></td><td><pre><span class="bold">diff --git a/README.md b/README.md</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l35" name="l35">35</a></td><td><pre><span class="bold">new file mode 100644</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l36" name="l36">36</a></td><td><pre><span class="bold">index 0000000..366cbcc</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l37" name="l37">37</a></td><td><pre><span class="bold">--- /dev/null</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l38" name="l38">38</a></td><td><pre><span class="bold">+++ b/README.md</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l39" name="l39">39</a></td><td><pre><span class="hunk">@@ -0,0 +1,11 @@</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l40" name="l40">40</a></td><td><pre><span class="insertion">+</span><span class="insertion">###### Requirements</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l41" name="l41">41</a></td><td><pre><span class="insertion">+</span><span class="insertion">* [Python](https://www.python.org/downloads/) *(**Note:** This script was developed to be used with the latest version of Python.)*</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l42" name="l42">42</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l43" name="l43">43</a></td><td><pre><span class="insertion">+</span><span class="insertion">###### API Documentation:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l44" name="l44">44</a></td><td><pre><span class="insertion">+</span><span class="insertion">* [Pastebin API](https://pastebin.com/api)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l45" name="l45">45</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l46" name="l46">46</a></td><td><pre><span class="insertion">+</span><span class="insertion">###### Mirrors</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l47" name="l47">47</a></td><td><pre><span class="insertion">+</span><span class="insertion">- [acid.vegas](https://acid.vegas/pastebin) *(main)*</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l48" name="l48">48</a></td><td><pre><span class="insertion">+</span><span class="insertion">- [SuperNETs](https://git.supernets.org/acidvegas/pastebin)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l49" name="l49">49</a></td><td><pre><span class="insertion">+</span><span class="insertion">- [GitHub](https://github.com/acidvegas/pastebin)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l50" name="l50">50</a></td><td><pre><span class="insertion">+</span><span class="insertion">- [GitLab](https://gitlab.com/acidvegas/pastebin)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l51" name="l51">51</a></td><td><pre><span class="bold">diff --git a/pastebin/example.py b/pastebin/example.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l52" name="l52">52</a></td><td><pre><span class="bold">new file mode 100644</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l53" name="l53">53</a></td><td><pre><span class="bold">index 0000000..7675a2d</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l54" name="l54">54</a></td><td><pre><span class="bold">--- /dev/null</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l55" name="l55">55</a></td><td><pre><span class="bold">+++ b/pastebin/example.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l56" name="l56">56</a></td><td><pre><span class="hunk">@@ -0,0 +1,32 @@</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l57" name="l57">57</a></td><td><pre><span class="insertion">+</span><span class="insertion">#!/usr/bin/env python</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l58" name="l58">58</a></td><td><pre><span class="insertion">+</span><span class="insertion"># PasteBin API Class - Developed by acidvegas in Python (https://acid.vegas/pastebin)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l59" name="l59">59</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l60" name="l60">60</a></td><td><pre><span class="insertion">+</span><span class="insertion">import getpass</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l61" name="l61">61</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l62" name="l62">62</a></td><td><pre><span class="insertion">+</span><span class="insertion">import pastebin</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l63" name="l63">63</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l64" name="l64">64</a></td><td><pre><span class="insertion">+</span><span class="insertion"># API Settings</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l65" name="l65">65</a></td><td><pre><span class="insertion">+</span><span class="insertion">api_dev_key = 'CHANGEME'</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l66" name="l66">66</a></td><td><pre><span class="insertion">+</span><span class="insertion">api_user_key = None</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l67" name="l67">67</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l68" name="l68">68</a></td><td><pre><span class="insertion">+</span><span class="insertion"># Define API</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l69" name="l69">69</a></td><td><pre><span class="insertion">+</span><span class="insertion">if api_user_key:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l70" name="l70">70</a></td><td><pre><span class="insertion">+</span> <span class="insertion">api = pastebin.PasteBin(api_dev_key, api_user_key)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l71" name="l71">71</a></td><td><pre><span class="insertion">+</span><span class="insertion">else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l72" name="l72">72</a></td><td><pre><span class="insertion">+</span> <span class="insertion">api = pastebin.PasteBin(api_dev_key)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l73" name="l73">73</a></td><td><pre><span class="insertion">+</span> <span class="insertion">username = input('[?] - Username: ')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l74" name="l74">74</a></td><td><pre><span class="insertion">+</span> <span class="insertion">password = getpass.getpass('[?] - Password: ')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l75" name="l75">75</a></td><td><pre><span class="insertion">+</span> <span class="insertion">api_user_key = api.create_user_key(username, password)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l76" name="l76">76</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if 'Bad API request' not in api_user_key:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l77" name="l77">77</a></td><td><pre><span class="insertion">+</span> <span class="insertion">print('[+] - You API user key is: ' + ap_user_key)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l78" name="l78">78</a></td><td><pre><span class="insertion">+</span> <span class="insertion">api = pastebin.PasteBin(api_dev_key, api_user_key)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l79" name="l79">79</a></td><td><pre><span class="insertion">+</span> <span class="insertion">else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l80" name="l80">80</a></td><td><pre><span class="insertion">+</span> <span class="insertion">raise SystemExit('[!] - Failed to create API user key! ({0})'.format(api_user_key.split(', ')[1]))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l81" name="l81">81</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l82" name="l82">82</a></td><td><pre><span class="insertion">+</span><span class="insertion"># Create a Paste</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l83" name="l83">83</a></td><td><pre><span class="insertion">+</span><span class="insertion">data = open(__file__).read()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l84" name="l84">84</a></td><td><pre><span class="insertion">+</span><span class="insertion">result = api.paste(data, guest=True, name='Example Script', format='Python', private='1', expire='10M')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l85" name="l85">85</a></td><td><pre><span class="insertion">+</span><span class="insertion">if 'Bad API request' not in result:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l86" name="l86">86</a></td><td><pre><span class="insertion">+</span> <span class="insertion">print('[+] - PasteBin URL: ' + result)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l87" name="l87">87</a></td><td><pre><span class="insertion">+</span><span class="insertion">else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l88" name="l88">88</a></td><td><pre><span class="insertion">+</span> <span class="insertion">raise SystemExit('[!] - Failed to create paste! ({0})'.format(api_user_key.split(', ')[1]))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l89" name="l89">89</a></td><td><pre><span class="bold">diff --git a/pastebin/pastebin.py b/pastebin/pastebin.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l90" name="l90">90</a></td><td><pre><span class="bold">new file mode 100644</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l91" name="l91">91</a></td><td><pre><span class="bold">index 0000000..15bb26a</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l92" name="l92">92</a></td><td><pre><span class="bold">--- /dev/null</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l93" name="l93">93</a></td><td><pre><span class="bold">+++ b/pastebin/pastebin.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l94" name="l94">94</a></td><td><pre><span class="hunk">@@ -0,0 +1,328 @@</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l95" name="l95">95</a></td><td><pre><span class="insertion">+</span><span class="insertion">#!/usr/bin/env python</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l96" name="l96">96</a></td><td><pre><span class="insertion">+</span><span class="insertion"># PasteBin API Class - Developed by acidvegas in Python (https://acid.vegas/pastebin)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l97" name="l97">97</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l98" name="l98">98</a></td><td><pre><span class="insertion">+</span><span class="insertion">'''</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l99" name="l99">99</a></td><td><pre><span class="insertion">+</span><span class="insertion">API Documentation:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l100" name="l100">100</a></td><td><pre><span class="insertion">+</span> <span class="insertion">https://pastebin.com/api</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l101" name="l101">101</a></td><td><pre><span class="insertion">+</span><span class="insertion">'''</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l102" name="l102">102</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l103" name="l103">103</a></td><td><pre><span class="insertion">+</span><span class="insertion">import urllib.parse</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l104" name="l104">104</a></td><td><pre><span class="insertion">+</span><span class="insertion">import urllib.request</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l105" name="l105">105</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l106" name="l106">106</a></td><td><pre><span class="insertion">+</span><span class="insertion"># Values</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l107" name="l107">107</a></td><td><pre><span class="insertion">+</span><span class="insertion">format_values = {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l108" name="l108">108</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'4cs' : '4CS',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l109" name="l109">109</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'6502acme' : '6502 ACME Cross Assembler',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l110" name="l110">110</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'6502kickass' : '6502 Kick Assembler',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l111" name="l111">111</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'6502tasm' : '6502 TASM/64TASS',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l112" name="l112">112</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'abap' : 'ABAP',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l113" name="l113">113</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'actionscript' : 'ActionScript',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l114" name="l114">114</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'actionscript3' : 'ActionScript 3',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l115" name="l115">115</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'ada' : 'Ada',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l116" name="l116">116</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'aimms' : 'AIMMS',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l117" name="l117">117</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'algol68' : 'ALGOL 68',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l118" name="l118">118</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'apache' : 'Apache Log',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l119" name="l119">119</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'applescript' : 'AppleScript',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l120" name="l120">120</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'apt_sources' : 'APT Sources',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l121" name="l121">121</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'arm' : 'ARM',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l122" name="l122">122</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'asm' : 'ASM (NASM)',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l123" name="l123">123</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'asp' : 'ASP',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l124" name="l124">124</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'asymptote' : 'Asymptote',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l125" name="l125">125</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'autoconf' : 'autoconf',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l126" name="l126">126</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'autohotkey' : 'Autohotkey',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l127" name="l127">127</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'autoit' : 'AutoIt',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l128" name="l128">128</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'avisynth' : 'Avisynth',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l129" name="l129">129</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'awk' : 'Awk',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l130" name="l130">130</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'bascomavr' : 'BASCOM AVR',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l131" name="l131">131</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'bash' : 'Bash',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l132" name="l132">132</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'basic4gl' : 'Basic4GL',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l133" name="l133">133</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'dos' : 'Batch',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l134" name="l134">134</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'bibtex' : 'BibTeX',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l135" name="l135">135</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'blitzbasic' : 'Blitz Basic',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l136" name="l136">136</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'b3d' : 'Blitz3D',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l137" name="l137">137</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'bmx' : 'BlitzMax',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l138" name="l138">138</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'bnf' : 'BNF',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l139" name="l139">139</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'boo' : 'BOO',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l140" name="l140">140</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'bf' : 'BrainFuck',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l141" name="l141">141</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'c' : 'C',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l142" name="l142">142</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'c_winapi' : 'C (WinAPI)',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l143" name="l143">143</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'c_mac' : 'C for Macs',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l144" name="l144">144</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'cil' : 'C Intermediate Language',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l145" name="l145">145</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'csharp' : 'C#',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l146" name="l146">146</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'cpp' : 'C++',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l147" name="l147">147</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'cpp-winapi' : 'C++ (WinAPI)',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l148" name="l148">148</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'cpp-qt' : 'C++ (with Qt extensions)',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l149" name="l149">149</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'c_loadrunner' : 'C: Loadrunner',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l150" name="l150">150</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'caddcl' : 'CAD DCL',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l151" name="l151">151</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'cadlisp' : 'CAD Lisp',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l152" name="l152">152</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'ceylon' : 'Ceylon',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l153" name="l153">153</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'cfdg' : 'CFDG',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l154" name="l154">154</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'chaiscript' : 'ChaiScript',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l155" name="l155">155</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'chapel' : 'Chapel',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l156" name="l156">156</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'clojure' : 'Clojure',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l157" name="l157">157</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'klonec' : 'Clone C',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l158" name="l158">158</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'klonecpp' : 'Clone C++',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l159" name="l159">159</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'cmake' : 'CMake',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l160" name="l160">160</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'cobol' : 'COBOL',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l161" name="l161">161</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'coffeescript' : 'CoffeeScript',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l162" name="l162">162</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'cfm' : 'ColdFusion',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l163" name="l163">163</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'css' : 'CSS',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l164" name="l164">164</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'cuesheet' : 'Cuesheet',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l165" name="l165">165</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'d' : 'D',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l166" name="l166">166</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'dart' : 'Dart',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l167" name="l167">167</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'dcl' : 'DCL',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l168" name="l168">168</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'dcpu16' : 'DCPU-16',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l169" name="l169">169</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'dcs' : 'DCS',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l170" name="l170">170</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'delphi' : 'Delphi',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l171" name="l171">171</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'oxygene' : 'Delphi Prism (Oxygene)',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l172" name="l172">172</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'diff' : 'Diff',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l173" name="l173">173</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'div' : 'DIV',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l174" name="l174">174</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'dot' : 'DOT',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l175" name="l175">175</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'e' : 'E',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l176" name="l176">176</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'ezt' : 'Easytrieve',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l177" name="l177">177</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'ecmascript' : 'ECMAScript',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l178" name="l178">178</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'eiffel' : 'Eiffel',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l179" name="l179">179</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'email' : 'Email',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l180" name="l180">180</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'epc' : 'EPC',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l181" name="l181">181</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'erlang' : 'Erlang',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l182" name="l182">182</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'euphoria' : 'Euphoria',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l183" name="l183">183</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'fsharp' : 'F#',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l184" name="l184">184</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'falcon' : 'Falcon',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l185" name="l185">185</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'filemaker' : 'Filemaker',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l186" name="l186">186</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'fo' : 'FO Language',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l187" name="l187">187</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'f1' : 'Formula One',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l188" name="l188">188</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'fortran' : 'Fortran',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l189" name="l189">189</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'freebasic' : 'FreeBasic',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l190" name="l190">190</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'freeswitch' : 'FreeSWITCH',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l191" name="l191">191</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'gambas' : 'GAMBAS',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l192" name="l192">192</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'gml' : 'Game Maker',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l193" name="l193">193</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'gdb' : 'GDB',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l194" name="l194">194</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'genero' : 'Genero',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l195" name="l195">195</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'genie' : 'Genie',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l196" name="l196">196</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'gettext' : 'GetText',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l197" name="l197">197</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'go' : 'Go',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l198" name="l198">198</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'groovy' : 'Groovy',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l199" name="l199">199</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'gwbasic' : 'GwBasic',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l200" name="l200">200</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'haskell' : 'Haskell',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l201" name="l201">201</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'haxe' : 'Haxe',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l202" name="l202">202</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'hicest' : 'HicEst',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l203" name="l203">203</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'hq9plus' : 'HQ9 Plus',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l204" name="l204">204</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'html4strict' : 'HTML',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l205" name="l205">205</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'html5' : 'HTML 5',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l206" name="l206">206</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'icon' : 'Icon',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l207" name="l207">207</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'idl' : 'IDL',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l208" name="l208">208</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'ini' : 'INI file',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l209" name="l209">209</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'inno' : 'Inno Script',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l210" name="l210">210</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'intercal' : 'INTERCAL',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l211" name="l211">211</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'io' : 'IO',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l212" name="l212">212</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'ispfpanel' : 'ISPF Panel Definition',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l213" name="l213">213</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'j' : 'J',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l214" name="l214">214</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'java' : 'Java',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l215" name="l215">215</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'java5' : 'Java 5',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l216" name="l216">216</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'javascript' : 'JavaScript',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l217" name="l217">217</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'jcl' : 'JCL',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l218" name="l218">218</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'jquery' : 'jQuery',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l219" name="l219">219</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'json' : 'JSON',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l220" name="l220">220</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'julia' : 'Julia',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l221" name="l221">221</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'kixtart' : 'KiXtart',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l222" name="l222">222</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'kotlin' : 'Kotlin',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l223" name="l223">223</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'latex' : 'Latex',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l224" name="l224">224</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'ldif' : 'LDIF',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l225" name="l225">225</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'lb' : 'Liberty BASIC',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l226" name="l226">226</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'lsl2' : 'Linden Scripting',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l227" name="l227">227</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'lisp' : 'Lisp',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l228" name="l228">228</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'llvm' : 'LLVM',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l229" name="l229">229</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'locobasic' : 'Loco Basic',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l230" name="l230">230</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'logtalk' : 'Logtalk',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l231" name="l231">231</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'lolcode' : 'LOL Code',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l232" name="l232">232</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'lotusformulas' : 'Lotus Formulas',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l233" name="l233">233</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'lotusscript' : 'Lotus Script',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l234" name="l234">234</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'lscript' : 'LScript',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l235" name="l235">235</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'lua' : 'Lua',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l236" name="l236">236</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'m68k' : 'M68000 Assembler',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l237" name="l237">237</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'magiksf' : 'MagikSF',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l238" name="l238">238</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'make' : 'Make',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l239" name="l239">239</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'mapbasic' : 'MapBasic',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l240" name="l240">240</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'markdown' : 'Markdown',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l241" name="l241">241</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'matlab' : 'MatLab',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l242" name="l242">242</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'mirc' : 'mIRC',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l243" name="l243">243</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'mmix' : 'MIX Assembler',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l244" name="l244">244</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'modula2' : 'Modula 2',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l245" name="l245">245</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'modula3' : 'Modula 3',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l246" name="l246">246</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'68000devpac' : 'Motorola 68000 HiSoft Dev',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l247" name="l247">247</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'mpasm' : 'MPASM',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l248" name="l248">248</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'mxml' : 'MXML',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l249" name="l249">249</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'mysql' : 'MySQL',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l250" name="l250">250</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'nagios' : 'Nagios',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l251" name="l251">251</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'netrexx' : 'NetRexx',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l252" name="l252">252</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'newlisp' : 'newLISP',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l253" name="l253">253</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'nginx' : 'Nginx',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l254" name="l254">254</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'nimrod' : 'Nimrod',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l255" name="l255">255</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'text' : 'None',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l256" name="l256">256</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'nsis' : 'NullSoft Installer',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l257" name="l257">257</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'oberon2' : 'Oberon 2',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l258" name="l258">258</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'objeck' : 'Objeck Programming Langua',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l259" name="l259">259</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'objc' : 'Objective C',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l260" name="l260">260</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'ocaml-brief' : 'OCalm Brief',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l261" name="l261">261</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'ocaml' : 'OCaml',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l262" name="l262">262</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'octave' : 'Octave',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l263" name="l263">263</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'oorexx' : 'Open Object Rexx',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l264" name="l264">264</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'pf' : 'OpenBSD PACKET FILTER',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l265" name="l265">265</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'glsl' : 'OpenGL Shading',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l266" name="l266">266</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'oobas' : 'Openoffice BASIC',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l267" name="l267">267</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'oracle11' : 'Oracle 11',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l268" name="l268">268</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'oracle8' : 'Oracle 8',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l269" name="l269">269</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'oz' : 'Oz',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l270" name="l270">270</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'parasail' : 'ParaSail',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l271" name="l271">271</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'parigp' : 'PARI/GP',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l272" name="l272">272</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'pascal' : 'Pascal',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l273" name="l273">273</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'pawn' : 'Pawn',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l274" name="l274">274</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'pcre' : 'PCRE',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l275" name="l275">275</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'per' : 'Per',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l276" name="l276">276</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'perl' : 'Perl',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l277" name="l277">277</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'perl6' : 'Perl 6',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l278" name="l278">278</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'php' : 'PHP',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l279" name="l279">279</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'php-brief' : 'PHP Brief',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l280" name="l280">280</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'pic16' : 'Pic 16',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l281" name="l281">281</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'pike' : 'Pike',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l282" name="l282">282</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'pixelbender' : 'Pixel Bender',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l283" name="l283">283</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'pli' : 'PL/I',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l284" name="l284">284</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'plsql' : 'PL/SQL',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l285" name="l285">285</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'postgresql' : 'PostgreSQL',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l286" name="l286">286</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'postscript' : 'PostScript',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l287" name="l287">287</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'povray' : 'POV-Ray',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l288" name="l288">288</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'powershell' : 'Power Shell',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l289" name="l289">289</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'powerbuilder' : 'PowerBuilder',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l290" name="l290">290</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'proftpd' : 'ProFTPd',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l291" name="l291">291</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'progress' : 'Progress',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l292" name="l292">292</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'prolog' : 'Prolog',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l293" name="l293">293</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'properties' : 'Properties',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l294" name="l294">294</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'providex' : 'ProvideX',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l295" name="l295">295</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'puppet' : 'Puppet',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l296" name="l296">296</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'purebasic' : 'PureBasic',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l297" name="l297">297</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'pycon' : 'PyCon',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l298" name="l298">298</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'python' : 'Python',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l299" name="l299">299</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'pys60' : 'Python for S60',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l300" name="l300">300</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'q' : 'q/kdb+',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l301" name="l301">301</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'qbasic' : 'QBasic',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l302" name="l302">302</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'qml' : 'QML',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l303" name="l303">303</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'rsplus' : 'R',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l304" name="l304">304</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'racket' : 'Racket',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l305" name="l305">305</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'rails' : 'Rails',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l306" name="l306">306</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'rbs' : 'RBScript',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l307" name="l307">307</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'rebol' : 'REBOL',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l308" name="l308">308</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'reg' : 'REG',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l309" name="l309">309</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'rexx' : 'Rexx',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l310" name="l310">310</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'robots' : 'Robots',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l311" name="l311">311</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'rpmspec' : 'RPM Spec',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l312" name="l312">312</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'ruby' : 'Ruby',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l313" name="l313">313</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'gnuplot' : 'Ruby Gnuplot',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l314" name="l314">314</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'rust' : 'Rust',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l315" name="l315">315</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'sas' : 'SAS',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l316" name="l316">316</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'scala' : 'Scala',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l317" name="l317">317</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'scheme' : 'Scheme',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l318" name="l318">318</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'scilab' : 'Scilab',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l319" name="l319">319</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'scl' : 'SCL',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l320" name="l320">320</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'sdlbasic' : 'SdlBasic',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l321" name="l321">321</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'smalltalk' : 'Smalltalk',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l322" name="l322">322</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'smarty' : 'Smarty',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l323" name="l323">323</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'spark' : 'SPARK',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l324" name="l324">324</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'sparql' : 'SPARQL',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l325" name="l325">325</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'sqf' : 'SQF',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l326" name="l326">326</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'sql' : 'SQL',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l327" name="l327">327</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'standardml' : 'StandardML',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l328" name="l328">328</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'stonescript' : 'StoneScript',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l329" name="l329">329</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'sclang' : 'SuperCollider',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l330" name="l330">330</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'swift' : 'Swift',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l331" name="l331">331</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'systemverilog' : 'SystemVerilog',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l332" name="l332">332</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'tsql' : 'T-SQL',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l333" name="l333">333</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'tcl' : 'TCL',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l334" name="l334">334</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'teraterm' : 'Tera Term',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l335" name="l335">335</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'thinbasic' : 'thinBasic',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l336" name="l336">336</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'typoscript' : 'TypoScript',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l337" name="l337">337</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'unicon' : 'Unicon',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l338" name="l338">338</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'uscript' : 'UnrealScript',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l339" name="l339">339</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'upc' : 'UPC',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l340" name="l340">340</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'urbi' : 'Urbi',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l341" name="l341">341</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'vala' : 'Vala',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l342" name="l342">342</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'vbnet' : 'VB.NET',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l343" name="l343">343</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'vbscript' : 'VBScript',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l344" name="l344">344</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'vedit' : 'Vedit',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l345" name="l345">345</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'verilog' : 'VeriLog',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l346" name="l346">346</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'vhdl' : 'VHDL',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l347" name="l347">347</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'vim' : 'VIM',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l348" name="l348">348</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'visualprolog' : 'Visual Pro Log',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l349" name="l349">349</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'vb' : 'VisualBasic',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l350" name="l350">350</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'visualfoxpro' : 'VisualFoxPro',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l351" name="l351">351</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'whitespace' : 'WhiteSpace',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l352" name="l352">352</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'whois' : 'WHOIS',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l353" name="l353">353</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'winbatch' : 'Winbatch',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l354" name="l354">354</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'xbasic' : 'XBasic',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l355" name="l355">355</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'xml' : 'XML',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l356" name="l356">356</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'xorg_conf' : 'Xorg Config',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l357" name="l357">357</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'xpp' : 'XPP',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l358" name="l358">358</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'yaml' : 'YAML',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l359" name="l359">359</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'z80' : 'Z80 Assembler',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l360" name="l360">360</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'zxbasic' : 'ZXBasic'</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l361" name="l361">361</a></td><td><pre><span class="insertion">+</span><span class="insertion">}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l362" name="l362">362</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l363" name="l363">363</a></td><td><pre><span class="insertion">+</span><span class="insertion">expire_values = {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l364" name="l364">364</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'N' : 'Never',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l365" name="l365">365</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'10M' : '10 Minutes',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l366" name="l366">366</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'1H' : '1 Hour',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l367" name="l367">367</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'1D' : '1 Day',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l368" name="l368">368</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'1W' : '1 Week',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l369" name="l369">369</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'2W' : '2 Weeks',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l370" name="l370">370</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'1M' : '1 Month'</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l371" name="l371">371</a></td><td><pre><span class="insertion">+</span><span class="insertion">}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l372" name="l372">372</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l373" name="l373">373</a></td><td><pre><span class="insertion">+</span><span class="insertion">private_values = {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l374" name="l374">374</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'0' : 'Public',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l375" name="l375">375</a></td><td><pre><span class="insertion">+</span><span class="insertion"> '1' : 'Unlisted',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l376" name="l376">376</a></td><td><pre><span class="insertion">+</span><span class="insertion"> '2' : 'Private'</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l377" name="l377">377</a></td><td><pre><span class="insertion">+</span><span class="insertion">}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l378" name="l378">378</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l379" name="l379">379</a></td><td><pre><span class="insertion">+</span><span class="insertion">class PasteBin:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l380" name="l380">380</a></td><td><pre><span class="insertion">+</span> <span class="insertion">def __init__(self, api_dev_key, api_user_key=None, timeout=10):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l381" name="l381">381</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.api_dev_key = api_dev_key</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l382" name="l382">382</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.api_user_key = api_user_key</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l383" name="l383">383</a></td><td><pre><span class="insertion">+</span> <span class="insertion">self.timeout = timeout</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l384" name="l384">384</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l385" name="l385">385</a></td><td><pre><span class="insertion">+</span> <span class="insertion">def api_call(self, method, params):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l386" name="l386">386</a></td><td><pre><span class="insertion">+</span> <span class="insertion">response = urllib.request.urlopen('https://pastebin.com/api/' + method, urllib.parse.urlencode(params).encode('utf-8'), timeout=self.timeout)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l387" name="l387">387</a></td><td><pre><span class="insertion">+</span> <span class="insertion">return response.read().decode()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l388" name="l388">388</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l389" name="l389">389</a></td><td><pre><span class="insertion">+</span> <span class="insertion">def create_user_key(self, username, password):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l390" name="l390">390</a></td><td><pre><span class="insertion">+</span> <span class="insertion">params = {'api_dev_key':self.api_dev_key, 'api_user_name':username, 'api_user_password':password}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l391" name="l391">391</a></td><td><pre><span class="insertion">+</span> <span class="insertion">return api_call('api_login.php', params)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l392" name="l392">392</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l393" name="l393">393</a></td><td><pre><span class="insertion">+</span> <span class="insertion">def paste(self, data, guest=False, name=None, format=None, private=None, expire=None):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l394" name="l394">394</a></td><td><pre><span class="insertion">+</span> <span class="insertion">params = {'api_dev_key':self.api_dev_key, 'api_option':'paste', 'api_paste_code':data}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l395" name="l395">395</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if not guest : params['api_user_key'] = self.api_user_key</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l396" name="l396">396</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if name : params['api_paste_name'] = name</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l397" name="l397">397</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if format : params['api_paste_format'] = format</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l398" name="l398">398</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if private : params['api_paste_private'] = private</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l399" name="l399">399</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if expire : params['api_paste_expire_date'] = expire</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l400" name="l400">400</a></td><td><pre><span class="insertion">+</span> <span class="insertion">return self.api_call('api_post.php', params)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l401" name="l401">401</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l402" name="l402">402</a></td><td><pre><span class="insertion">+</span> <span class="insertion">def list_pastes(self, results_limit=None):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l403" name="l403">403</a></td><td><pre><span class="insertion">+</span> <span class="insertion">params = {'api_dev_key':self.api_dev_key, 'api_user_key':self.api_user_key, 'api_option':'list'}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l404" name="l404">404</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if results_limit: # Default 50, Minimum 1, Maximum 1000</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l405" name="l405">405</a></td><td><pre><span class="insertion">+</span> <span class="insertion">params['api_results_limit'] = results_limit</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l406" name="l406">406</a></td><td><pre><span class="insertion">+</span> <span class="insertion">return self.api_call('api_post.php', params)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l407" name="l407">407</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l408" name="l408">408</a></td><td><pre><span class="insertion">+</span> <span class="insertion">def trending_pastes(self):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l409" name="l409">409</a></td><td><pre><span class="insertion">+</span> <span class="insertion">params = {'api_dev_key':self.api_dev_key, 'api_option':'trends'}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l410" name="l410">410</a></td><td><pre><span class="insertion">+</span> <span class="insertion">return self.api_call('api_post.php', params)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l411" name="l411">411</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l412" name="l412">412</a></td><td><pre><span class="insertion">+</span> <span class="insertion">def delete_paste(self, paste_key):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l413" name="l413">413</a></td><td><pre><span class="insertion">+</span> <span class="insertion">params = {'api_dev_key':self.api_dev_key, 'api_user_key':self.api_user_key, 'api_paste_key':paste_key, 'api_option':'delete'}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l414" name="l414">414</a></td><td><pre><span class="insertion">+</span> <span class="insertion">return self.api_call('api_post.php', params)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l415" name="l415">415</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l416" name="l416">416</a></td><td><pre><span class="insertion">+</span> <span class="insertion">def user_info(self):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l417" name="l417">417</a></td><td><pre><span class="insertion">+</span> <span class="insertion">params = {'api_dev_key':self.api_dev_key, 'api_user_key':self.api_user_key, 'api_option':'userdetails'}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l418" name="l418">418</a></td><td><pre><span class="insertion">+</span> <span class="insertion">return self.api_call('api_post.php', params)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l419" name="l419">419</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l420" name="l420">420</a></td><td><pre><span class="insertion">+</span> <span class="insertion">def raw_pastes(self, paste_key):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l421" name="l421">421</a></td><td><pre><span class="insertion">+</span> <span class="insertion">params = {'api_dev_key':self.api_dev_key, 'api_user_key':self.api_user_key, 'api_paste_key':paste_key, 'api_option':'show_paste'}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l422" name="l422">422</a></td><td><pre><span class="insertion">+</span> <span class="insertion">return self.api_call('api_raw.php', params)</span></pre></td></tr>
</table>
<div id="footer">site generated by <a href="https://github.com/acidvegas/stagit" target="_blank">stagit</a> on <a href="#">05/03/20</a></div>

View File

@ -1,30 +0,0 @@
<!doctype html>
<link rel="stylesheet" href="../../style.css">
<title>pastebin :: e4a8566</title>
<h1><a href="../index.html" title="Back to Repository">&larr;&#xFE0E;</a> pastebin :: e4a8566</h1>
<hr>
<table id="main" cellpadding="0" cellspacing="0">
<tr class="item"><td class="linenumber"><a href="#l1" name="l1">1</a></td><td><pre><span class="commit">commit e4a85660770ee40d362c2c90a682e5884e4d2347</span><span class="commit"> (</span><span class="reference">HEAD -&gt; </span><span class="branch">master</span><span class="commit">)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l2" name="l2">2</a></td><td><pre>Author: acidvegas &lt;acid.vegas@acid.vegas&gt;</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l3" name="l3">3</a></td><td><pre>Date: Fri Jun 28 05:55:43 2019 -0400</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l4" name="l4">4</a></td><td><pre></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l5" name="l5">5</a></td><td><pre> Added missing self</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l6" name="l6">6</a></td><td><pre>---</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l7" name="l7">7</a></td><td><pre> pastebin/pastebin.py | 2 <span class="insertion">+</span><span class="deletion">-</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l8" name="l8">8</a></td><td><pre> 1 file changed, 1 insertion(+), 1 deletion(-)</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l9" name="l9">9</a></td><td><pre></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l10" name="l10">10</a></td><td><pre><span class="bold">diff --git a/pastebin/pastebin.py b/pastebin/pastebin.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l11" name="l11">11</a></td><td><pre><span class="bold">index 15bb26a..cb0575f 100644</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l12" name="l12">12</a></td><td><pre><span class="bold">--- a/pastebin/pastebin.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l13" name="l13">13</a></td><td><pre><span class="bold">+++ b/pastebin/pastebin.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l14" name="l14">14</a></td><td><pre><span class="hunk">@@ -294,7 +294,7 @@</span> </span>class PasteBin:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l15" name="l15">15</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l16" name="l16">16</a></td><td><pre> def create_user_key(self, username, password):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l17" name="l17">17</a></td><td><pre> params = {'api_dev_key':self.api_dev_key, 'api_user_name':username, 'api_user_password':password}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l18" name="l18">18</a></td><td><pre><span class="deletion">- return api_call('api_login.php', params)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l19" name="l19">19</a></td><td><pre><span class="insertion">+</span> <span class="insertion">return self.api_call('api_login.php', params)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l20" name="l20">20</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l21" name="l21">21</a></td><td><pre> def paste(self, data, guest=False, name=None, format=None, private=None, expire=None):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l22" name="l22">22</a></td><td><pre> params = {'api_dev_key':self.api_dev_key, 'api_option':'paste', 'api_paste_code':data}</span></pre></td></tr>
</table>
<div id="footer">site generated by <a href="https://github.com/acidvegas/stagit" target="_blank">stagit</a> on <a href="#">05/03/20</a></div>

View File

@ -1,30 +0,0 @@
<!doctype html>
<link rel="stylesheet" href="../../style.css">
<title>pastebin :: f4758c6</title>
<h1><a href="../index.html" title="Back to Repository">&larr;&#xFE0E;</a> pastebin :: f4758c6</h1>
<hr>
<table id="main" cellpadding="0" cellspacing="0">
<tr class="item"><td class="linenumber"><a href="#l1" name="l1">1</a></td><td><pre><span class="commit">commit f4758c66e974e8b5d6dfcc86cb208f9c34623a8a</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l2" name="l2">2</a></td><td><pre>Author: acidvegas &lt;acid.vegas@acid.vegas&gt;</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l3" name="l3">3</a></td><td><pre>Date: Fri Jun 28 05:54:07 2019 -0400</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l4" name="l4">4</a></td><td><pre></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l5" name="l5">5</a></td><td><pre> Fixed typo</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l6" name="l6">6</a></td><td><pre>---</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l7" name="l7">7</a></td><td><pre> pastebin/example.py | 2 <span class="insertion">+</span><span class="deletion">-</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l8" name="l8">8</a></td><td><pre> 1 file changed, 1 insertion(+), 1 deletion(-)</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l9" name="l9">9</a></td><td><pre></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l10" name="l10">10</a></td><td><pre><span class="bold">diff --git a/pastebin/example.py b/pastebin/example.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l11" name="l11">11</a></td><td><pre><span class="bold">index 7675a2d..0efa047 100644</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l12" name="l12">12</a></td><td><pre><span class="bold">--- a/pastebin/example.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l13" name="l13">13</a></td><td><pre><span class="bold">+++ b/pastebin/example.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l14" name="l14">14</a></td><td><pre><span class="hunk">@@ -18,7 +18,7 @@</span> </span>else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l15" name="l15">15</a></td><td><pre> password = getpass.getpass('[?] - Password: ')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l16" name="l16">16</a></td><td><pre> api_user_key = api.create_user_key(username, password)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l17" name="l17">17</a></td><td><pre> if 'Bad API request' not in api_user_key:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l18" name="l18">18</a></td><td><pre><span class="deletion">- print('[+] - You API user key is: ' + ap_user_key)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l19" name="l19">19</a></td><td><pre><span class="insertion">+</span> <span class="insertion">print('[+] - You API user key is: ' + api_user_key)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l20" name="l20">20</a></td><td><pre> api = pastebin.PasteBin(api_dev_key, api_user_key)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l21" name="l21">21</a></td><td><pre> else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l22" name="l22">22</a></td><td><pre> raise SystemExit('[!] - Failed to create API user key! ({0})'.format(api_user_key.split(', ')[1]))</span></pre></td></tr>
</table>
<div id="footer">site generated by <a href="https://github.com/acidvegas/stagit" target="_blank">stagit</a> on <a href="#">05/03/20</a></div>

View File

@ -1,16 +0,0 @@
<!doctype html>
<link rel="stylesheet" href="../style.css">
<title>pastebin</title>
<h1><a href="../index.html" title="Home">&#8962;&#xFE0E;</a> pastebin</h1>
<div style="padding-left:30px">
<h4>python class for the api on pastebin</h4>
<h5>git clone <a href="https://github.com/acidvegas/pastebin.git" title="pastebin clone URL">https://github.com/acidvegas/pastebin.git</a></h5>
</div>
<hr>
<table id="main" cellpadding="0" cellspacing="0">
<tr id="navigation"><th></th><th>Hash</th><th>Commit message</th><th>Author</th><th>Date</th><th align="right">Files</th><th align="right">+</th><th align="right">-</th></tr>
<tr class="item"><td></td><td><a href="commit/e4a8566.html" title="View this commit">e4a8566</a></td><td>Added missing self</td><td>acidvegas</td><td>2019-06-28 05:55</td><td align="right">1</td><td align="right">+1</td><td align="right">-1</td></tr>
<tr class="item"><td></td><td><a href="commit/f4758c6.html" title="View this commit">f4758c6</a></td><td>Fixed typo</td><td>acidvegas</td><td>2019-06-28 05:54</td><td align="right">1</td><td align="right">+1</td><td align="right">-1</td></tr>
<tr class="item"><td></td><td><a href="commit/31ee5d3.html" title="View this commit">31ee5d3</a></td><td>Initial commit</td><td>acidvegas</td><td>2019-06-28 01:28</td><td align="right">4</td><td align="right">+386</td><td align="right">-0</td></tr>
</table>
<div id="footer">site generated by <a href="https://github.com/acidvegas/stagit" target="_blank">stagit</a> on <a href="#">05/03/20</a></div>

View File

@ -1,37 +0,0 @@
<!doctype html>
<link rel="stylesheet" href="../../style.css">
<title>proxytools :: 1b6e4b8</title>
<h1><a href="../index.html" title="Back to Repository">&larr;&#xFE0E;</a> proxytools :: 1b6e4b8</h1>
<hr>
<table id="main" cellpadding="0" cellspacing="0">
<tr class="item"><td class="linenumber"><a href="#l1" name="l1">1</a></td><td><pre><span class="commit">commit 1b6e4b87728a14ad33fe0974e15b0800266f173f</span><span class="commit"> (</span><span class="reference">HEAD -&gt; </span><span class="branch">master</span><span class="commit">)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l2" name="l2">2</a></td><td><pre>Author: acidvegas &lt;acid.vegas@acid.vegas&gt;</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l3" name="l3">3</a></td><td><pre>Date: Fri Aug 2 19:29:42 2019 -0400</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l4" name="l4">4</a></td><td><pre></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l5" name="l5">5</a></td><td><pre> updated</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l6" name="l6">6</a></td><td><pre>---</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l7" name="l7">7</a></td><td><pre> README.md | 11 <span class="insertion">+++++++</span><span class="deletion">----</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l8" name="l8">8</a></td><td><pre> 1 file changed, 7 insertions(+), 4 deletions(-)</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l9" name="l9">9</a></td><td><pre></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l10" name="l10">10</a></td><td><pre><span class="bold">diff --git a/README.md b/README.md</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l11" name="l11">11</a></td><td><pre><span class="bold">index 67fc1ab..93836b1 100644</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l12" name="l12">12</a></td><td><pre><span class="bold">--- a/README.md</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l13" name="l13">13</a></td><td><pre><span class="bold">+++ b/README.md</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l14" name="l14">14</a></td><td><pre><span class="hunk">@@ -1,8 +1,11 @@</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l15" name="l15">15</a></td><td><pre><span class="deletion">-###### Requirements</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l16" name="l16">16</a></td><td><pre><span class="deletion">-* [Python](https://www.python.org/downloads/) *(**Note:** This script was developed to be used with the latest version of Python)*</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l17" name="l17">17</a></td><td><pre><span class="deletion">-* [PySocks](https://pypi.python.org/pypi/PySocks) *(Required for cleansocks.py)*</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l18" name="l18">18</a></td><td><pre><span class="insertion">+</span><span class="insertion"># proxytools</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l19" name="l19">19</a></td><td><pre><span class="insertion">+</span><span class="insertion">&gt; collection of scripts for harvesting &amp; testing proxies</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l20" name="l20">20</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l21" name="l21">21</a></td><td><pre><span class="deletion">-###### Mirrors</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l22" name="l22">22</a></td><td><pre><span class="insertion">+</span><span class="insertion">## Requirements</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l23" name="l23">23</a></td><td><pre><span class="insertion">+</span><span class="insertion">- [Python](https://www.python.org/downloads/) *(**Note:** This script was developed to be used with the latest version of Python)*</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l24" name="l24">24</a></td><td><pre><span class="insertion">+</span><span class="insertion">- [PySocks](https://pypi.python.org/pypi/PySocks) *(Required for [cleansocks.py](proxytools/cleansocks.py))*</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l25" name="l25">25</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l26" name="l26">26</a></td><td><pre><span class="insertion">+</span><span class="insertion">## Mirrors</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l27" name="l27">27</a></td><td><pre> - [acid.vegas](https://acid.vegas/proxytools) *(main)*</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l28" name="l28">28</a></td><td><pre> - [SuperNETs](https://git.supernets.org/acidvegas/proxytools)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l29" name="l29">29</a></td><td><pre> - [GitHub](https://github.com/acidvegas/proxytools)</span></pre></td></tr>
</table>
<div id="footer">site generated by <a href="https://github.com/acidvegas/stagit" target="_blank">stagit</a> on <a href="#">05/03/20</a></div>

View File

@ -1,322 +0,0 @@
<!doctype html>
<link rel="stylesheet" href="../../style.css">
<title>proxytools :: faa1804</title>
<h1><a href="../index.html" title="Back to Repository">&larr;&#xFE0E;</a> proxytools :: faa1804</h1>
<hr>
<table id="main" cellpadding="0" cellspacing="0">
<tr class="item"><td class="linenumber"><a href="#l1" name="l1">1</a></td><td><pre><span class="commit">commit faa18045476416d1b0556820e4a940d5fd37553a</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l2" name="l2">2</a></td><td><pre>Author: acidvegas &lt;acid.vegas@acid.vegas&gt;</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l3" name="l3">3</a></td><td><pre>Date: Fri Jun 28 01:40:22 2019 -0400</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l4" name="l4">4</a></td><td><pre></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l5" name="l5">5</a></td><td><pre> Initial commit</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l6" name="l6">6</a></td><td><pre>---</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l7" name="l7">7</a></td><td><pre> LICENSE | 15 <span class="insertion">++++++</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l8" name="l8">8</a></td><td><pre> README.md | 9 <span class="insertion">++++</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l9" name="l9">9</a></td><td><pre> proxytools/cleansocks.py | 70 <span class="insertion">+++++++++++++++++++++++++++</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l10" name="l10">10</a></td><td><pre> proxytools/floodbl.py | 56 <span class="insertion">++++++++++++++++++++++</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l11" name="l11">11</a></td><td><pre> proxytools/sockspot.py | 121 <span class="insertion">+++++++++++++++++++++++++++++++++++++++++++++++</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l12" name="l12">12</a></td><td><pre> 5 files changed, 271 insertions(+)</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l13" name="l13">13</a></td><td><pre></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l14" name="l14">14</a></td><td><pre><span class="bold">diff --git a/LICENSE b/LICENSE</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l15" name="l15">15</a></td><td><pre><span class="bold">new file mode 100644</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l16" name="l16">16</a></td><td><pre><span class="bold">index 0000000..b63b809</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l17" name="l17">17</a></td><td><pre><span class="bold">--- /dev/null</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l18" name="l18">18</a></td><td><pre><span class="bold">+++ b/LICENSE</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l19" name="l19">19</a></td><td><pre><span class="hunk">@@ -0,0 +1,15 @@</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l20" name="l20">20</a></td><td><pre><span class="insertion">+</span><span class="insertion">ISC License</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l21" name="l21">21</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l22" name="l22">22</a></td><td><pre><span class="insertion">+</span><span class="insertion">Copyright (c) 2019, acidvegas &lt;acid.vegas@acid.vegas&gt;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l23" name="l23">23</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l24" name="l24">24</a></td><td><pre><span class="insertion">+</span><span class="insertion">Permission to use, copy, modify, and/or distribute this software for any</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l25" name="l25">25</a></td><td><pre><span class="insertion">+</span><span class="insertion">purpose with or without fee is hereby granted, provided that the above</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l26" name="l26">26</a></td><td><pre><span class="insertion">+</span><span class="insertion">copyright notice and this permission notice appear in all copies.</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l27" name="l27">27</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l28" name="l28">28</a></td><td><pre><span class="insertion">+</span><span class="insertion">THE SOFTWARE IS PROVIDED &quot;AS IS&quot; AND THE AUTHOR DISCLAIMS ALL WARRANTIES</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l29" name="l29">29</a></td><td><pre><span class="insertion">+</span><span class="insertion">WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l30" name="l30">30</a></td><td><pre><span class="insertion">+</span><span class="insertion">MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l31" name="l31">31</a></td><td><pre><span class="insertion">+</span><span class="insertion">ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l32" name="l32">32</a></td><td><pre><span class="insertion">+</span><span class="insertion">WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l33" name="l33">33</a></td><td><pre><span class="insertion">+</span><span class="insertion">ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l34" name="l34">34</a></td><td><pre><span class="insertion">+</span><span class="insertion">OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l35" name="l35">35</a></td><td><pre><span class="bold">diff --git a/README.md b/README.md</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l36" name="l36">36</a></td><td><pre><span class="bold">new file mode 100644</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l37" name="l37">37</a></td><td><pre><span class="bold">index 0000000..67fc1ab</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l38" name="l38">38</a></td><td><pre><span class="bold">--- /dev/null</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l39" name="l39">39</a></td><td><pre><span class="bold">+++ b/README.md</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l40" name="l40">40</a></td><td><pre><span class="hunk">@@ -0,0 +1,9 @@</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l41" name="l41">41</a></td><td><pre><span class="insertion">+</span><span class="insertion">###### Requirements</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l42" name="l42">42</a></td><td><pre><span class="insertion">+</span><span class="insertion">* [Python](https://www.python.org/downloads/) *(**Note:** This script was developed to be used with the latest version of Python)*</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l43" name="l43">43</a></td><td><pre><span class="insertion">+</span><span class="insertion">* [PySocks](https://pypi.python.org/pypi/PySocks) *(Required for cleansocks.py)*</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l44" name="l44">44</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l45" name="l45">45</a></td><td><pre><span class="insertion">+</span><span class="insertion">###### Mirrors</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l46" name="l46">46</a></td><td><pre><span class="insertion">+</span><span class="insertion">- [acid.vegas](https://acid.vegas/proxytools) *(main)*</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l47" name="l47">47</a></td><td><pre><span class="insertion">+</span><span class="insertion">- [SuperNETs](https://git.supernets.org/acidvegas/proxytools)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l48" name="l48">48</a></td><td><pre><span class="insertion">+</span><span class="insertion">- [GitHub](https://github.com/acidvegas/proxytools)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l49" name="l49">49</a></td><td><pre><span class="insertion">+</span><span class="insertion">- [GitLab](https://gitlab.com/acidvegas/proxytools)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l50" name="l50">50</a></td><td><pre><span class="bold">diff --git a/proxytools/cleansocks.py b/proxytools/cleansocks.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l51" name="l51">51</a></td><td><pre><span class="bold">new file mode 100644</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l52" name="l52">52</a></td><td><pre><span class="bold">index 0000000..34fb5dd</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l53" name="l53">53</a></td><td><pre><span class="bold">--- /dev/null</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l54" name="l54">54</a></td><td><pre><span class="bold">+++ b/proxytools/cleansocks.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l55" name="l55">55</a></td><td><pre><span class="hunk">@@ -0,0 +1,70 @@</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l56" name="l56">56</a></td><td><pre><span class="insertion">+</span><span class="insertion">#!/usr/bin/env python</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l57" name="l57">57</a></td><td><pre><span class="insertion">+</span><span class="insertion"># CleanSocks - Developed by acidvegas in Python (https://acid.vegas/proxytools)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l58" name="l58">58</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l59" name="l59">59</a></td><td><pre><span class="insertion">+</span><span class="insertion">'''</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l60" name="l60">60</a></td><td><pre><span class="insertion">+</span><span class="insertion">Requirements:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l61" name="l61">61</a></td><td><pre><span class="insertion">+</span> <span class="insertion">PySocks (https://pypi.python.org/pypi/pysocks)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l62" name="l62">62</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l63" name="l63">63</a></td><td><pre><span class="insertion">+</span><span class="insertion">This script will clean a list of proxies by removing duplicates, checking for valid formats (IP:PORT), and testing if the proxies are working</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l64" name="l64">64</a></td><td><pre><span class="insertion">+</span><span class="insertion">'''</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l65" name="l65">65</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l66" name="l66">66</a></td><td><pre><span class="insertion">+</span><span class="insertion">import argparse</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l67" name="l67">67</a></td><td><pre><span class="insertion">+</span><span class="insertion">import concurrent.futures</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l68" name="l68">68</a></td><td><pre><span class="insertion">+</span><span class="insertion">import os</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l69" name="l69">69</a></td><td><pre><span class="insertion">+</span><span class="insertion">import re</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l70" name="l70">70</a></td><td><pre><span class="insertion">+</span><span class="insertion">import sys</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l71" name="l71">71</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l72" name="l72">72</a></td><td><pre><span class="insertion">+</span><span class="insertion">sys.dont_write_bytecode = True</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l73" name="l73">73</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l74" name="l74">74</a></td><td><pre><span class="insertion">+</span><span class="insertion">def is_proxy(proxy):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l75" name="l75">75</a></td><td><pre><span class="insertion">+</span> <span class="insertion">return re.match('^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]):(?:6553[0-5]|655[0-2][0-9]|65[0-4][0-9]{2}|6[0-4][0-9]{3}|[1-5][0-9]{4}|[1-9][0-9]{1,3}|[0-9])$', proxy)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l76" name="l76">76</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l77" name="l77">77</a></td><td><pre><span class="insertion">+</span><span class="insertion">def test_proxy(proxy):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l78" name="l78">78</a></td><td><pre><span class="insertion">+</span> <span class="insertion">global good</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l79" name="l79">79</a></td><td><pre><span class="insertion">+</span> <span class="insertion">ip, port = proxy.split(':')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l80" name="l80">80</a></td><td><pre><span class="insertion">+</span> <span class="insertion">try:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l81" name="l81">81</a></td><td><pre><span class="insertion">+</span> <span class="insertion">sock = socks.socksocket()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l82" name="l82">82</a></td><td><pre><span class="insertion">+</span> <span class="insertion">sock.set_proxy(socks.SOCKS5, ip, int(port))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l83" name="l83">83</a></td><td><pre><span class="insertion">+</span> <span class="insertion">sock.settimeout(args.timeout)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l84" name="l84">84</a></td><td><pre><span class="insertion">+</span> <span class="insertion">sock.connect(('www.google.com', 80))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l85" name="l85">85</a></td><td><pre><span class="insertion">+</span> <span class="insertion">except:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l86" name="l86">86</a></td><td><pre><span class="insertion">+</span> <span class="insertion">print('BAD | ' + proxy)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l87" name="l87">87</a></td><td><pre><span class="insertion">+</span> <span class="insertion">else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l88" name="l88">88</a></td><td><pre><span class="insertion">+</span> <span class="insertion">print('GOOD | ' + proxy)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l89" name="l89">89</a></td><td><pre><span class="insertion">+</span> <span class="insertion">good.append(proxy)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l90" name="l90">90</a></td><td><pre><span class="insertion">+</span> <span class="insertion">finally:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l91" name="l91">91</a></td><td><pre><span class="insertion">+</span> <span class="insertion">sock.close()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l92" name="l92">92</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l93" name="l93">93</a></td><td><pre><span class="insertion">+</span><span class="insertion">parser = argparse.ArgumentParser(usage='%(prog)s &lt;input&gt; &lt;output&gt; [options]')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l94" name="l94">94</a></td><td><pre><span class="insertion">+</span><span class="insertion">parser.add_argument('input', help='file to scan')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l95" name="l95">95</a></td><td><pre><span class="insertion">+</span><span class="insertion">parser.add_argument('output', help='file to output')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l96" name="l96">96</a></td><td><pre><span class="insertion">+</span><span class="insertion">parser.add_argument('-t', '--threads', help='number of threads (default: 100)', default=100, type=int)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l97" name="l97">97</a></td><td><pre><span class="insertion">+</span><span class="insertion">parser.add_argument('-x', '--timeout', help='socket timeout seconds (default: 15)', default=15, type=int)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l98" name="l98">98</a></td><td><pre><span class="insertion">+</span><span class="insertion">args = parser.parse_args()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l99" name="l99">99</a></td><td><pre><span class="insertion">+</span><span class="insertion">try:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l100" name="l100">100</a></td><td><pre><span class="insertion">+</span> <span class="insertion">import socks</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l101" name="l101">101</a></td><td><pre><span class="insertion">+</span><span class="insertion">except ImportError:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l102" name="l102">102</a></td><td><pre><span class="insertion">+</span> <span class="insertion">raise SystemExit('missing pysocks module (https://pypi.python.org/pypi/pysocks)')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l103" name="l103">103</a></td><td><pre><span class="insertion">+</span><span class="insertion">if not os.path.isfile(args.input):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l104" name="l104">104</a></td><td><pre><span class="insertion">+</span> <span class="insertion">raise SystemExit('no such input file')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l105" name="l105">105</a></td><td><pre><span class="insertion">+</span><span class="insertion">proxies = set([line.strip() for line in open(args.input).readlines() if is_proxy(line)])</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l106" name="l106">106</a></td><td><pre><span class="insertion">+</span><span class="insertion">if not proxies:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l107" name="l107">107</a></td><td><pre><span class="insertion">+</span> <span class="insertion">raise SystemExit('no proxies found from input file')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l108" name="l108">108</a></td><td><pre><span class="insertion">+</span><span class="insertion">deduped, ips = list(), list()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l109" name="l109">109</a></td><td><pre><span class="insertion">+</span><span class="insertion">for proxy in proxies:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l110" name="l110">110</a></td><td><pre><span class="insertion">+</span> <span class="insertion">ip = proxy.split(':')[0]</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l111" name="l111">111</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if ip not in ips:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l112" name="l112">112</a></td><td><pre><span class="insertion">+</span> <span class="insertion">ips.append(ip)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l113" name="l113">113</a></td><td><pre><span class="insertion">+</span> <span class="insertion">deduped.append(proxy)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l114" name="l114">114</a></td><td><pre><span class="insertion">+</span><span class="insertion">deduped.sort()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l115" name="l115">115</a></td><td><pre><span class="insertion">+</span><span class="insertion">good = list()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l116" name="l116">116</a></td><td><pre><span class="insertion">+</span><span class="insertion">with concurrent.futures.ThreadPoolExecutor(max_workers=args.threads) as executor:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l117" name="l117">117</a></td><td><pre><span class="insertion">+</span> <span class="insertion">checks = {executor.submit(test_proxy, proxy): proxy for proxy in deduped}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l118" name="l118">118</a></td><td><pre><span class="insertion">+</span> <span class="insertion">for future in concurrent.futures.as_completed(checks):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l119" name="l119">119</a></td><td><pre><span class="insertion">+</span> <span class="insertion">checks[future]</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l120" name="l120">120</a></td><td><pre><span class="insertion">+</span><span class="insertion">good.sort()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l121" name="l121">121</a></td><td><pre><span class="insertion">+</span><span class="insertion">with open(args.output, 'w') as output_file:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l122" name="l122">122</a></td><td><pre><span class="insertion">+</span> <span class="insertion">output_file.write('\n'.join(good))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l123" name="l123">123</a></td><td><pre><span class="insertion">+</span><span class="insertion">print('Total : ' + format(len(proxies), ',d'))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l124" name="l124">124</a></td><td><pre><span class="insertion">+</span><span class="insertion">print('Good : ' + format(len(good), ',d'))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l125" name="l125">125</a></td><td><pre><span class="insertion">+</span><span class="insertion">print('Bad : ' + format(len(proxies)-len(good), ',d'))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l126" name="l126">126</a></td><td><pre><span class="bold">diff --git a/proxytools/floodbl.py b/proxytools/floodbl.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l127" name="l127">127</a></td><td><pre><span class="bold">new file mode 100644</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l128" name="l128">128</a></td><td><pre><span class="bold">index 0000000..5cf43b7</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l129" name="l129">129</a></td><td><pre><span class="bold">--- /dev/null</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l130" name="l130">130</a></td><td><pre><span class="bold">+++ b/proxytools/floodbl.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l131" name="l131">131</a></td><td><pre><span class="hunk">@@ -0,0 +1,56 @@</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l132" name="l132">132</a></td><td><pre><span class="insertion">+</span><span class="insertion">#!/usr/bin/env python</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l133" name="l133">133</a></td><td><pre><span class="insertion">+</span><span class="insertion"># FloodBL - Developed by acidvegas in Python (https://acid.vegas/proxytools)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l134" name="l134">134</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l135" name="l135">135</a></td><td><pre><span class="insertion">+</span><span class="insertion">'''</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l136" name="l136">136</a></td><td><pre><span class="insertion">+</span><span class="insertion">This script will test proxies against a set of Domain Name System-based Blackhole Lists (DNSBL) or Real-time Blackhole Lists (RBL)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l137" name="l137">137</a></td><td><pre><span class="insertion">+</span><span class="insertion">'''</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l138" name="l138">138</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l139" name="l139">139</a></td><td><pre><span class="insertion">+</span><span class="insertion">import argparse</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l140" name="l140">140</a></td><td><pre><span class="insertion">+</span><span class="insertion">import concurrent.futures</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l141" name="l141">141</a></td><td><pre><span class="insertion">+</span><span class="insertion">import os</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l142" name="l142">142</a></td><td><pre><span class="insertion">+</span><span class="insertion">import re</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l143" name="l143">143</a></td><td><pre><span class="insertion">+</span><span class="insertion">import socket</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l144" name="l144">144</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l145" name="l145">145</a></td><td><pre><span class="insertion">+</span><span class="insertion">dnsbls = ('dnsbl.dronebl.org','rbl.efnetrbl.org','torexit.dan.me.uk')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l146" name="l146">146</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l147" name="l147">147</a></td><td><pre><span class="insertion">+</span><span class="insertion">def dnsbl_check(proxy):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l148" name="l148">148</a></td><td><pre><span class="insertion">+</span> <span class="insertion">global good</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l149" name="l149">149</a></td><td><pre><span class="insertion">+</span> <span class="insertion">bad = False</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l150" name="l150">150</a></td><td><pre><span class="insertion">+</span> <span class="insertion">ip = proxy.split(':')[0]</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l151" name="l151">151</a></td><td><pre><span class="insertion">+</span> <span class="insertion">formatted_ip = '.'.join(ip.split('.')[::-1])</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l152" name="l152">152</a></td><td><pre><span class="insertion">+</span> <span class="insertion">for dnsbl in dnsbls:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l153" name="l153">153</a></td><td><pre><span class="insertion">+</span> <span class="insertion">try:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l154" name="l154">154</a></td><td><pre><span class="insertion">+</span> <span class="insertion">socket.gethostbyname(f'{formatted_ip}.{dnsbl}')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l155" name="l155">155</a></td><td><pre><span class="insertion">+</span> <span class="insertion">except socket.gaierror:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l156" name="l156">156</a></td><td><pre><span class="insertion">+</span> <span class="insertion">pass</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l157" name="l157">157</a></td><td><pre><span class="insertion">+</span> <span class="insertion">else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l158" name="l158">158</a></td><td><pre><span class="insertion">+</span> <span class="insertion">bad = True</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l159" name="l159">159</a></td><td><pre><span class="insertion">+</span> <span class="insertion">break</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l160" name="l160">160</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if bad:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l161" name="l161">161</a></td><td><pre><span class="insertion">+</span> <span class="insertion">print('BAD | ' + ip)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l162" name="l162">162</a></td><td><pre><span class="insertion">+</span> <span class="insertion">else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l163" name="l163">163</a></td><td><pre><span class="insertion">+</span> <span class="insertion">good.append(proxy)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l164" name="l164">164</a></td><td><pre><span class="insertion">+</span> <span class="insertion">print('GOOD | ' + ip)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l165" name="l165">165</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l166" name="l166">166</a></td><td><pre><span class="insertion">+</span><span class="insertion"># Main</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l167" name="l167">167</a></td><td><pre><span class="insertion">+</span><span class="insertion">parser = argparse.ArgumentParser(usage='%(prog)s &lt;input&gt; &lt;output&gt; [options]')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l168" name="l168">168</a></td><td><pre><span class="insertion">+</span><span class="insertion">parser.add_argument('input', help='file to scan')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l169" name="l169">169</a></td><td><pre><span class="insertion">+</span><span class="insertion">parser.add_argument('output', help='file to output')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l170" name="l170">170</a></td><td><pre><span class="insertion">+</span><span class="insertion">parser.add_argument('-t', '--threads', help='number of threads (default: 100)', default=100, type=int)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l171" name="l171">171</a></td><td><pre><span class="insertion">+</span><span class="insertion">args = parser.parse_args()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l172" name="l172">172</a></td><td><pre><span class="insertion">+</span><span class="insertion">if not os.path.isfile(args.input):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l173" name="l173">173</a></td><td><pre><span class="insertion">+</span> <span class="insertion">raise SystemExit('no such input file')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l174" name="l174">174</a></td><td><pre><span class="insertion">+</span><span class="insertion">proxies = re.findall('[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+:[0-9]+', open(args.input).read(), re.MULTILINE)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l175" name="l175">175</a></td><td><pre><span class="insertion">+</span><span class="insertion">if not proxies:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l176" name="l176">176</a></td><td><pre><span class="insertion">+</span> <span class="insertion">raise SystemExit('no proxies found from input file')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l177" name="l177">177</a></td><td><pre><span class="insertion">+</span><span class="insertion">good = list()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l178" name="l178">178</a></td><td><pre><span class="insertion">+</span><span class="insertion">with concurrent.futures.ThreadPoolExecutor(max_workers=args.threads) as executor:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l179" name="l179">179</a></td><td><pre><span class="insertion">+</span> <span class="insertion">checks = {executor.submit(dnsbl_check, proxy): proxy for proxy in proxies}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l180" name="l180">180</a></td><td><pre><span class="insertion">+</span> <span class="insertion">for future in concurrent.futures.as_completed(checks):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l181" name="l181">181</a></td><td><pre><span class="insertion">+</span> <span class="insertion">checks[future]</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l182" name="l182">182</a></td><td><pre><span class="insertion">+</span><span class="insertion">good.sort()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l183" name="l183">183</a></td><td><pre><span class="insertion">+</span><span class="insertion">with open(args.output, 'w') as output_file:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l184" name="l184">184</a></td><td><pre><span class="insertion">+</span> <span class="insertion">output_file.write('\n'.join(good))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l185" name="l185">185</a></td><td><pre><span class="insertion">+</span><span class="insertion">print('Total : ' + format(len(proxies), ',d'))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l186" name="l186">186</a></td><td><pre><span class="insertion">+</span><span class="insertion">print('Good : ' + format(len(good), ',d'))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l187" name="l187">187</a></td><td><pre><span class="insertion">+</span><span class="insertion">print('Bad : ' + format(len(proxies)-len(good), ',d'))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l188" name="l188">188</a></td><td><pre><span class="bold">diff --git a/proxytools/sockspot.py b/proxytools/sockspot.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l189" name="l189">189</a></td><td><pre><span class="bold">new file mode 100644</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l190" name="l190">190</a></td><td><pre><span class="bold">index 0000000..c87b132</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l191" name="l191">191</a></td><td><pre><span class="bold">--- /dev/null</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l192" name="l192">192</a></td><td><pre><span class="bold">+++ b/proxytools/sockspot.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l193" name="l193">193</a></td><td><pre><span class="hunk">@@ -0,0 +1,121 @@</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l194" name="l194">194</a></td><td><pre><span class="insertion">+</span><span class="insertion">#!/usr/bin/env python</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l195" name="l195">195</a></td><td><pre><span class="insertion">+</span><span class="insertion"># SockSpot - Developed by acidvegas in Python (https://acid.vegas/proxytools)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l196" name="l196">196</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l197" name="l197">197</a></td><td><pre><span class="insertion">+</span><span class="insertion">import datetime</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l198" name="l198">198</a></td><td><pre><span class="insertion">+</span><span class="insertion">import json</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l199" name="l199">199</a></td><td><pre><span class="insertion">+</span><span class="insertion">import base64</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l200" name="l200">200</a></td><td><pre><span class="insertion">+</span><span class="insertion">import os</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l201" name="l201">201</a></td><td><pre><span class="insertion">+</span><span class="insertion">import re</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l202" name="l202">202</a></td><td><pre><span class="insertion">+</span><span class="insertion">import threading</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l203" name="l203">203</a></td><td><pre><span class="insertion">+</span><span class="insertion">import time</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l204" name="l204">204</a></td><td><pre><span class="insertion">+</span><span class="insertion">import urllib.request</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l205" name="l205">205</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l206" name="l206">206</a></td><td><pre><span class="insertion">+</span><span class="insertion"># Blogspot URLs</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l207" name="l207">207</a></td><td><pre><span class="insertion">+</span><span class="insertion">blogspot_list = (</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l208" name="l208">208</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'live-socks.net',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l209" name="l209">209</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'newfreshproxies-24.blogspot.sg',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l210" name="l210">210</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'proxyserverlist-24.blogspot.sg',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l211" name="l211">211</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'socks24.org',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l212" name="l212">212</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'sock5us.blogspot.com',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l213" name="l213">213</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'sockproxy.blogspot.com',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l214" name="l214">214</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'socksproxylist24.blogspot.com',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l215" name="l215">215</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'newsocks.info',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l216" name="l216">216</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'socksecurelist.ca',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l217" name="l217">217</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'canada-socks247.com',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l218" name="l218">218</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'sock5us.blogspot.com',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l219" name="l219">219</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'socks24.org',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l220" name="l220">220</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'sslproxies24.blogspot.com',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l221" name="l221">221</a></td><td><pre><span class="insertion">+</span> <span class="insertion">'vip-socks24.blogspot.com'</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l222" name="l222">222</a></td><td><pre><span class="insertion">+</span><span class="insertion">)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l223" name="l223">223</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l224" name="l224">224</a></td><td><pre><span class="insertion">+</span><span class="insertion"># Settings</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l225" name="l225">225</a></td><td><pre><span class="insertion">+</span><span class="insertion">max_results = 100 # Maximum number of results per-page.</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l226" name="l226">226</a></td><td><pre><span class="insertion">+</span><span class="insertion">post_depth = 1 # How many days back from the current date to pull posts from. (1 = Today Only)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l227" name="l227">227</a></td><td><pre><span class="insertion">+</span><span class="insertion">timeout = 30 # Timeout for HTTP requests.</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l228" name="l228">228</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l229" name="l229">229</a></td><td><pre><span class="insertion">+</span><span class="insertion"># Globals</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l230" name="l230">230</a></td><td><pre><span class="insertion">+</span><span class="insertion">proxy_file = os.path.join(os.path.dirname(os.path.realpath(__file__)), 'proxies.txt')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l231" name="l231">231</a></td><td><pre><span class="insertion">+</span><span class="insertion">proxy_list = list()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l232" name="l232">232</a></td><td><pre><span class="insertion">+</span><span class="insertion">threads = dict()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l233" name="l233">233</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l234" name="l234">234</a></td><td><pre><span class="insertion">+</span><span class="insertion">def debug(msg):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l235" name="l235">235</a></td><td><pre><span class="insertion">+</span> <span class="insertion">print(f'{get_time()} | [~] - {msg}')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l236" name="l236">236</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l237" name="l237">237</a></td><td><pre><span class="insertion">+</span><span class="insertion">def error(msg, reason):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l238" name="l238">238</a></td><td><pre><span class="insertion">+</span> <span class="insertion">print(f'{get_time()} | [!] - {msg} ({reason})')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l239" name="l239">239</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l240" name="l240">240</a></td><td><pre><span class="insertion">+</span><span class="insertion">def get_time():</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l241" name="l241">241</a></td><td><pre><span class="insertion">+</span> <span class="insertion">return time.strftime('%I:%M:%S')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l242" name="l242">242</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l243" name="l243">243</a></td><td><pre><span class="insertion">+</span><span class="insertion">def get_date():</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l244" name="l244">244</a></td><td><pre><span class="insertion">+</span> <span class="insertion">date = datetime.datetime.today()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l245" name="l245">245</a></td><td><pre><span class="insertion">+</span> <span class="insertion">return '{0}-{1:02d}-{2:02d}'.format(date.year, date.month, date.day)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l246" name="l246">246</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l247" name="l247">247</a></td><td><pre><span class="insertion">+</span><span class="insertion">def get_date_range():</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l248" name="l248">248</a></td><td><pre><span class="insertion">+</span> <span class="insertion">date_range = datetime.datetime.today() - datetime.timedelta(days=post_depth)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l249" name="l249">249</a></td><td><pre><span class="insertion">+</span> <span class="insertion">return '{0}-{1:02d}-{2:02d}'.format(date_range.year, date_range.month, date_range.day)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l250" name="l250">250</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l251" name="l251">251</a></td><td><pre><span class="insertion">+</span><span class="insertion">def get_source(url):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l252" name="l252">252</a></td><td><pre><span class="insertion">+</span> <span class="insertion">req = urllib.request.Request(url)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l253" name="l253">253</a></td><td><pre><span class="insertion">+</span> <span class="insertion">req.add_header('User-Agent', 'Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l254" name="l254">254</a></td><td><pre><span class="insertion">+</span> <span class="insertion">source = urllib.request.urlopen(req, timeout=timeout)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l255" name="l255">255</a></td><td><pre><span class="insertion">+</span> <span class="insertion">charset = source.headers.get_content_charset()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l256" name="l256">256</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if charset:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l257" name="l257">257</a></td><td><pre><span class="insertion">+</span> <span class="insertion">return source.read().decode(charset)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l258" name="l258">258</a></td><td><pre><span class="insertion">+</span> <span class="insertion">else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l259" name="l259">259</a></td><td><pre><span class="insertion">+</span> <span class="insertion">return source.read().decode()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l260" name="l260">260</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l261" name="l261">261</a></td><td><pre><span class="insertion">+</span><span class="insertion">def parse_blogspot(url):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l262" name="l262">262</a></td><td><pre><span class="insertion">+</span> <span class="insertion">global proxy_list</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l263" name="l263">263</a></td><td><pre><span class="insertion">+</span> <span class="insertion">try:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l264" name="l264">264</a></td><td><pre><span class="insertion">+</span> <span class="insertion">source = json.loads(get_source(f'http://{url}/feeds/posts/default?max-results={max_results}&amp;alt=json&amp;updated-min={get_date_range()}T00:00:00&amp;updated-max={get_date()}T23:59:59&amp;orderby=updated'))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l265" name="l265">265</a></td><td><pre><span class="insertion">+</span> <span class="insertion">found = []</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l266" name="l266">266</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if source['feed'].get('entry'):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l267" name="l267">267</a></td><td><pre><span class="insertion">+</span> <span class="insertion">for item in source['feed']['entry']:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l268" name="l268">268</a></td><td><pre><span class="insertion">+</span> <span class="insertion">data = item['content']['$t']</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l269" name="l269">269</a></td><td><pre><span class="insertion">+</span> <span class="insertion">proxies = re.findall('[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+:[0-9]+', data, re.MULTILINE)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l270" name="l270">270</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if proxies:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l271" name="l271">271</a></td><td><pre><span class="insertion">+</span> <span class="insertion">found += proxies</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l272" name="l272">272</a></td><td><pre><span class="insertion">+</span> <span class="insertion">proxy_list += proxies</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l273" name="l273">273</a></td><td><pre><span class="insertion">+</span> <span class="insertion">debug('Found {0} proxies on {1}'.format(format(len(found), ',d'), url))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l274" name="l274">274</a></td><td><pre><span class="insertion">+</span> <span class="insertion">else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l275" name="l275">275</a></td><td><pre><span class="insertion">+</span> <span class="insertion">error('No posts found on page!', url)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l276" name="l276">276</a></td><td><pre><span class="insertion">+</span> <span class="insertion">except Exception as ex:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l277" name="l277">277</a></td><td><pre><span class="insertion">+</span> <span class="insertion">proxy_value = ex</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l278" name="l278">278</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l279" name="l279">279</a></td><td><pre><span class="insertion">+</span><span class="insertion">def scan_blogspots():</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l280" name="l280">280</a></td><td><pre><span class="insertion">+</span> <span class="insertion">for url in blogspot_list:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l281" name="l281">281</a></td><td><pre><span class="insertion">+</span> <span class="insertion">threads[url] = threading.Thread(target=parse_blogspot, args=(url,))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l282" name="l282">282</a></td><td><pre><span class="insertion">+</span> <span class="insertion">for thread in threads:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l283" name="l283">283</a></td><td><pre><span class="insertion">+</span> <span class="insertion">threads[thread].start()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l284" name="l284">284</a></td><td><pre><span class="insertion">+</span> <span class="insertion">time.sleep(10)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l285" name="l285">285</a></td><td><pre><span class="insertion">+</span> <span class="insertion">for thread in threads:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l286" name="l286">286</a></td><td><pre><span class="insertion">+</span> <span class="insertion">threads[thread].join()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l287" name="l287">287</a></td><td><pre><span class="insertion">+</span> <span class="insertion">debug('Found {0} total proxies!'.format(format(len(proxy_list), ',d')))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l288" name="l288">288</a></td><td><pre><span class="insertion">+</span> <span class="insertion">with open (proxy_file, 'w') as proxy__file:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l289" name="l289">289</a></td><td><pre><span class="insertion">+</span> <span class="insertion">for proxy in proxy_list:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l290" name="l290">290</a></td><td><pre><span class="insertion">+</span> <span class="insertion">proxy__file.write(proxy + '\n')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l291" name="l291">291</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l292" name="l292">292</a></td><td><pre><span class="insertion">+</span><span class="insertion"># Main</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l293" name="l293">293</a></td><td><pre><span class="insertion">+</span><span class="insertion">print('#'*56)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l294" name="l294">294</a></td><td><pre><span class="insertion">+</span><span class="insertion">print('#{0}#'.format(''.center(54)))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l295" name="l295">295</a></td><td><pre><span class="insertion">+</span><span class="insertion">print('#{0}#'.format('SockSpot Proxy Scraper'.center(54)))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l296" name="l296">296</a></td><td><pre><span class="insertion">+</span><span class="insertion">print('#{0}#'.format('Developed by acidvegas in Python'.center(54)))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l297" name="l297">297</a></td><td><pre><span class="insertion">+</span><span class="insertion">print('#{0}#'.format('https://acid.vegas/proxytools'.center(54)))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l298" name="l298">298</a></td><td><pre><span class="insertion">+</span><span class="insertion">print('#{0}#'.format(''.center(54)))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l299" name="l299">299</a></td><td><pre><span class="insertion">+</span><span class="insertion">print('#'*56)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l300" name="l300">300</a></td><td><pre><span class="insertion">+</span><span class="insertion">debug(f'Scanning {len(blogspot_list)} URLs from list...')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l301" name="l301">301</a></td><td><pre><span class="insertion">+</span><span class="insertion">threading.Thread(target=scan_blogspots).start()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l302" name="l302">302</a></td><td><pre><span class="insertion">+</span><span class="insertion">for url in blogspot_list:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l303" name="l303">303</a></td><td><pre><span class="insertion">+</span> <span class="insertion">threads[url] = threading.Thread(target=parse_blogspot, args=(url,))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l304" name="l304">304</a></td><td><pre><span class="insertion">+</span><span class="insertion">for thread in threads:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l305" name="l305">305</a></td><td><pre><span class="insertion">+</span> <span class="insertion">threads[thread].start()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l306" name="l306">306</a></td><td><pre><span class="insertion">+</span> <span class="insertion">time.sleep(10)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l307" name="l307">307</a></td><td><pre><span class="insertion">+</span><span class="insertion">for thread in threads:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l308" name="l308">308</a></td><td><pre><span class="insertion">+</span> <span class="insertion">threads[thread].join()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l309" name="l309">309</a></td><td><pre><span class="insertion">+</span><span class="insertion">if proxy_value = 0:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l310" name="l310">310</a></td><td><pre><span class="insertion">+</span> <span class="insertion">error('no socks found')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l311" name="l311">311</a></td><td><pre><span class="insertion">+</span><span class="insertion">debug('Found {0} total proxies!'.format(format(len(proxy_list), ',d')))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l312" name="l312">312</a></td><td><pre><span class="insertion">+</span><span class="insertion">with open (proxy_file, 'w') as proxy__file:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l313" name="l313">313</a></td><td><pre><span class="insertion">+</span> <span class="insertion">for proxy in proxy_list:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l314" name="l314">314</a></td><td><pre><span class="insertion">+</span> <span class="insertion">proxy__file.write(proxy + '\n')</span></pre></td></tr>
</table>
<div id="footer">site generated by <a href="https://github.com/acidvegas/stagit" target="_blank">stagit</a> on <a href="#">05/03/20</a></div>

View File

@ -1,15 +0,0 @@
<!doctype html>
<link rel="stylesheet" href="../style.css">
<title>proxytools</title>
<h1><a href="../index.html" title="Home">&#8962;&#xFE0E;</a> proxytools</h1>
<div style="padding-left:30px">
<h4>collection of scripts for harvesting & testing proxies</h4>
<h5>git clone <a href="https://github.com/acidvegas/proxytools.git" title="proxytools clone URL">https://github.com/acidvegas/proxytools.git</a></h5>
</div>
<hr>
<table id="main" cellpadding="0" cellspacing="0">
<tr id="navigation"><th></th><th>Hash</th><th>Commit message</th><th>Author</th><th>Date</th><th align="right">Files</th><th align="right">+</th><th align="right">-</th></tr>
<tr class="item"><td></td><td><a href="commit/1b6e4b8.html" title="View this commit">1b6e4b8</a></td><td>updated</td><td>acidvegas</td><td>2019-08-02 19:29</td><td align="right">1</td><td align="right">+7</td><td align="right">-4</td></tr>
<tr class="item"><td></td><td><a href="commit/faa1804.html" title="View this commit">faa1804</a></td><td>Initial commit</td><td>acidvegas</td><td>2019-06-28 01:40</td><td align="right">5</td><td align="right">+271</td><td align="right">-0</td></tr>
</table>
<div id="footer">site generated by <a href="https://github.com/acidvegas/stagit" target="_blank">stagit</a> on <a href="#">05/03/20</a></div>

View File

@ -1,668 +0,0 @@
<!doctype html>
<link rel="stylesheet" href="../../style.css">
<title>random :: 4a370e9</title>
<h1><a href="../index.html" title="Back to Repository">&larr;&#xFE0E;</a> random :: 4a370e9</h1>
<hr>
<table id="main" cellpadding="0" cellspacing="0">
<tr class="item"><td class="linenumber"><a href="#l1" name="l1">1</a></td><td><pre><span class="commit">commit 4a370e92de957859f870142d561794cb1facff00</span><span class="commit"> (</span><span class="reference">HEAD -&gt; </span><span class="branch">master</span><span class="commit">)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l2" name="l2">2</a></td><td><pre>Author: acidvegas &lt;acid.vegas@acid.vegas&gt;</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l3" name="l3">3</a></td><td><pre>Date: Thu Aug 1 22:15:39 2019 -0400</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l4" name="l4">4</a></td><td><pre></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l5" name="l5">5</a></td><td><pre> update</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l6" name="l6">6</a></td><td><pre>---</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l7" name="l7">7</a></td><td><pre> 2fa.py | 4 <span class="insertion">+</span><span class="deletion">-</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l8" name="l8">8</a></td><td><pre> acidbox/setup | 10 <span class="insertion">++</span><span class="deletion">--</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l9" name="l9">9</a></td><td><pre> btkb.sh | 12 <span class="deletion">----</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l10" name="l10">10</a></td><td><pre> docs/gpg.md | 28 <span class="insertion">++++</span><span class="deletion">-----</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l11" name="l11">11</a></td><td><pre> docs/ssh.md | 43 <span class="insertion">+++++++</span><span class="deletion">-------</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l12" name="l12">12</a></td><td><pre> gitremote.sh | 14 <span class="deletion">-----</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l13" name="l13">13</a></td><td><pre> mkchroot | 153 <span class="insertion">+++++++++++++++++++++++++++++++++++++++++++++++++</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l14" name="l14">14</a></td><td><pre> networking/ap.py | 23 <span class="deletion">--------</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l15" name="l15">15</a></td><td><pre> networking/discover.py | 4 <span class="insertion">+</span><span class="deletion">-</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l16" name="l16">16</a></td><td><pre> progress.sh | 7 <span class="insertion">+++</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l17" name="l17">17</a></td><td><pre> scales.py | 88 <span class="deletion">----------------------------</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l18" name="l18">18</a></td><td><pre> 11 files changed, 207 insertions(+), 179 deletions(-)</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l19" name="l19">19</a></td><td><pre></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l20" name="l20">20</a></td><td><pre><span class="bold">diff --git a/2fa.py b/2fa.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l21" name="l21">21</a></td><td><pre><span class="bold">index c11897f..50c2add 100644</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l22" name="l22">22</a></td><td><pre><span class="bold">--- a/2fa.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l23" name="l23">23</a></td><td><pre><span class="bold">+++ b/2fa.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l24" name="l24">24</a></td><td><pre><span class="hunk">@@ -35,11 +35,11 @@</span> </span>secret = input('secret : ') or pyotp.random_base32()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l25" name="l25">25</a></td><td><pre> uri = pyotp.totp.TOTP(secret).provisioning_uri(name, issuer)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l26" name="l26">26</a></td><td><pre> qr = qrgen(uri).replace(' ', ' ')[:-1]</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l27" name="l27">27</a></td><td><pre> max_len = len(qr.split('\n')[1])</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l28" name="l28">28</a></td><td><pre><span class="deletion">-print(uri+'\n'+qr)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l29" name="l29">29</a></td><td><pre><span class="insertion">+</span><span class="insertion">print(f'{uri}\n{qr}')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l30" name="l30">30</a></td><td><pre> del name, issuer, uri, qr</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l31" name="l31">31</a></td><td><pre> while True:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l32" name="l32">32</a></td><td><pre> code = pyotp.TOTP(secret).now()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l33" name="l33">33</a></td><td><pre> seconds = int(time.strftime('%S'))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l34" name="l34">34</a></td><td><pre> remain = 60-seconds if seconds &gt;= 30 else 30-seconds</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l35" name="l35">35</a></td><td><pre><span class="deletion">- print(f'{code} ({remain})'.center(max_len), end='\r')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l36" name="l36">36</a></td><td><pre><span class="insertion">+</span> <span class="insertion">print(f'{code} ({remain})'.center(max_len), end='\r')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l37" name="l37">37</a></td><td><pre> time.sleep(1)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l38" name="l38">38</a></td><td><pre><span class="bold">diff --git a/acidbox/setup b/acidbox/setup</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l39" name="l39">39</a></td><td><pre><span class="bold">index aa27fa6..462d262 100755</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l40" name="l40">40</a></td><td><pre><span class="bold">--- a/acidbox/setup</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l41" name="l41">41</a></td><td><pre><span class="bold">+++ b/acidbox/setup</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l42" name="l42">42</a></td><td><pre><span class="hunk">@@ -1,7 +1,7 @@</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l43" name="l43">43</a></td><td><pre> #!/bin/sh</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l44" name="l44">44</a></td><td><pre> set -e</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l45" name="l45">45</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l46" name="l46">46</a></td><td><pre><span class="deletion">-function setup_motd() {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l47" name="l47">47</a></td><td><pre><span class="insertion">+</span><span class="insertion">setup_motd() {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l48" name="l48">48</a></td><td><pre> RESET='\033[0m'</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l49" name="l49">49</a></td><td><pre> GREEN='\033[0;32m'</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l50" name="l50">50</a></td><td><pre> BGREEN='\033[1;32m'</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l51" name="l51">51</a></td><td><pre><span class="hunk">@@ -11,7 +11,7 @@</span> </span>function setup_motd() {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l52" name="l52">52</a></td><td><pre> RED='\033[1;31m'</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l53" name="l53">53</a></td><td><pre> BLUE='\033[1;34m'</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l54" name="l54">54</a></td><td><pre> UBLUE='\033[4;34m'</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l55" name="l55">55</a></td><td><pre><span class="deletion">- echo &quot;╔═══════════════════════╦══════════════════════════════════════════════════════════════╗</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l56" name="l56">56</a></td><td><pre><span class="insertion">+</span> <span class="insertion">echo -e &quot;╔═══════════════════════╦══════════════════════════════════════════════════════════════╗</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l57" name="l57">57</a></td><td><pre> ║${GREEN} ▄▄▄· ▄▄· ▪ ·▄▄▄▄ ${RESET}║ ${RED}Connection Notice${RESET} ║</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l58" name="l58">58</a></td><td><pre> ║${GREEN} ▐█ ▀█ ▐█ ▌▪██ ██▪ ██ ${RESET}╟──────────────────────────────────────────────────────────────╢</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l59" name="l59">59</a></td><td><pre> ║${GREEN} ▄█▀▀█ ██ ▄▄▐█·▐█· ▐█▌ ${RESET}║ ║</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l60" name="l60">60</a></td><td><pre><span class="hunk">@@ -33,7 +33,7 @@</span> </span>${YELLOW}Type ${BGREEN}cmds${YELLOW} to see a list of commands available.${RESET</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l61" name="l61">61</a></td><td><pre> ${GREY}*${YELLOW} Stay in your home directory, keep the system clean, and make regular backups.&quot; &gt; /etc/motd</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l62" name="l62">62</a></td><td><pre> }</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l63" name="l63">63</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l64" name="l64">64</a></td><td><pre><span class="deletion">-function setup_user() {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l65" name="l65">65</a></td><td><pre><span class="insertion">+</span><span class="insertion">setup_user() {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l66" name="l66">66</a></td><td><pre> sudo useradd -m -G ssh -s /bin/bash $1</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l67" name="l67">67</a></td><td><pre> mkdir /home/$1/.scripts</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l68" name="l68">68</a></td><td><pre> wget -O /home/$1/.bashrc https://git.supernets.org/acidvegas/acidbox/blob/master/files/.bashrc</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l69" name="l69">69</a></td><td><pre><span class="hunk">@@ -43,4 +43,6 @@</span> </span>function setup_user() {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l70" name="l70">70</a></td><td><pre> wget -O /home/$1/.scripts/vhosts https://git.supernets.org/acidvegas/acidbox/blob/master/files/vhosts</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l71" name="l71">71</a></td><td><pre> echo &quot;clear &amp;&amp; reset&quot; &gt; /home/$1/.bash_logout</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l72" name="l72">72</a></td><td><pre> echo &quot;[[ -f ~/.bashrc ]] &amp;&amp; . ~/.bashrc&quot; &gt; /home/$1/.bash_profile</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l73" name="l73">73</a></td><td><pre><span class="deletion">-}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l74" name="l74">74</a></td><td><pre><span class="insertion">+</span><span class="insertion">}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l75" name="l75">75</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l76" name="l76">76</a></td><td><pre><span class="insertion">+</span><span class="insertion">setup_motd</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l77" name="l77">77</a></td><td><pre><span class="bold">diff --git a/btkb.sh b/btkb.sh</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l78" name="l78">78</a></td><td><pre><span class="bold">deleted file mode 100644</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l79" name="l79">79</a></td><td><pre><span class="bold">index 6b56fa3..0000000</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l80" name="l80">80</a></td><td><pre><span class="bold">--- a/btkb.sh</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l81" name="l81">81</a></td><td><pre><span class="bold">+++ /dev/null</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l82" name="l82">82</a></td><td><pre><span class="hunk">@@ -1,12 +0,0 @@</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l83" name="l83">83</a></td><td><pre><span class="deletion">-#!/bin/sh</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l84" name="l84">84</a></td><td><pre><span class="deletion">-sudo pacman -S bluez bluez-utils</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l85" name="l85">85</a></td><td><pre><span class="deletion">-sudo systemctl enable bluetooth &amp;&amp; sudo systemctl start bluetooth</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l86" name="l86">86</a></td><td><pre><span class="deletion">-sudo sed -i 's/#AutoEnable=false/AutoEnable=true/' /etc/bluetooth/main.conf</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l87" name="l87">87</a></td><td><pre><span class="deletion">-bluetoothctl power on</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l88" name="l88">88</a></td><td><pre><span class="deletion">-bluetoothctl agent KeyboardOnly</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l89" name="l89">89</a></td><td><pre><span class="deletion">-bluetoothctl pairable on</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l90" name="l90">90</a></td><td><pre><span class="deletion">-bluetoothctl scan on</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l91" name="l91">91</a></td><td><pre><span class="deletion">-bluetoothctl pair CC:C5:0A:20:91:5B</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l92" name="l92">92</a></td><td><pre><span class="deletion">-bluetoothctl trust CC:C5:0A:20:91:5B</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l93" name="l93">93</a></td><td><pre><span class="deletion">-bluetoothctl connect CC:C5:0A:20:91:5B</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l94" name="l94">94</a></td><td><pre><span class="deletion">-bluetoothctl scan off</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l95" name="l95">95</a></td><td><pre><span class="bold">diff --git a/docs/gpg.md b/docs/gpg.md</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l96" name="l96">96</a></td><td><pre><span class="bold">index af24aba..6689b38 100644</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l97" name="l97">97</a></td><td><pre><span class="bold">--- a/docs/gpg.md</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l98" name="l98">98</a></td><td><pre><span class="bold">+++ b/docs/gpg.md</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l99" name="l99">99</a></td><td><pre><span class="hunk">@@ -1,4 +1,6 @@</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l100" name="l100">100</a></td><td><pre><span class="deletion">-# Create a key</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l101" name="l101">101</a></td><td><pre><span class="insertion">+</span><span class="insertion"># GPG Cheat Sheet</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l102" name="l102">102</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l103" name="l103">103</a></td><td><pre><span class="insertion">+</span><span class="insertion">## Create a key</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l104" name="l104">104</a></td><td><pre> `gpg --expert --full-generate-key`</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l105" name="l105">105</a></td><td><pre> * RSA (set your own capabilities)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l106" name="l106">106</a></td><td><pre> * Set to Certify only.</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l107" name="l107">107</a></td><td><pre><span class="hunk">@@ -10,7 +12,7 @@</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l108" name="l108">108</a></td><td><pre> * `adduid`</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l109" name="l109">109</a></td><td><pre> * `save`</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l110" name="l110">110</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l111" name="l111">111</a></td><td><pre><span class="deletion">-# Backup key</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l112" name="l112">112</a></td><td><pre><span class="insertion">+</span><span class="insertion">## Backup key</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l113" name="l113">113</a></td><td><pre> * `mv ~/.gnupg/secring.gpg ~/.backup/gpg/`</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l114" name="l114">114</a></td><td><pre> * `mv ~/.gnupg/pubring.gpg ~/.backup/gpg/`</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l115" name="l115">115</a></td><td><pre> * `gpg -a --export-secret-key &lt;userid&gt; &gt; secret_key.gpg`</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l116" name="l116">116</a></td><td><pre><span class="hunk">@@ -20,25 +22,25 @@</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l117" name="l117">117</a></td><td><pre> * `gpg --list-secret-keys`</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l118" name="l118">118</a></td><td><pre> * `rm secret_subkeys.gpg`</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l119" name="l119">119</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l120" name="l120">120</a></td><td><pre><span class="deletion">-# Revoke cert</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l121" name="l121">121</a></td><td><pre><span class="insertion">+</span><span class="insertion">## Revoke cert</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l122" name="l122">122</a></td><td><pre> * `gpg -a --output revoke.asc --gen-revoke '&lt;fingerprint&gt;'`</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l123" name="l123">123</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l124" name="l124">124</a></td><td><pre><span class="deletion">-# Import/Export public key</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l125" name="l125">125</a></td><td><pre><span class="insertion">+</span><span class="insertion">## Import/Export public key</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l126" name="l126">126</a></td><td><pre> * `gpg --import public.key`</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l127" name="l127">127</a></td><td><pre> * `gpg --output public.key --armor --export &lt;userid&gt;`</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l128" name="l128">128</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l129" name="l129">129</a></td><td><pre><span class="deletion">-# Import/Export private key</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l130" name="l130">130</a></td><td><pre><span class="insertion">+</span><span class="insertion">## Import/Export private key</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l131" name="l131">131</a></td><td><pre> * `gpg --export-secret-keys --armor &lt;userid&gt; &gt; privkey.asc`</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l132" name="l132">132</a></td><td><pre> * `gpg --import privkey.asc`</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l133" name="l133">133</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l134" name="l134">134</a></td><td><pre><span class="deletion">-# Edit keys</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l135" name="l135">135</a></td><td><pre><span class="insertion">+</span><span class="insertion">## Edit keys</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l136" name="l136">136</a></td><td><pre> * `gpg --edit-key &lt;userid&gt;`</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l137" name="l137">137</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l138" name="l138">138</a></td><td><pre><span class="deletion">-# List (secret) keys</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l139" name="l139">139</a></td><td><pre><span class="insertion">+</span><span class="insertion">## List (secret) keys</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l140" name="l140">140</a></td><td><pre> * `gpg --list-keys`</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l141" name="l141">141</a></td><td><pre> * `gpg --list-secret-keys`</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l142" name="l142">142</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l143" name="l143">143</a></td><td><pre><span class="deletion">-# Encrypt/Decrypt</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l144" name="l144">144</a></td><td><pre><span class="insertion">+</span><span class="insertion">## Encrypt/Decrypt</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l145" name="l145">145</a></td><td><pre> * `gpg --recipient user-id --encrypt doc`</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l146" name="l146">146</a></td><td><pre> * `gpg --output doc --decrypt doc.gpg`</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l147" name="l147">147</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l148" name="l148">148</a></td><td><pre><span class="hunk">@@ -47,26 +49,26 @@</span> </span>or...</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l149" name="l149">149</a></td><td><pre> * `gpg -c --s2k-cipher-algo AES256 --s2k-digest-algo SHA512 --s2k-count 65536 doc`</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l150" name="l150">150</a></td><td><pre> * `gpg --output doc --decrypt doc.gpg`</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l151" name="l151">151</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l152" name="l152">152</a></td><td><pre><span class="deletion">-# Signing</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l153" name="l153">153</a></td><td><pre><span class="insertion">+</span><span class="insertion">## Signing</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l154" name="l154">154</a></td><td><pre> * `gpg --output doc.sig --sign doc`</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l155" name="l155">155</a></td><td><pre> * `gpg --output doc.sig --clearsign doc`</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l156" name="l156">156</a></td><td><pre> * `gpg --output doc.sig --detach-sig doc`</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l157" name="l157">157</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l158" name="l158">158</a></td><td><pre><span class="deletion">-# Verify</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l159" name="l159">159</a></td><td><pre><span class="insertion">+</span><span class="insertion">## Verify</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l160" name="l160">160</a></td><td><pre> * `gpg --verify doc.sig`</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l161" name="l161">161</a></td><td><pre> * `gpg --verify archlinux-version.iso.sig`</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l162" name="l162">162</a></td><td><pre> * `gpg --verify archlinux-version.iso.sig /path/to/archlinux-version.iso`</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l163" name="l163">163</a></td><td><pre> * `gpg --with-fingerprint &lt;keyfile&gt;`</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l164" name="l164">164</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l165" name="l165">165</a></td><td><pre><span class="deletion">-# Send keys</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l166" name="l166">166</a></td><td><pre><span class="insertion">+</span><span class="insertion">## Send keys</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l167" name="l167">167</a></td><td><pre> * `gpg --send-keys &lt;userid&gt;`</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l168" name="l168">168</a></td><td><pre> * `gpg --refresh-keys`</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l169" name="l169">169</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l170" name="l170">170</a></td><td><pre><span class="deletion">-# Get keys</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l171" name="l171">171</a></td><td><pre><span class="insertion">+</span><span class="insertion">## Get keys</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l172" name="l172">172</a></td><td><pre> * `gpg --recv-key '&lt;fingerprint&gt;'`</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l173" name="l173">173</a></td><td><pre> * `gpg --fingerprint '&lt;fingerprint&gt;'`</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l174" name="l174">174</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l175" name="l175">175</a></td><td><pre><span class="deletion">-# Sign key</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l176" name="l176">176</a></td><td><pre><span class="insertion">+</span><span class="insertion">## Sign key</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l177" name="l177">177</a></td><td><pre> * `gpg --lsign-key '&lt;fingerprint&gt;'`</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l178" name="l178">178</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l179" name="l179">179</a></td><td><pre> or...</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l180" name="l180">180</a></td><td><pre><span class="bold">diff --git a/docs/ssh.md b/docs/ssh.md</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l181" name="l181">181</a></td><td><pre><span class="bold">index d3fd080..4bc551f 100644</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l182" name="l182">182</a></td><td><pre><span class="bold">--- a/docs/ssh.md</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l183" name="l183">183</a></td><td><pre><span class="bold">+++ b/docs/ssh.md</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l184" name="l184">184</a></td><td><pre><span class="hunk">@@ -1,8 +1,9 @@</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l185" name="l185">185</a></td><td><pre><span class="deletion">-A full write-up on OpenSSH usage with security in mind.</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l186" name="l186">186</a></td><td><pre><span class="insertion">+</span><span class="insertion"># SSH Security</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l187" name="l187">187</a></td><td><pre><span class="insertion">+</span><span class="insertion">&gt; A full write-up on OpenSSH usage with security in mind.</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l188" name="l188">188</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l189" name="l189">189</a></td><td><pre> ---</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l190" name="l190">190</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l191" name="l191">191</a></td><td><pre><span class="deletion">-# Table of Contents</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l192" name="l192">192</a></td><td><pre><span class="insertion">+</span><span class="insertion">## Table of Contents</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l193" name="l193">193</a></td><td><pre> * [Generating An SSH Key Pair](#generating-an-ssh-key-pair)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l194" name="l194">194</a></td><td><pre> - [Linux](#linux)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l195" name="l195">195</a></td><td><pre> - [Windows](#windows)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l196" name="l196">196</a></td><td><pre><span class="hunk">@@ -29,8 +30,8 @@</span> </span>A full write-up on OpenSSH usage with security in mind.</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l197" name="l197">197</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l198" name="l198">198</a></td><td><pre> ---</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l199" name="l199">199</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l200" name="l200">200</a></td><td><pre><span class="deletion">-## Generating An SSH Key Pair</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l201" name="l201">201</a></td><td><pre><span class="deletion">-### Linux</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l202" name="l202">202</a></td><td><pre><span class="insertion">+</span><span class="insertion">### Generating An SSH Key Pair</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l203" name="l203">203</a></td><td><pre><span class="insertion">+</span><span class="insertion">#### Linux</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l204" name="l204">204</a></td><td><pre> Generate a key using the **Ed25519** algorithm with 500 KDF rounds:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l205" name="l205">205</a></td><td><pre> * `ssh-keygen -t ed25519 -a 500 -C &quot;$(whoami)@$(hostname)-$(date -I)&quot;`</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l206" name="l206">206</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l207" name="l207">207</a></td><td><pre><span class="hunk">@@ -42,7 +43,7 @@</span> </span>You only need to backup your private key. Public keys can be regenerated from th</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l208" name="l208">208</a></td><td><pre> Copy your public key to clipboard:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l209" name="l209">209</a></td><td><pre> * `cat ~/.ssh/acidvegas@pi-2017-01-01.pub`</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l210" name="l210">210</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l211" name="l211">211</a></td><td><pre><span class="deletion">-### Windows</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l212" name="l212">212</a></td><td><pre><span class="insertion">+</span><span class="insertion">#### Windows</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l213" name="l213">213</a></td><td><pre> Download &amp; run [puttygen](https://the.earth.li/~sgtatham/putty/latest/w32/puttygen.exe).</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l214" name="l214">214</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l215" name="l215">215</a></td><td><pre> Once opened, change the key type to **ED25519** under the *Parameters* box, and then click the *Generate* button.</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l216" name="l216">216</a></td><td><pre><span class="hunk">@@ -53,8 +54,8 @@</span> </span>You only need to backup your private key. Public keys can be regenerated by clic</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l217" name="l217">217</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l218" name="l218">218</a></td><td><pre> Copy the data in the box labeled *Public key for pasting into OpenSSH authorized_keys file*.</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l219" name="l219">219</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l220" name="l220">220</a></td><td><pre><span class="deletion">-## Getting Your Client To Use Your SSH Key</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l221" name="l221">221</a></td><td><pre><span class="deletion">-### Linux</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l222" name="l222">222</a></td><td><pre><span class="insertion">+</span><span class="insertion">### Getting Your Client To Use Your SSH Key</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l223" name="l223">223</a></td><td><pre><span class="insertion">+</span><span class="insertion">#### Linux</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l224" name="l224">224</a></td><td><pre> * `ssh -p 65150 -i ~/.ssh/acidvegas@pi-2017-01-01 acidvegas@192.168.1.10`</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l225" name="l225">225</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l226" name="l226">226</a></td><td><pre> or...</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l227" name="l227">227</a></td><td><pre><span class="hunk">@@ -71,7 +72,7 @@</span> </span>Host acidbox</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l228" name="l228">228</a></td><td><pre> * `chmod 600 ~/.ssh/config`</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l229" name="l229">229</a></td><td><pre> * Usage: `ssh acidbox`</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l230" name="l230">230</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l231" name="l231">231</a></td><td><pre><span class="deletion">-### Windows</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l232" name="l232">232</a></td><td><pre><span class="insertion">+</span><span class="insertion">#### Windows</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l233" name="l233">233</a></td><td><pre> Download &amp; run the [putty](https://the.earth.li/~sgtatham/putty/latest/w32/putty.exe) client.</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l234" name="l234">234</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l235" name="l235">235</a></td><td><pre> Once opened, select `Connection -&gt; SSH -&gt; Auth` from the *Category* box. Click the *Browse* button and select your private key.</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l236" name="l236">236</a></td><td><pre><span class="hunk">@@ -84,8 +85,8 @@</span> </span>SSH into your server by clicking your saved session from the *Saved Sessions* bo</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l237" name="l237">237</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l238" name="l238">238</a></td><td><pre> ---</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l239" name="l239">239</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l240" name="l240">240</a></td><td><pre><span class="deletion">-## Setup Server</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l241" name="l241">241</a></td><td><pre><span class="deletion">-### Harden OpenSSH Daemon</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l242" name="l242">242</a></td><td><pre><span class="insertion">+</span><span class="insertion">### Setup Server</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l243" name="l243">243</a></td><td><pre><span class="insertion">+</span><span class="insertion">#### Harden OpenSSH Daemon</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l244" name="l244">244</a></td><td><pre> * `nano /etc/ssh/sshd_config`</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l245" name="l245">245</a></td><td><pre> ```</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l246" name="l246">246</a></td><td><pre> AddressFamily any</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l247" name="l247">247</a></td><td><pre><span class="hunk">@@ -128,7 +129,7 @@</span> </span>Protocol 2</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l248" name="l248">248</a></td><td><pre> * The `Port` option should be set to a non-standard port *(High-value port number recommended)*. </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l249" name="l249">249</a></td><td><pre> * The `PrintMotd` option can be changed to **yes** if the file `/etc/motd` exists. This is shown after the user authenticates.</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l250" name="l250">250</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l251" name="l251">251</a></td><td><pre><span class="deletion">-### Create A New User On The Server</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l252" name="l252">252</a></td><td><pre><span class="insertion">+</span><span class="insertion">#### Create A New User On The Server</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l253" name="l253">253</a></td><td><pre> Create a new user on the server with a password:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l254" name="l254">254</a></td><td><pre> * `useradd -m -s /bin/bash acidvegas`</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l255" name="l255">255</a></td><td><pre> * `passwd acidvegas`</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l256" name="l256">256</a></td><td><pre><span class="hunk">@@ -137,7 +138,7 @@</span> </span>Create an **ssh** group and add your user to the group.</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l257" name="l257">257</a></td><td><pre> * `groupadd ssh`</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l258" name="l258">258</a></td><td><pre> * `gpasswd -a acidvegas ssh`</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l259" name="l259">259</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l260" name="l260">260</a></td><td><pre><span class="deletion">-### Copy Your Public Key To Your Shell</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l261" name="l261">261</a></td><td><pre><span class="insertion">+</span><span class="insertion">#### Copy Your Public Key To Your Shell</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l262" name="l262">262</a></td><td><pre> * `nano /etc/ssh/authorized_keys/acidvegas` *(Paste your public key data in this file)*</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l263" name="l263">263</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l264" name="l264">264</a></td><td><pre> **Note:** This is only required if you are using the `AuthorizedKeysFile /etc/ssh/authorized_keys/%u` line in your `sshd_config` file. For using the standard `~/.ssh/authorized_keys` file, do the follow:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l265" name="l265">265</a></td><td><pre><span class="hunk">@@ -152,8 +153,8 @@</span> </span>Create an **ssh** group and add your user to the group.</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l266" name="l266">266</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l267" name="l267">267</a></td><td><pre> ---</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l268" name="l268">268</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l269" name="l269">269</a></td><td><pre><span class="deletion">-# Extra Security</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l270" name="l270">270</a></td><td><pre><span class="deletion">-### Allow Incoming SSH Connections Through IPTables</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l271" name="l271">271</a></td><td><pre><span class="insertion">+</span><span class="insertion">### Extra Security</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l272" name="l272">272</a></td><td><pre><span class="insertion">+</span><span class="insertion">#### Allow Incoming SSH Connections Through IPTables</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l273" name="l273">273</a></td><td><pre> ```</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l274" name="l274">274</a></td><td><pre> iptables -A INPUT -i eth0 -p tcp --dport 65150 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l275" name="l275">275</a></td><td><pre> iptables -A OUTPUT -o eth0 -p tcp --sport 65150 -m conntrack --ctstate ESTABLISHED -j ACCEPT</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l276" name="l276">276</a></td><td><pre><span class="hunk">@@ -164,10 +165,10 @@</span> </span>You can also allow only incomming connection from a specific IP address instead</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l277" name="l277">277</a></td><td><pre> iptables -A INPUT -i eth0 -p tcp -s 192.168.1.99 --dport 65150 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l278" name="l278">278</a></td><td><pre> ```</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l279" name="l279">279</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l280" name="l280">280</a></td><td><pre><span class="deletion">-### Lock Users In A Chroot Jail Environment</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l281" name="l281">281</a></td><td><pre><span class="insertion">+</span><span class="insertion">#### Lock Users In A Chroot Jail Environment</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l282" name="l282">282</a></td><td><pre> See [mkchroot](https://github.com/acidvegas/mkchroot) repository for details.</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l283" name="l283">283</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l284" name="l284">284</a></td><td><pre><span class="deletion">-### Port Knocking</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l285" name="l285">285</a></td><td><pre><span class="insertion">+</span><span class="insertion">#### Port Knocking</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l286" name="l286">286</a></td><td><pre> The following is an example which uses the port knocking sequence `8881 -&gt; 7777 -&gt; 9991` to open port 65150 for 30 seconds.</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l287" name="l287">287</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l288" name="l288">288</a></td><td><pre> ##### Server </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l289" name="l289">289</a></td><td><pre><span class="hunk">@@ -216,8 +217,8 @@</span> </span>Download &amp; install the [knockd](http://www.zeroflux.org/projects/knock) package.</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l290" name="l290">290</a></td><td><pre> stop_command = /usr/bin/iptables -D TCP -s %IP% -p tcp --dport 65150 -j ACCEPT</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l291" name="l291">291</a></td><td><pre> ```</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l292" name="l292">292</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l293" name="l293">293</a></td><td><pre><span class="deletion">-##### Knocking Your Server</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l294" name="l294">294</a></td><td><pre><span class="deletion">-###### Using Nmap</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l295" name="l295">295</a></td><td><pre><span class="insertion">+</span><span class="insertion">#### Knocking Your Server</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l296" name="l296">296</a></td><td><pre><span class="insertion">+</span><span class="insertion">##### Using Nmap</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l297" name="l297">297</a></td><td><pre> Download &amp; install the [nmap](https://nmap.org/) package.</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l298" name="l298">298</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l299" name="l299">299</a></td><td><pre> * `nano knock.sh`</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l300" name="l300">300</a></td><td><pre><span class="hunk">@@ -232,12 +233,12 @@</span> </span>done</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l301" name="l301">301</a></td><td><pre> ```</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l302" name="l302">302</a></td><td><pre> * Usage: `sh knock.sh example.server.com 8881 7777 9991`</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l303" name="l303">303</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l304" name="l304">304</a></td><td><pre><span class="deletion">-###### Using Knockd</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l305" name="l305">305</a></td><td><pre><span class="insertion">+</span><span class="insertion">##### Using Knockd</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l306" name="l306">306</a></td><td><pre> Download &amp; install the [knockd](http://www.zeroflux.org/projects/knock) package.</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l307" name="l307">307</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l308" name="l308">308</a></td><td><pre> * `knock -v example.server.com 8881:tcp 7777:tcp 9991:tcp`</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l309" name="l309">309</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l310" name="l310">310</a></td><td><pre><span class="deletion">-### Jump Hosts</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l311" name="l311">311</a></td><td><pre><span class="insertion">+</span><span class="insertion">#### Jump Hosts</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l312" name="l312">312</a></td><td><pre> * `ssh -J &lt;jumphost&gt; &lt;host&gt;`</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l313" name="l313">313</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l314" name="l314">314</a></td><td><pre> The `&lt;jumphost&gt;` option can be `user@host`, `user@host:port` or an host setup in your `~/.ssh/config`.</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l315" name="l315">315</a></td><td><pre><span class="hunk">@@ -265,7 +266,7 @@</span> </span>Connect to your target host with `ssh targetbox`</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l316" name="l316">316</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l317" name="l317">317</a></td><td><pre> ---</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l318" name="l318">318</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l319" name="l319">319</a></td><td><pre><span class="deletion">-## Sources</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l320" name="l320">320</a></td><td><pre><span class="insertion">+</span><span class="insertion">### Sources</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l321" name="l321">321</a></td><td><pre> * https://wiki.archlinux.org/index.php/Port_knocking</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l322" name="l322">322</a></td><td><pre> * https://wiki.archlinux.org/index.php/SSH_keys</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l323" name="l323">323</a></td><td><pre> * https://wiki.mozilla.org/Security/Guidelines/OpenSSH</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l324" name="l324">324</a></td><td><pre><span class="bold">diff --git a/gitremote.sh b/gitremote.sh</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l325" name="l325">325</a></td><td><pre><span class="bold">deleted file mode 100644</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l326" name="l326">326</a></td><td><pre><span class="bold">index ce6bb3f..0000000</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l327" name="l327">327</a></td><td><pre><span class="bold">--- a/gitremote.sh</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l328" name="l328">328</a></td><td><pre><span class="bold">+++ /dev/null</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l329" name="l329">329</a></td><td><pre><span class="hunk">@@ -1,14 +0,0 @@</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l330" name="l330">330</a></td><td><pre><span class="deletion">-#!/bin/sh</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l331" name="l331">331</a></td><td><pre><span class="deletion">-set -e</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l332" name="l332">332</a></td><td><pre><span class="deletion">-for u in $HOME/dev/git/*/; do</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l333" name="l333">333</a></td><td><pre><span class="deletion">- for d in $(find $u -name .git -type d -prune | sort); do</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l334" name="l334">334</a></td><td><pre><span class="deletion">- u=$(basename $u)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l335" name="l335">335</a></td><td><pre><span class="deletion">- r=$(basename -s .git `git --git-dir $d config --get remote.origin.url`)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l336" name="l336">336</a></td><td><pre><span class="deletion">- echo &quot;updating $r...&quot;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l337" name="l337">337</a></td><td><pre><span class="deletion">- git -C $d remote remove origin</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l338" name="l338">338</a></td><td><pre><span class="deletion">- git -C $d remote add origin git@github.com:$s/$r.git</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l339" name="l339">339</a></td><td><pre><span class="deletion">- git -C $d remote set-url --add --push origin git@github.com:$u/$r.git</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l340" name="l340">340</a></td><td><pre><span class="deletion">- git -C $d remote set-url --add --push origin git@gitlab.com:$u/$r.git</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l341" name="l341">341</a></td><td><pre><span class="deletion">- git -C $d remote set-url --add --push origin git@contra:$r.git</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l342" name="l342">342</a></td><td><pre><span class="deletion">- done</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l343" name="l343">343</a></td><td><pre><span class="deletion">-done</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l344" name="l344">344</a></td><td><pre><span class="bold">diff --git a/mkchroot b/mkchroot</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l345" name="l345">345</a></td><td><pre><span class="bold">new file mode 100755</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l346" name="l346">346</a></td><td><pre><span class="bold">index 0000000..4b22e2c</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l347" name="l347">347</a></td><td><pre><span class="bold">--- /dev/null</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l348" name="l348">348</a></td><td><pre><span class="bold">+++ b/mkchroot</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l349" name="l349">349</a></td><td><pre><span class="hunk">@@ -0,0 +1,153 @@</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l350" name="l350">350</a></td><td><pre><span class="insertion">+</span><span class="insertion">#!/bin/sh</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l351" name="l351">351</a></td><td><pre><span class="insertion">+</span><span class="insertion">set -e</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l352" name="l352">352</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l353" name="l353">353</a></td><td><pre><span class="insertion">+</span><span class="insertion">CHROOT_BASE=&quot;/var/jail&quot;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l354" name="l354">354</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l355" name="l355">355</a></td><td><pre><span class="insertion">+</span><span class="insertion">display_help() {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l356" name="l356">356</a></td><td><pre><span class="insertion">+</span> <span class="insertion">echo &quot;usage: mkchroot [option]&quot;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l357" name="l357">357</a></td><td><pre><span class="insertion">+</span> <span class="insertion">echo -e &quot;\nexample: mkchroot --create=acidvegas bash cp irssi ls mkdir mv rm screen wget&quot;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l358" name="l358">358</a></td><td><pre><span class="insertion">+</span> <span class="insertion">echo -e &quot;\noptions:&quot;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l359" name="l359">359</a></td><td><pre><span class="insertion">+</span> <span class="insertion">echo &quot; -c, --create=USER &lt;cmds&gt; create a new chroot jail&quot;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l360" name="l360">360</a></td><td><pre><span class="insertion">+</span> <span class="insertion">echo &quot; -d, --destroy=USER destroy a chroot jail&quot;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l361" name="l361">361</a></td><td><pre><span class="insertion">+</span> <span class="insertion">echo &quot; -l, --list list chroot jails&quot;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l362" name="l362">362</a></td><td><pre><span class="insertion">+</span> <span class="insertion">echo &quot; -h, --help display this help and exit&quot;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l363" name="l363">363</a></td><td><pre><span class="insertion">+</span><span class="insertion">}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l364" name="l364">364</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l365" name="l365">365</a></td><td><pre><span class="insertion">+</span><span class="insertion">create_jail() {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l366" name="l366">366</a></td><td><pre><span class="insertion">+</span> <span class="insertion">[ $EUID -ne 0 ] &amp;&amp; echo &quot;insufficent privledges&quot; &amp;&amp; exit 1</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l367" name="l367">367</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if [ ${#1} -ne 2 ]; then</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l368" name="l368">368</a></td><td><pre><span class="insertion">+</span> <span class="insertion">CHROOT_USER=&quot;${1#*=}&quot;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l369" name="l369">369</a></td><td><pre><span class="insertion">+</span> <span class="insertion">CHROOT_CMDS=&quot;${@:2}&quot;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l370" name="l370">370</a></td><td><pre><span class="insertion">+</span> <span class="insertion">else</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l371" name="l371">371</a></td><td><pre><span class="insertion">+</span> <span class="insertion">CHROOT_USER=$2</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l372" name="l372">372</a></td><td><pre><span class="insertion">+</span> <span class="insertion">CHROOT_CMDS=&quot;${@:3}&quot;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l373" name="l373">373</a></td><td><pre><span class="insertion">+</span> <span class="insertion">fi</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l374" name="l374">374</a></td><td><pre><span class="insertion">+</span> <span class="insertion">CHROOT_DIR=&quot;$CHROOT_BASE/$CHROOT_USER&quot;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l375" name="l375">375</a></td><td><pre><span class="insertion">+</span> <span class="insertion">CHROOT_PWD=&quot;$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 25 | head -n 1)&quot;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l376" name="l376">376</a></td><td><pre><span class="insertion">+</span> <span class="insertion">[ -d $CHROOT_DIR ] &amp;&amp; echo &quot;chroot jail already exists for $CHROOT_USER at $CHROOT_DIR&quot; &amp;&amp; exit 1</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l377" name="l377">377</a></td><td><pre><span class="insertion">+</span> <span class="insertion">echo &quot;creating initial directory structure...&quot;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l378" name="l378">378</a></td><td><pre><span class="insertion">+</span> <span class="insertion">mkdir -v $CHROOT_DIR</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l379" name="l379">379</a></td><td><pre><span class="insertion">+</span> <span class="insertion">mkdir -pv $CHROOT_DIR/{dev,etc,home,proc,usr}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l380" name="l380">380</a></td><td><pre><span class="insertion">+</span> <span class="insertion">mkdir -v $CHROOT_DIR/dev/pts</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l381" name="l381">381</a></td><td><pre><span class="insertion">+</span> <span class="insertion">mkdir -v $CHROOT_DIR/home/$CHROOT_USER</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l382" name="l382">382</a></td><td><pre><span class="insertion">+</span> <span class="insertion">mkdir -v $CHROOT_DIR/usr/share</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l383" name="l383">383</a></td><td><pre><span class="insertion">+</span> <span class="insertion">echo &quot;making required devices nodes...&quot;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l384" name="l384">384</a></td><td><pre><span class="insertion">+</span> <span class="insertion">mknod -m 666 $CHROOT_DIR/dev/null c 1 3</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l385" name="l385">385</a></td><td><pre><span class="insertion">+</span> <span class="insertion">echo &quot;created device node: $CHROOT_DIR/dev/null&quot;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l386" name="l386">386</a></td><td><pre><span class="insertion">+</span> <span class="insertion">mknod -m 666 $CHROOT_DIR/dev/tty c 5 0</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l387" name="l387">387</a></td><td><pre><span class="insertion">+</span> <span class="insertion">echo &quot;created device node: $CHROOT_DIR/dev/tty&quot;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l388" name="l388">388</a></td><td><pre><span class="insertion">+</span> <span class="insertion">mknod -m 666 $CHROOT_DIR/dev/random c 1 8</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l389" name="l389">389</a></td><td><pre><span class="insertion">+</span> <span class="insertion">echo &quot;created device node: $CHROOT_DIR/dev/random&quot;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l390" name="l390">390</a></td><td><pre><span class="insertion">+</span> <span class="insertion">mknod -m 666 $CHROOT_DIR/dev/zero c 1 5</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l391" name="l391">391</a></td><td><pre><span class="insertion">+</span> <span class="insertion">echo &quot;created device node: $CHROOT_DIR/dev/zero&quot;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l392" name="l392">392</a></td><td><pre><span class="insertion">+</span> <span class="insertion">echo &quot;copying required shared libraries...&quot;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l393" name="l393">393</a></td><td><pre><span class="insertion">+</span> <span class="insertion">for x in ${CHROOT_CMDS[@]}; do</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l394" name="l394">394</a></td><td><pre><span class="insertion">+</span> <span class="insertion">for y in $(ldd $(which $x)|grep -v dynamic|cut -d &quot; &quot; -f 3|sed 's/://'|sort|uniq); do</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l395" name="l395">395</a></td><td><pre><span class="insertion">+</span> <span class="insertion">cp --parents -v $y $CHROOT_DIR</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l396" name="l396">396</a></td><td><pre><span class="insertion">+</span> <span class="insertion">done</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l397" name="l397">397</a></td><td><pre><span class="insertion">+</span> <span class="insertion">done</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l398" name="l398">398</a></td><td><pre><span class="insertion">+</span> <span class="insertion">echo &quot;copying additional required files...&quot;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l399" name="l399">399</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if [ ! -d $CHROOT_DIR/bin ] &amp;&amp; [ -d $CHROOT_DIR/usr/bin ]; then</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l400" name="l400">400</a></td><td><pre><span class="insertion">+</span> <span class="insertion">cp -r $CHROOT_DIR/usr/bin $CHROOT_DIR/bin # This can be improved.</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l401" name="l401">401</a></td><td><pre><span class="insertion">+</span> <span class="insertion">fi</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l402" name="l402">402</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if [ ! -d $CHROOT_DIR/lib ] &amp;&amp; [ -d $CHROOT_DIR/usr/lib ]; then</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l403" name="l403">403</a></td><td><pre><span class="insertion">+</span> <span class="insertion">cp -r $CHROOT_DIR/usr/lib $CHROOT_DIR/lib # This can be improved.</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l404" name="l404">404</a></td><td><pre><span class="insertion">+</span> <span class="insertion">fi</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l405" name="l405">405</a></td><td><pre><span class="insertion">+</span> <span class="insertion">cp -v /etc/{hosts,ld.so.cache,ld.so.conf,localtime,nsswitch.conf,resolv.conf} $CHROOT_DIR/etc/</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l406" name="l406">406</a></td><td><pre><span class="insertion">+</span> <span class="insertion">cp -v /lib/ld-linux.so.* $CHROOT_DIR/lib/</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l407" name="l407">407</a></td><td><pre><span class="insertion">+</span> <span class="insertion">cp -rv /lib/terminfo/ $CHROOT_DIR/lib/</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l408" name="l408">408</a></td><td><pre><span class="insertion">+</span> <span class="insertion">cp -rv /usr/share/terminfo/ $CHROOT_DIR/usr/share/</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l409" name="l409">409</a></td><td><pre><span class="insertion">+</span> <span class="insertion">grep $CHROOT_USER /etc/passwd &gt; $CHROOT_DIR/etc/passwd</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l410" name="l410">410</a></td><td><pre><span class="insertion">+</span> <span class="insertion">grep $CHROOT_USER /etc/group &gt; $CHROOT_DIR/etc/group</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l411" name="l411">411</a></td><td><pre><span class="insertion">+</span> <span class="insertion">grep $CHROOT_USER /etc/shadow &gt; $CHROOT_DIR/etc/shadow</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l412" name="l412">412</a></td><td><pre><span class="insertion">+</span> <span class="insertion">echo -e &quot;[[ \$- != *i* ]] &amp;&amp; return\nalias ls='ls --color=auto'\nPS1='\e[1;30mjail\e[0m | \e[1;34m&gt; \e[0;32m\w \e[0;37m: '&quot; &gt; $CHROOT_DIR/home/$CHROOT_USER/.bash_profile</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l413" name="l413">413</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if ! id $CHROOT_USER &gt;/dev/null 2&gt;&amp;1; then</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l414" name="l414">414</a></td><td><pre><span class="insertion">+</span> <span class="insertion">useradd -s /bin/bash -M -p $CHROOT_PWD $CHROOT_USER</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l415" name="l415">415</a></td><td><pre><span class="insertion">+</span> <span class="insertion">echo &quot;added $CHROOT_USER user&quot;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l416" name="l416">416</a></td><td><pre><span class="insertion">+</span> <span class="insertion">fi</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l417" name="l417">417</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if [ ! $(getent group jail) ]; then</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l418" name="l418">418</a></td><td><pre><span class="insertion">+</span> <span class="insertion">groupadd jail</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l419" name="l419">419</a></td><td><pre><span class="insertion">+</span> <span class="insertion">echo &quot;added jail group&quot;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l420" name="l420">420</a></td><td><pre><span class="insertion">+</span> <span class="insertion">fi</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l421" name="l421">421</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if ! getent group jail | grep &amp;&gt;/dev/null &quot;\b${CHROOT_USER}\b&quot;; then</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l422" name="l422">422</a></td><td><pre><span class="insertion">+</span> <span class="insertion">gpasswd -a $CHROOT_USER jail</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l423" name="l423">423</a></td><td><pre><span class="insertion">+</span> <span class="insertion">echo &quot;added $CHROOT_USER to jail group&quot;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l424" name="l424">424</a></td><td><pre><span class="insertion">+</span> <span class="insertion">fi</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l425" name="l425">425</a></td><td><pre><span class="insertion">+</span> <span class="insertion">echo &quot;setting permissions...&quot;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l426" name="l426">426</a></td><td><pre><span class="insertion">+</span> <span class="insertion">chown -v root:root $CHROOT_DIR</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l427" name="l427">427</a></td><td><pre><span class="insertion">+</span> <span class="insertion">chown -v root:tty $CHROOT_DIR/dev/tty</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l428" name="l428">428</a></td><td><pre><span class="insertion">+</span> <span class="insertion">chown -v $CHROOT_USER:$CHROOT_USER $CHROOT_DIR/home/$CHROOT_USER</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l429" name="l429">429</a></td><td><pre><span class="insertion">+</span> <span class="insertion">chmod -Rv 755 $CHROOT_DIR/home/$CHROOT_USER</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l430" name="l430">430</a></td><td><pre><span class="insertion">+</span> <span class="insertion">chattr +i $CHROOT_DIR/etc/group</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l431" name="l431">431</a></td><td><pre><span class="insertion">+</span> <span class="insertion">chattr +i $CHROOT_DIR/etc/hosts</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l432" name="l432">432</a></td><td><pre><span class="insertion">+</span> <span class="insertion">chattr +i $CHROOT_DIR/etc/nsswitch.conf</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l433" name="l433">433</a></td><td><pre><span class="insertion">+</span> <span class="insertion">chattr +i $CHROOT_DIR/etc/passwd</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l434" name="l434">434</a></td><td><pre><span class="insertion">+</span> <span class="insertion">chattr +i $CHROOT_DIR/etc/resolv.conf</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l435" name="l435">435</a></td><td><pre><span class="insertion">+</span> <span class="insertion">chattr +i $CHROOT_DIR/etc/shadow</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l436" name="l436">436</a></td><td><pre><span class="insertion">+</span> <span class="insertion">echo &quot;mounting pseudoterminal slave device on $CHROOT_DIR/dev/pts&quot;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l437" name="l437">437</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if ! grep -q &quot;devpts $CHROOT_DIR/dev/pts devpts rw,noatime,mode=600,ptmxmode=000 0 0&quot; /etc/fstab; then</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l438" name="l438">438</a></td><td><pre><span class="insertion">+</span> <span class="insertion">echo -e &quot;\ndevpts $CHROOT_DIR/dev/pts devpts rw,noatime,mode=600,ptmxmode=000 0 0&quot; &gt;&gt; /etc/fstab</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l439" name="l439">439</a></td><td><pre><span class="insertion">+</span> <span class="insertion">mount -av</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l440" name="l440">440</a></td><td><pre><span class="insertion">+</span> <span class="insertion">fi</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l441" name="l441">441</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if ! grep -q &quot;proc $CHROOT_DIR/proc proc rw,noatime,gid=26,hidepid=2 0 0&quot; /etc/fstab; then</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l442" name="l442">442</a></td><td><pre><span class="insertion">+</span> <span class="insertion">echo -e &quot;\nproc $CHROOT_DIR/proc proc rw,noatime,gid=26,hidepid=2 0 0&quot; &gt;&gt; /etc/fstab</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l443" name="l443">443</a></td><td><pre><span class="insertion">+</span> <span class="insertion">mount -av</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l444" name="l444">444</a></td><td><pre><span class="insertion">+</span> <span class="insertion">fi</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l445" name="l445">445</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if grep -q &quot;AuthorizedKeysFile&quot; /etc/ssh/sshd_config; then</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l446" name="l446">446</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if ! grep -q &quot;AuthorizedKeysFile /etc/ssh/authorized_keys/%u&quot; /etc/ssh/sshd_config; then</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l447" name="l447">447</a></td><td><pre><span class="insertion">+</span> <span class="insertion">sed 's/AuthorizedKeysFile.*/AuthorizedKeysFile /etc/ssh/authorized_keys/%u/' /etc/ssh/sshd_config &gt; /etc/ssh/sshd_config</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l448" name="l448">448</a></td><td><pre><span class="insertion">+</span> <span class="insertion">echo &quot;updated sshd_config with AuthorizedKeysFile&quot;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l449" name="l449">449</a></td><td><pre><span class="insertion">+</span> <span class="insertion">fi</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l450" name="l450">450</a></td><td><pre><span class="insertion">+</span> <span class="insertion">else</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l451" name="l451">451</a></td><td><pre><span class="insertion">+</span> <span class="insertion">sed -i &quot;1iAuthorizedKeysFile /etc/ssh/authorized_keys/%u&quot; /etc/ssh/sshd_config</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l452" name="l452">452</a></td><td><pre><span class="insertion">+</span> <span class="insertion">fi</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l453" name="l453">453</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if ! grep $'Match Group jail\n\tChrootDirectory /var/jail/%u' /etc/ssh/sshd_config; then</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l454" name="l454">454</a></td><td><pre><span class="insertion">+</span> <span class="insertion">echo -e &quot;\nMatch Group jail\n\tChrootDirectory /var/jail/%u&quot; &gt;&gt; /etc/ssh/sshd_config</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l455" name="l455">455</a></td><td><pre><span class="insertion">+</span> <span class="insertion">echo &quot;updated sshd_config with ChrootDirectory&quot;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l456" name="l456">456</a></td><td><pre><span class="insertion">+</span> <span class="insertion">fi</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l457" name="l457">457</a></td><td><pre><span class="insertion">+</span> <span class="insertion">echo -e &quot;\nchroot jail for $CHROOT_USER created at $CHROOT_DIR&quot;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l458" name="l458">458</a></td><td><pre><span class="insertion">+</span> <span class="insertion">echo &quot;password for $CHROOT_USER is: $CHROOT_PWD&quot;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l459" name="l459">459</a></td><td><pre><span class="insertion">+</span><span class="insertion">}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l460" name="l460">460</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l461" name="l461">461</a></td><td><pre><span class="insertion">+</span><span class="insertion">destroy_jail() {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l462" name="l462">462</a></td><td><pre><span class="insertion">+</span> <span class="insertion">[ $EUID -ne 0 ] &amp;&amp; echo &quot;insufficent privledges&quot; &amp;&amp; exit 1</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l463" name="l463">463</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if [[ ${#1} -ne 2 ]]; then</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l464" name="l464">464</a></td><td><pre><span class="insertion">+</span> <span class="insertion">CHROOT_USER=&quot;${1#*=}&quot;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l465" name="l465">465</a></td><td><pre><span class="insertion">+</span> <span class="insertion">else</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l466" name="l466">466</a></td><td><pre><span class="insertion">+</span> <span class="insertion">CHROOT_USER=$2</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l467" name="l467">467</a></td><td><pre><span class="insertion">+</span> <span class="insertion">fi</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l468" name="l468">468</a></td><td><pre><span class="insertion">+</span> <span class="insertion">CHROOT_DIR=&quot;$CHROOT_BASE/$CHROOT_USER&quot;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l469" name="l469">469</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if mount | grep -q &quot;$CHROOT_DIR/dev/pts&quot;; then</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l470" name="l470">470</a></td><td><pre><span class="insertion">+</span> <span class="insertion">umount -v $CHROOT_DIR/dev/pts</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l471" name="l471">471</a></td><td><pre><span class="insertion">+</span> <span class="insertion">echo &quot;unmounted pseudoterminal slave device&quot;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l472" name="l472">472</a></td><td><pre><span class="insertion">+</span> <span class="insertion">fi</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l473" name="l473">473</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if mount | grep -q &quot;$CHROOT_DIR/proc&quot;; then</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l474" name="l474">474</a></td><td><pre><span class="insertion">+</span> <span class="insertion">umount -v $CHROOT_DIR/proc</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l475" name="l475">475</a></td><td><pre><span class="insertion">+</span> <span class="insertion">echo &quot;unmounted proc device&quot;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l476" name="l476">476</a></td><td><pre><span class="insertion">+</span> <span class="insertion">fi</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l477" name="l477">477</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if [ -d $CHROOT_DIR ]; then</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l478" name="l478">478</a></td><td><pre><span class="insertion">+</span> <span class="insertion">chattr -i $CHROOT_DIR/etc/*</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l479" name="l479">479</a></td><td><pre><span class="insertion">+</span> <span class="insertion">rm -rfv $CHROOT_DIR</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l480" name="l480">480</a></td><td><pre><span class="insertion">+</span> <span class="insertion">fi</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l481" name="l481">481</a></td><td><pre><span class="insertion">+</span> <span class="insertion">if id $CHROOT_USER &gt;/dev/null 2&gt;&amp;1; then</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l482" name="l482">482</a></td><td><pre><span class="insertion">+</span> <span class="insertion">userdel -f $CHROOT_USER</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l483" name="l483">483</a></td><td><pre><span class="insertion">+</span> <span class="insertion">echo &quot;deleted $CHROOT_USER user&quot;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l484" name="l484">484</a></td><td><pre><span class="insertion">+</span> <span class="insertion">fi</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l485" name="l485">485</a></td><td><pre><span class="insertion">+</span> <span class="insertion">echo &quot;jail destroyed&quot;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l486" name="l486">486</a></td><td><pre><span class="insertion">+</span><span class="insertion">}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l487" name="l487">487</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l488" name="l488">488</a></td><td><pre><span class="insertion">+</span><span class="insertion">list_jails() {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l489" name="l489">489</a></td><td><pre><span class="insertion">+</span> <span class="insertion">CHROOT_DIRS=$(getent group jail | cut -d: -f4 | sed 's/,/ /g')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l490" name="l490">490</a></td><td><pre><span class="insertion">+</span> <span class="insertion">for i in ${CHROOT_DIRS[@]}; do</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l491" name="l491">491</a></td><td><pre><span class="insertion">+</span> <span class="insertion">echo &quot; * $i&quot;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l492" name="l492">492</a></td><td><pre><span class="insertion">+</span> <span class="insertion">done</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l493" name="l493">493</a></td><td><pre><span class="insertion">+</span><span class="insertion">}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l494" name="l494">494</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l495" name="l495">495</a></td><td><pre><span class="insertion">+</span><span class="insertion">[ &quot;$#&quot; -eq 0 ] &amp;&amp; echo -e &quot;invalid or missing arguments\n&quot; &amp;&amp; display_help &amp;&amp; exit 1</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l496" name="l496">496</a></td><td><pre><span class="insertion">+</span><span class="insertion">case $1 in</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l497" name="l497">497</a></td><td><pre><span class="insertion">+</span> <span class="insertion">-c|--create=*) create_jail &quot;$@&quot; ;;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l498" name="l498">498</a></td><td><pre><span class="insertion">+</span> <span class="insertion">-d|--destroy=*) destroy_jail &quot;$@&quot; ;;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l499" name="l499">499</a></td><td><pre><span class="insertion">+</span> <span class="insertion">-l|--list) list_jails ;;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l500" name="l500">500</a></td><td><pre><span class="insertion">+</span> <span class="insertion">-h|--help) display_help ;;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l501" name="l501">501</a></td><td><pre><span class="insertion">+</span> <span class="insertion">*) echo -e &quot;invalid or missing arguments\n&quot;; display_help ; exit 1;;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l502" name="l502">502</a></td><td><pre><span class="insertion">+</span><span class="insertion">esac</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l503" name="l503">503</a></td><td><pre><span class="bold">diff --git a/networking/ap.py b/networking/ap.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l504" name="l504">504</a></td><td><pre><span class="bold">deleted file mode 100644</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l505" name="l505">505</a></td><td><pre><span class="bold">index 48545fc..0000000</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l506" name="l506">506</a></td><td><pre><span class="bold">--- a/networking/ap.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l507" name="l507">507</a></td><td><pre><span class="bold">+++ /dev/null</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l508" name="l508">508</a></td><td><pre><span class="hunk">@@ -1,23 +0,0 @@</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l509" name="l509">509</a></td><td><pre><span class="deletion">-#!/usr/bin/env python</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l510" name="l510">510</a></td><td><pre><span class="deletion">-import re, subprocess</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l511" name="l511">511</a></td><td><pre><span class="deletion">-</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l512" name="l512">512</a></td><td><pre><span class="deletion">-interface = 'wlp1s0'</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l513" name="l513">513</a></td><td><pre><span class="deletion">-</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l514" name="l514">514</a></td><td><pre><span class="deletion">-def between(source, start, stop):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l515" name="l515">515</a></td><td><pre><span class="deletion">- data = re.compile(start + '(.*?)' + stop, re.IGNORECASE|re.MULTILINE).search(source)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l516" name="l516">516</a></td><td><pre><span class="deletion">- if data : return data.group(1)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l517" name="l517">517</a></td><td><pre><span class="deletion">- else : return False</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l518" name="l518">518</a></td><td><pre><span class="deletion">-</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l519" name="l519">519</a></td><td><pre><span class="deletion">-output = subprocess.check_output(f'sudo iwlist {interface} scanning | egrep \'Cell |Channel|Frequency|Encryption|Quality|ESSID|Mode\'', shell=True).decode()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l520" name="l520">520</a></td><td><pre><span class="deletion">-access_points = output.split(' Cell ')[1:]</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l521" name="l521">521</a></td><td><pre><span class="deletion">-print('\033[30m\033[47mMAC Address Channel Frequency Quality Signal Mode Encryption ESSID\033[0m')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l522" name="l522">522</a></td><td><pre><span class="deletion">-for ap in access_points:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l523" name="l523">523</a></td><td><pre><span class="deletion">- address = between(ap, 'Address: ', '\n')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l524" name="l524">524</a></td><td><pre><span class="deletion">- channel = between(ap, 'Channel:', '\n').ljust(7)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l525" name="l525">525</a></td><td><pre><span class="deletion">- frequency = between(ap, 'Frequency:', ' GHz')[:3]</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l526" name="l526">526</a></td><td><pre><span class="deletion">- quality = between(ap, 'Quality=', ' Signal')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l527" name="l527">527</a></td><td><pre><span class="deletion">- signal = between(ap, 'Signal level=', ' dBm')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l528" name="l528">528</a></td><td><pre><span class="deletion">- encryption = between(ap, 'Encryption key:', '\n').ljust(10)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l529" name="l529">529</a></td><td><pre><span class="deletion">- essid = between(ap, 'ESSID:\&quot;', '\&quot;\n')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l530" name="l530">530</a></td><td><pre><span class="deletion">- mode = between(ap, 'Mode:', '\n')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l531" name="l531">531</a></td><td><pre><span class="deletion">- print(f'{address} | {channel} | {frequency} GHz | {quality} | {signal} dBm | {mode} | {encryption} | {essid}')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l532" name="l532">532</a></td><td><pre><span class="bold">diff --git a/networking/discover.py b/networking/discover.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l533" name="l533">533</a></td><td><pre><span class="bold">index 23d9538..d3a4343 100644</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l534" name="l534">534</a></td><td><pre><span class="bold">--- a/networking/discover.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l535" name="l535">535</a></td><td><pre><span class="bold">+++ b/networking/discover.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l536" name="l536">536</a></td><td><pre><span class="hunk">@@ -4,7 +4,7 @@</span> </span>import subprocess</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l537" name="l537">537</a></td><td><pre> def portscan(ip):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l538" name="l538">538</a></td><td><pre> ports = list()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l539" name="l539">539</a></td><td><pre> try:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l540" name="l540">540</a></td><td><pre><span class="deletion">- cmd = subprocess.check_output('sudo nmap -F ' + ip, shell=True).decode()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l541" name="l541">541</a></td><td><pre><span class="insertion">+</span> <span class="insertion">cmd = subprocess.check_output('nmap -F ' + ip, shell=True).decode()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l542" name="l542">542</a></td><td><pre> output = cmd.split('SERVICE')[1].split('MAC')[0].split('\n')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l543" name="l543">543</a></td><td><pre> for item in output:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l544" name="l544">544</a></td><td><pre> port = item.split('/')[0]</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l545" name="l545">545</a></td><td><pre><span class="hunk">@@ -17,7 +17,7 @@</span> </span>def portscan(ip):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l546" name="l546">546</a></td><td><pre> def scanhosts(subnet):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l547" name="l547">547</a></td><td><pre> data = list()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l548" name="l548">548</a></td><td><pre> matrix = {'ip':list(),'host':list(),'ports':list()}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l549" name="l549">549</a></td><td><pre><span class="deletion">- cmd = subprocess.check_output(f'sudo nmap -sP {subnet}/24', shell=True).decode()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l550" name="l550">550</a></td><td><pre><span class="insertion">+</span> <span class="insertion">cmd = subprocess.check_output(f'nmap -sP {subnet}/24', shell=True).decode()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l551" name="l551">551</a></td><td><pre> output = cmd.split('Nmap scan report for ')[1:-1]</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l552" name="l552">552</a></td><td><pre> for item in output:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l553" name="l553">553</a></td><td><pre> ip = item.split('\n')[0]</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l554" name="l554">554</a></td><td><pre><span class="bold">diff --git a/progress.sh b/progress.sh</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l555" name="l555">555</a></td><td><pre><span class="bold">new file mode 100644</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l556" name="l556">556</a></td><td><pre><span class="bold">index 0000000..a090f90</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l557" name="l557">557</a></td><td><pre><span class="bold">--- /dev/null</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l558" name="l558">558</a></td><td><pre><span class="bold">+++ b/progress.sh</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l559" name="l559">559</a></td><td><pre><span class="hunk">@@ -0,0 +1,7 @@</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l560" name="l560">560</a></td><td><pre><span class="insertion">+</span><span class="insertion">PROGRESS='#'</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l561" name="l561">561</a></td><td><pre><span class="insertion">+</span><span class="insertion">for PERCENT in {1..100}; do</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l562" name="l562">562</a></td><td><pre><span class="insertion">+</span> <span class="insertion">echo -ne &quot;$PERCENT%\t$PROGRESS\r&quot;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l563" name="l563">563</a></td><td><pre><span class="insertion">+</span> <span class="insertion">PROGRESS=&quot;$PROGRESS#&quot;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l564" name="l564">564</a></td><td><pre><span class="insertion">+</span> <span class="insertion">sleep 0.05</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l565" name="l565">565</a></td><td><pre><span class="insertion">+</span><span class="insertion">done</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l566" name="l566">566</a></td><td><pre><span class="insertion">+</span><span class="insertion">echo -e &quot;\n&quot;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l567" name="l567">567</a></td><td><pre><span class="bold">diff --git a/scales.py b/scales.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l568" name="l568">568</a></td><td><pre><span class="bold">deleted file mode 100644</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l569" name="l569">569</a></td><td><pre><span class="bold">index 8cbe94b..0000000</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l570" name="l570">570</a></td><td><pre><span class="bold">--- a/scales.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l571" name="l571">571</a></td><td><pre><span class="bold">+++ /dev/null</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l572" name="l572">572</a></td><td><pre><span class="hunk">@@ -1,88 +0,0 @@</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l573" name="l573">573</a></td><td><pre><span class="deletion">-#!/usr/bin/env python</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l574" name="l574">574</a></td><td><pre><span class="deletion">-# guitar scales generator - developed by acidvegas in python (https://acid.vegas/random)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l575" name="l575">575</a></td><td><pre><span class="deletion">-</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l576" name="l576">576</a></td><td><pre><span class="deletion">-scales = {</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l577" name="l577">577</a></td><td><pre><span class="deletion">- 'algerian' : '2131131', # 1 = Half-step | 2 = Whole-step | 3 = Whole-step-Half-step</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l578" name="l578">578</a></td><td><pre><span class="deletion">- 'aeolian' : '2122122',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l579" name="l579">579</a></td><td><pre><span class="deletion">- 'blues' : '321132',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l580" name="l580">580</a></td><td><pre><span class="deletion">- 'chromatic' : '1111111',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l581" name="l581">581</a></td><td><pre><span class="deletion">- 'dorian' : '2122212',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l582" name="l582">582</a></td><td><pre><span class="deletion">- 'half_whole_diminished' : '12121212',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l583" name="l583">583</a></td><td><pre><span class="deletion">- 'harmonic_minor' : '2122131',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l584" name="l584">584</a></td><td><pre><span class="deletion">- 'ionian' : '2212221',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l585" name="l585">585</a></td><td><pre><span class="deletion">- 'locrian' : '1221222',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l586" name="l586">586</a></td><td><pre><span class="deletion">- 'lydian' : '2221221',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l587" name="l587">587</a></td><td><pre><span class="deletion">- 'major' : '2212221',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l588" name="l588">588</a></td><td><pre><span class="deletion">- 'major_pentatonic' : '22323',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l589" name="l589">589</a></td><td><pre><span class="deletion">- 'melodic_minor' : '2122221',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l590" name="l590">590</a></td><td><pre><span class="deletion">- 'mixolydian' : '2212212',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l591" name="l591">591</a></td><td><pre><span class="deletion">- 'natural_minor' : '2122122',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l592" name="l592">592</a></td><td><pre><span class="deletion">- 'persian' : '1311231',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l593" name="l593">593</a></td><td><pre><span class="deletion">- 'phrygian' : '1222122',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l594" name="l594">594</a></td><td><pre><span class="deletion">- 'whole_half_diminished' : '21212121',</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l595" name="l595">595</a></td><td><pre><span class="deletion">- 'whole_tone' : '2222222'</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l596" name="l596">596</a></td><td><pre><span class="deletion">-}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l597" name="l597">597</a></td><td><pre><span class="deletion">-</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l598" name="l598">598</a></td><td><pre><span class="deletion">-def generate_notes(key):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l599" name="l599">599</a></td><td><pre><span class="deletion">- notes = ['A','A#','B','C','C#','D','D#','E','F','F#','G','G#']</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l600" name="l600">600</a></td><td><pre><span class="deletion">- while notes[0] != key:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l601" name="l601">601</a></td><td><pre><span class="deletion">- notes.append(notes.pop(0))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l602" name="l602">602</a></td><td><pre><span class="deletion">- return notes</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l603" name="l603">603</a></td><td><pre><span class="deletion">-</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l604" name="l604">604</a></td><td><pre><span class="deletion">-def generate_scale(string, scale_notes, full=False):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l605" name="l605">605</a></td><td><pre><span class="deletion">- notes = generate_notes(string.upper())*2 if full else generate_notes(string.upper())</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l606" name="l606">606</a></td><td><pre><span class="deletion">- notes.append(notes[0])</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l607" name="l607">607</a></td><td><pre><span class="deletion">- for index,note in enumerate(notes):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l608" name="l608">608</a></td><td><pre><span class="deletion">- if note in scale_notes:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l609" name="l609">609</a></td><td><pre><span class="deletion">- notes[index] = notes[index].center(5, '-')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l610" name="l610">610</a></td><td><pre><span class="deletion">- else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l611" name="l611">611</a></td><td><pre><span class="deletion">- notes[index] = '-'*5</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l612" name="l612">612</a></td><td><pre><span class="deletion">- return notes</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l613" name="l613">613</a></td><td><pre><span class="deletion">-</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l614" name="l614">614</a></td><td><pre><span class="deletion">-def get_pattern(pattern):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l615" name="l615">615</a></td><td><pre><span class="deletion">- new_pattern = list()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l616" name="l616">616</a></td><td><pre><span class="deletion">- for step in pattern:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l617" name="l617">617</a></td><td><pre><span class="deletion">- if step == '1' : new_pattern.append('H')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l618" name="l618">618</a></td><td><pre><span class="deletion">- elif step == '2' : new_pattern.append('W')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l619" name="l619">619</a></td><td><pre><span class="deletion">- elif step == '3' : new_pattern.append('WH')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l620" name="l620">620</a></td><td><pre><span class="deletion">- return ' '.join(new_pattern)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l621" name="l621">621</a></td><td><pre><span class="deletion">-</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l622" name="l622">622</a></td><td><pre><span class="deletion">-def scale(type, key):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l623" name="l623">623</a></td><td><pre><span class="deletion">- last = 0</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l624" name="l624">624</a></td><td><pre><span class="deletion">- notes = generate_notes(key)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l625" name="l625">625</a></td><td><pre><span class="deletion">- scale_notes = [notes[0],]</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l626" name="l626">626</a></td><td><pre><span class="deletion">- for step in scales[type]:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l627" name="l627">627</a></td><td><pre><span class="deletion">- last += int(step)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l628" name="l628">628</a></td><td><pre><span class="deletion">- if last &gt;= len(notes):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l629" name="l629">629</a></td><td><pre><span class="deletion">- last -= len(notes)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l630" name="l630">630</a></td><td><pre><span class="deletion">- scale_notes.append(notes[last])</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l631" name="l631">631</a></td><td><pre><span class="deletion">- return scale_notes</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l632" name="l632">632</a></td><td><pre><span class="deletion">-</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l633" name="l633">633</a></td><td><pre><span class="deletion">-def print_scale(root, type, full=False):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l634" name="l634">634</a></td><td><pre><span class="deletion">- if root.upper() not in ('A','A#','B','C','C#','D','D#','E','F','F#','G','G#'):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l635" name="l635">635</a></td><td><pre><span class="deletion">- raise SystemExit('invalid root note')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l636" name="l636">636</a></td><td><pre><span class="deletion">- elif type.lower() not in scales:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l637" name="l637">637</a></td><td><pre><span class="deletion">- raise SystemExit('invalid scale type')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l638" name="l638">638</a></td><td><pre><span class="deletion">- else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l639" name="l639">639</a></td><td><pre><span class="deletion">- frets = (24,147) if full else (12,75)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l640" name="l640">640</a></td><td><pre><span class="deletion">- print(f'{root.upper()} {type.upper()} SCALE'.center(frets[1]))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l641" name="l641">641</a></td><td><pre><span class="deletion">- print(' ┌' + '┬'.join('─'*5 for x in range(frets[0])) + '┐')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l642" name="l642">642</a></td><td><pre><span class="deletion">- print('0 │' + '│'.join(str(x).center(5) for x in range(1,frets[0]+1)) + '│')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l643" name="l643">643</a></td><td><pre><span class="deletion">- print(' ├' + '┼'.join('─'*5 for x in range(frets[0])) + '┤')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l644" name="l644">644</a></td><td><pre><span class="deletion">- scale_notes = scale(type, root)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l645" name="l645">645</a></td><td><pre><span class="deletion">- for string in ('eBGDAE'):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l646" name="l646">646</a></td><td><pre><span class="deletion">- string_notes = generate_scale(string, scale_notes, full)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l647" name="l647">647</a></td><td><pre><span class="deletion">- print(string + ' │' + '│'.join(note.center(5, '-') for note in string_notes[1:]) + '│')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l648" name="l648">648</a></td><td><pre><span class="deletion">- print(' └' + '┴'.join('─'*5 for x in range(frets[0])) + '┘')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l649" name="l649">649</a></td><td><pre><span class="deletion">- print((', '.join(scale_notes) + ' / ' + get_pattern(scales[type])).rjust(frets[1]))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l650" name="l650">650</a></td><td><pre><span class="deletion">-</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l651" name="l651">651</a></td><td><pre><span class="deletion">-def print_scales():</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l652" name="l652">652</a></td><td><pre><span class="deletion">- max_key = max(len(x) for x in scales)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l653" name="l653">653</a></td><td><pre><span class="deletion">- max_value = max(len(get_pattern(scales[x])) for x in scales)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l654" name="l654">654</a></td><td><pre><span class="deletion">- print('NAME'.ljust(max_key+3) + 'PATTERN'.rjust(max_value))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l655" name="l655">655</a></td><td><pre><span class="deletion">- for name, pattern in scales.items():</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l656" name="l656">656</a></td><td><pre><span class="deletion">- print(name.ljust(max_key) + ' │ ' + get_pattern(pattern).rjust(max_value))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l657" name="l657">657</a></td><td><pre><span class="deletion">-</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l658" name="l658">658</a></td><td><pre><span class="deletion">-# Main</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l659" name="l659">659</a></td><td><pre><span class="deletion">-print_scales()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l660" name="l660">660</a></td><td><pre><span class="deletion">-print_scale('F#','major')</span></pre></td></tr>
</table>
<div id="footer">site generated by <a href="https://github.com/acidvegas/stagit" target="_blank">stagit</a> on <a href="#">05/03/20</a></div>

View File

@ -1,787 +0,0 @@
<!doctype html>
<link rel="stylesheet" href="../../style.css">
<title>random :: a2d36f8</title>
<h1><a href="../index.html" title="Back to Repository">&larr;&#xFE0E;</a> random :: a2d36f8</h1>
<hr>
<table id="main" cellpadding="0" cellspacing="0">
<tr class="item"><td class="linenumber"><a href="#l1" name="l1">1</a></td><td><pre><span class="commit">commit a2d36f86df617efad0dcace56862f0a8c147d3da</span><span class="commit"> (</span><span class="reference">HEAD -&gt; </span><span class="branch">master</span><span class="commit">)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l2" name="l2">2</a></td><td><pre>Author: acidvegas &lt;acid.vegas@acid.vegas&gt;</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l3" name="l3">3</a></td><td><pre>Date: Thu Jun 27 23:11:58 2019 -0400</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l4" name="l4">4</a></td><td><pre></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l5" name="l5">5</a></td><td><pre> Initial commit</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l6" name="l6">6</a></td><td><pre>---</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l7" name="l7">7</a></td><td><pre> LICENSE | 15 <span class="insertion">++</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l8" name="l8">8</a></td><td><pre> README.md | 43 <span class="insertion">+++++</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l9" name="l9">9</a></td><td><pre> ircs/core/config.py | 20 <span class="insertion">+++</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l10" name="l10">10</a></td><td><pre> ircs/core/debug.py | 70 <span class="insertion">++++++++</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l11" name="l11">11</a></td><td><pre> ircs/core/functions.py | 113 <span class="insertion">+++++++++++++</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l12" name="l12">12</a></td><td><pre> ircs/core/irc.py | 433 <span class="insertion">+++++++++++++++++++++++++++++++++++++++++++++++++</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l13" name="l13">13</a></td><td><pre> ircs/data/.gitignore | 1 <span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l14" name="l14">14</a></td><td><pre> ircs/ircs.py | 20 <span class="insertion">+++</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l15" name="l15">15</a></td><td><pre> 8 files changed, 715 insertions(+)</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l16" name="l16">16</a></td><td><pre></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l17" name="l17">17</a></td><td><pre><span class="bold">diff --git a/LICENSE b/LICENSE</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l18" name="l18">18</a></td><td><pre><span class="bold">new file mode 100644</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l19" name="l19">19</a></td><td><pre><span class="bold">index 0000000..69997e8</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l20" name="l20">20</a></td><td><pre><span class="bold">--- /dev/null</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l21" name="l21">21</a></td><td><pre><span class="bold">+++ b/LICENSE</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l22" name="l22">22</a></td><td><pre><span class="hunk">@@ -0,0 +1,15 @@</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l23" name="l23">23</a></td><td><pre><span class="insertion">+</span><span class="insertion">ISC License</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l24" name="l24">24</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l25" name="l25">25</a></td><td><pre><span class="insertion">+</span><span class="insertion">Copyright (c) 2019, acidvegas &lt;acid.vegas@acid.vegas&gt;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l26" name="l26">26</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l27" name="l27">27</a></td><td><pre><span class="insertion">+</span><span class="insertion">Permission to use, copy, modify, and/or distribute this software for any</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l28" name="l28">28</a></td><td><pre><span class="insertion">+</span><span class="insertion">purpose with or without fee is hereby granted, provided that the above</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l29" name="l29">29</a></td><td><pre><span class="insertion">+</span><span class="insertion">copyright notice and this permission notice appear in all copies.</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l30" name="l30">30</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l31" name="l31">31</a></td><td><pre><span class="insertion">+</span><span class="insertion">THE SOFTWARE IS PROVIDED &quot;AS IS&quot; AND THE AUTHOR DISCLAIMS ALL WARRANTIES</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l32" name="l32">32</a></td><td><pre><span class="insertion">+</span><span class="insertion">WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l33" name="l33">33</a></td><td><pre><span class="insertion">+</span><span class="insertion">MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l34" name="l34">34</a></td><td><pre><span class="insertion">+</span><span class="insertion">ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l35" name="l35">35</a></td><td><pre><span class="insertion">+</span><span class="insertion">WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l36" name="l36">36</a></td><td><pre><span class="insertion">+</span><span class="insertion">ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l37" name="l37">37</a></td><td><pre><span class="insertion">+</span><span class="insertion">OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l38" name="l38">38</a></td><td><pre><span class="bold">diff --git a/README.md b/README.md</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l39" name="l39">39</a></td><td><pre><span class="bold">new file mode 100644</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l40" name="l40">40</a></td><td><pre><span class="bold">index 0000000..6369d0d</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l41" name="l41">41</a></td><td><pre><span class="bold">--- /dev/null</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l42" name="l42">42</a></td><td><pre><span class="bold">+++ b/README.md</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l43" name="l43">43</a></td><td><pre><span class="hunk">@@ -0,0 +1,43 @@</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l44" name="l44">44</a></td><td><pre><span class="insertion">+</span><span class="insertion">###### Information</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l45" name="l45">45</a></td><td><pre><span class="insertion">+</span><span class="insertion">This project is no longer being maintained &amp; is made available for historical purposes only.</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l46" name="l46">46</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l47" name="l47">47</a></td><td><pre><span class="insertion">+</span><span class="insertion">The IRCS project is basically a stripped down version of [Anope](https://www.anope.org/)'s bots all crammed into one &amp; was developed for usage with [UnrealIRCd](https://www.unrealircd.org/) 4.</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l48" name="l48">48</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l49" name="l49">49</a></td><td><pre><span class="insertion">+</span><span class="insertion">###### Setup</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l50" name="l50">50</a></td><td><pre><span class="insertion">+</span><span class="insertion">You will get the lowest ping having the bot connect to localhost on the same box as the IRCd is running.</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l51" name="l51">51</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l52" name="l52">52</a></td><td><pre><span class="insertion">+</span><span class="insertion">The bot *will* require network operator privledges in order to work, so make sure you add that into your IRCd configuration.</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l53" name="l53">53</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l54" name="l54">54</a></td><td><pre><span class="insertion">+</span><span class="insertion">Edit [`config.py`](https://github.com/acidvegas/ircs/blob/master/ircs/core/config.py) and change the `oper_passwd` and the `admin_host` settings.</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l55" name="l55">55</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l56" name="l56">56</a></td><td><pre><span class="insertion">+</span><span class="insertion">###### Commands</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l57" name="l57">57</a></td><td><pre><span class="insertion">+</span><span class="insertion">| Mode Command | Description | Restriction |</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l58" name="l58">58</a></td><td><pre><span class="insertion">+</span><span class="insertion">| --- | --- | --- |</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l59" name="l59">59</a></td><td><pre><span class="insertion">+</span><span class="insertion">| !mode \&lt;chan&gt; | Read all the auto-mode hosts for \&lt;channel&gt;. | *+q only* |</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l60" name="l60">60</a></td><td><pre><span class="insertion">+</span><span class="insertion">| !mode \&lt;chan&gt; \&lt;mode&gt; | Read all the \&lt;mode&gt; auto-mode hosts for \&lt;channel&gt;. | *+q only* |</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l61" name="l61">61</a></td><td><pre><span class="insertion">+</span><span class="insertion">| !mode \&lt;chan&gt; \&lt;mode&gt; +\&lt;ident&gt; | Automatically +\&lt;mode&gt; a user matching \&lt;ident&gt;. | *+q only* |</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l62" name="l62">62</a></td><td><pre><span class="insertion">+</span><span class="insertion">| !mode \&lt;chan&gt; \&lt;mode&gt; -\&lt;ident&gt; | Remove automatic +\&lt;mode&gt; from a user matching \&lt;ident&gt;. | *+q only* |</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l63" name="l63">63</a></td><td><pre><span class="insertion">+</span><span class="insertion">| !sync \&lt;chan&gt; | Set all the channels stored in the database for \&lt;channel&gt;. | *+q only* |</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l64" name="l64">64</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l65" name="l65">65</a></td><td><pre><span class="insertion">+</span><span class="insertion">| Vhost Command | Description | Restriction |</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l66" name="l66">66</a></td><td><pre><span class="insertion">+</span><span class="insertion">| --- | --- | --- |</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l67" name="l67">67</a></td><td><pre><span class="insertion">+</span><span class="insertion">| !vhost add \&lt;ident&gt; \&lt;vhost&gt; | Change the host of \&lt;ident&gt; to \&lt;vhost&gt; on connect. | *admin only*|</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l68" name="l68">68</a></td><td><pre><span class="insertion">+</span><span class="insertion">| !vhost drop \&lt;ident&gt; | Delete the VHOST registered to \&lt;ident&gt;. | *admin only* |</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l69" name="l69">69</a></td><td><pre><span class="insertion">+</span><span class="insertion">| !vhost list | Return a list of all activated VHOSTs. | *admin only* |</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l70" name="l70">70</a></td><td><pre><span class="insertion">+</span><span class="insertion">| !vhost on | Turn on your VHOST. | *vhost users only* |</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l71" name="l71">71</a></td><td><pre><span class="insertion">+</span><span class="insertion">| !vhost off | Turn off your VHOST. | *vhost users only*|</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l72" name="l72">72</a></td><td><pre><span class="insertion">+</span><span class="insertion">| !vhost sync | Change your current hostmask to your VHOST. | *vhost users only* |</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l73" name="l73">73</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l74" name="l74">74</a></td><td><pre><span class="insertion">+</span><span class="insertion">| Admin Command | Description | Restriction |</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l75" name="l75">75</a></td><td><pre><span class="insertion">+</span><span class="insertion">| --- | --- | --- |</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l76" name="l76">76</a></td><td><pre><span class="insertion">+</span><span class="insertion">| !husers | List all users connected but not joined to any channel(s). | *admin only* |</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l77" name="l77">77</a></td><td><pre><span class="insertion">+</span><span class="insertion">| !husers join \&lt;channel&gt; | Force join all hidden users into \&lt;channe&gt;. | *admin only* |</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l78" name="l78">78</a></td><td><pre><span class="insertion">+</span><span class="insertion">| !husers kill | Kill the connection of all hidden users. | *admin only* |</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l79" name="l79">79</a></td><td><pre><span class="insertion">+</span><span class="insertion">| !husers gline | G:Line the connection of all hidden users. | *admin only* |</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l80" name="l80">80</a></td><td><pre><span class="insertion">+</span><span class="insertion">| !husers gzline | GZ:Line the connection of all hidden users. | *admin only* |</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l81" name="l81">81</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l82" name="l82">82</a></td><td><pre><span class="insertion">+</span><span class="insertion">###### Mirrors</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l83" name="l83">83</a></td><td><pre><span class="insertion">+</span><span class="insertion">- [acid.vegas](https://acid.vegas/ircs) *(main)*</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l84" name="l84">84</a></td><td><pre><span class="insertion">+</span><span class="insertion">- [SuperNETs](https://git.supernets.org/acidvegas/ircs)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l85" name="l85">85</a></td><td><pre><span class="insertion">+</span><span class="insertion">- [GitHub](https://github.com/acidvegas/ircs)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l86" name="l86">86</a></td><td><pre><span class="insertion">+</span><span class="insertion">- [GitLab](https://gitlab.com/acidvegas/ircs)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l87" name="l87">87</a></td><td><pre><span class="bold">diff --git a/ircs/core/config.py b/ircs/core/config.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l88" name="l88">88</a></td><td><pre><span class="bold">new file mode 100644</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l89" name="l89">89</a></td><td><pre><span class="bold">index 0000000..f1af76f</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l90" name="l90">90</a></td><td><pre><span class="bold">--- /dev/null</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l91" name="l91">91</a></td><td><pre><span class="bold">+++ b/ircs/core/config.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l92" name="l92">92</a></td><td><pre><span class="hunk">@@ -0,0 +1,20 @@</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l93" name="l93">93</a></td><td><pre><span class="insertion">+</span><span class="insertion">#!/usr/bin/env python</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l94" name="l94">94</a></td><td><pre><span class="insertion">+</span><span class="insertion"># IRC Services (IRCS) - Developed by acidvegas in Python (https://acid.vegas/ircs)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l95" name="l95">95</a></td><td><pre><span class="insertion">+</span><span class="insertion"># config.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l96" name="l96">96</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l97" name="l97">97</a></td><td><pre><span class="insertion">+</span><span class="insertion"># Connection</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l98" name="l98">98</a></td><td><pre><span class="insertion">+</span><span class="insertion">server = 'localhost'</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l99" name="l99">99</a></td><td><pre><span class="insertion">+</span><span class="insertion">port = 6667</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l100" name="l100">100</a></td><td><pre><span class="insertion">+</span><span class="insertion">use_ipv6 = False</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l101" name="l101">101</a></td><td><pre><span class="insertion">+</span><span class="insertion">use_ssl = False</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l102" name="l102">102</a></td><td><pre><span class="insertion">+</span><span class="insertion">vhost = None</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l103" name="l103">103</a></td><td><pre><span class="insertion">+</span><span class="insertion">password = None</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l104" name="l104">104</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l105" name="l105">105</a></td><td><pre><span class="insertion">+</span><span class="insertion"># Identity</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l106" name="l106">106</a></td><td><pre><span class="insertion">+</span><span class="insertion">nickname = 'IRCS'</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l107" name="l107">107</a></td><td><pre><span class="insertion">+</span><span class="insertion">username = 'ircs'</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l108" name="l108">108</a></td><td><pre><span class="insertion">+</span><span class="insertion">realname = 'IRC Services Bot'</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l109" name="l109">109</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l110" name="l110">110</a></td><td><pre><span class="insertion">+</span><span class="insertion"># Admin</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l111" name="l111">111</a></td><td><pre><span class="insertion">+</span><span class="insertion">admin_host = 'CHANGEME'</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l112" name="l112">112</a></td><td><pre><span class="insertion">+</span><span class="insertion">oper_passwd = 'CHANGEME'</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l113" name="l113">113</a></td><td><pre><span class="bold">diff --git a/ircs/core/debug.py b/ircs/core/debug.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l114" name="l114">114</a></td><td><pre><span class="bold">new file mode 100644</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l115" name="l115">115</a></td><td><pre><span class="bold">index 0000000..07ce3f0</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l116" name="l116">116</a></td><td><pre><span class="bold">--- /dev/null</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l117" name="l117">117</a></td><td><pre><span class="bold">+++ b/ircs/core/debug.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l118" name="l118">118</a></td><td><pre><span class="hunk">@@ -0,0 +1,70 @@</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l119" name="l119">119</a></td><td><pre><span class="insertion">+</span><span class="insertion">#!/usr/bin/env python</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l120" name="l120">120</a></td><td><pre><span class="insertion">+</span><span class="insertion"># IRC Services (IRCS) - Developed by acidvegas in Python (https://acid.vegas/ircs)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l121" name="l121">121</a></td><td><pre><span class="insertion">+</span><span class="insertion"># debug.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l122" name="l122">122</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l123" name="l123">123</a></td><td><pre><span class="insertion">+</span><span class="insertion">import ctypes</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l124" name="l124">124</a></td><td><pre><span class="insertion">+</span><span class="insertion">import os</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l125" name="l125">125</a></td><td><pre><span class="insertion">+</span><span class="insertion">import sys</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l126" name="l126">126</a></td><td><pre><span class="insertion">+</span><span class="insertion">import time</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l127" name="l127">127</a></td><td><pre><span class="insertion">+</span><span class="insertion">import string</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l128" name="l128">128</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l129" name="l129">129</a></td><td><pre><span class="insertion">+</span><span class="insertion">def check_data(data):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l130" name="l130">130</a></td><td><pre><span class="insertion">+</span><span class="insertion"> if all(c in string.printable for c in data):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l131" name="l131">131</a></td><td><pre><span class="insertion">+</span><span class="insertion"> return True</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l132" name="l132">132</a></td><td><pre><span class="insertion">+</span><span class="insertion"> else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l133" name="l133">133</a></td><td><pre><span class="insertion">+</span><span class="insertion"> return False</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l134" name="l134">134</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l135" name="l135">135</a></td><td><pre><span class="insertion">+</span><span class="insertion">def check_privileges():</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l136" name="l136">136</a></td><td><pre><span class="insertion">+</span><span class="insertion"> if check_windows():</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l137" name="l137">137</a></td><td><pre><span class="insertion">+</span><span class="insertion"> if ctypes.windll.shell32.IsUserAnAdmin() != 0:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l138" name="l138">138</a></td><td><pre><span class="insertion">+</span><span class="insertion"> return True</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l139" name="l139">139</a></td><td><pre><span class="insertion">+</span><span class="insertion"> else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l140" name="l140">140</a></td><td><pre><span class="insertion">+</span><span class="insertion"> return False</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l141" name="l141">141</a></td><td><pre><span class="insertion">+</span><span class="insertion"> else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l142" name="l142">142</a></td><td><pre><span class="insertion">+</span><span class="insertion"> if os.getuid() == 0 or os.geteuid() == 0:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l143" name="l143">143</a></td><td><pre><span class="insertion">+</span><span class="insertion"> return True</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l144" name="l144">144</a></td><td><pre><span class="insertion">+</span><span class="insertion"> else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l145" name="l145">145</a></td><td><pre><span class="insertion">+</span><span class="insertion"> return False</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l146" name="l146">146</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l147" name="l147">147</a></td><td><pre><span class="insertion">+</span><span class="insertion">def check_version(major):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l148" name="l148">148</a></td><td><pre><span class="insertion">+</span><span class="insertion"> if sys.version_info.major == major:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l149" name="l149">149</a></td><td><pre><span class="insertion">+</span><span class="insertion"> return True</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l150" name="l150">150</a></td><td><pre><span class="insertion">+</span><span class="insertion"> else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l151" name="l151">151</a></td><td><pre><span class="insertion">+</span><span class="insertion"> return False</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l152" name="l152">152</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l153" name="l153">153</a></td><td><pre><span class="insertion">+</span><span class="insertion">def check_windows():</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l154" name="l154">154</a></td><td><pre><span class="insertion">+</span><span class="insertion"> if os.name == 'nt':</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l155" name="l155">155</a></td><td><pre><span class="insertion">+</span><span class="insertion"> return True</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l156" name="l156">156</a></td><td><pre><span class="insertion">+</span><span class="insertion"> else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l157" name="l157">157</a></td><td><pre><span class="insertion">+</span><span class="insertion"> return False</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l158" name="l158">158</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l159" name="l159">159</a></td><td><pre><span class="insertion">+</span><span class="insertion">def clear():</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l160" name="l160">160</a></td><td><pre><span class="insertion">+</span><span class="insertion"> if check_windows():</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l161" name="l161">161</a></td><td><pre><span class="insertion">+</span><span class="insertion"> os.system('cls')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l162" name="l162">162</a></td><td><pre><span class="insertion">+</span><span class="insertion"> else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l163" name="l163">163</a></td><td><pre><span class="insertion">+</span><span class="insertion"> os.system('clear')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l164" name="l164">164</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l165" name="l165">165</a></td><td><pre><span class="insertion">+</span><span class="insertion">def error(msg, reason=None):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l166" name="l166">166</a></td><td><pre><span class="insertion">+</span><span class="insertion"> if reason:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l167" name="l167">167</a></td><td><pre><span class="insertion">+</span><span class="insertion"> print('{0} | [!] - {1} ({2})'.format(get_time(), msg, str(reason)))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l168" name="l168">168</a></td><td><pre><span class="insertion">+</span><span class="insertion"> else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l169" name="l169">169</a></td><td><pre><span class="insertion">+</span><span class="insertion"> print('{0} | [!] - {1}'.format(get_time(), msg))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l170" name="l170">170</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l171" name="l171">171</a></td><td><pre><span class="insertion">+</span><span class="insertion">def error_exit(msg):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l172" name="l172">172</a></td><td><pre><span class="insertion">+</span><span class="insertion"> raise SystemExit('{0} | [!] - {1}'.format(get_time(), msg))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l173" name="l173">173</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l174" name="l174">174</a></td><td><pre><span class="insertion">+</span><span class="insertion">def get_time():</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l175" name="l175">175</a></td><td><pre><span class="insertion">+</span><span class="insertion"> return time.strftime('%I:%M:%S')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l176" name="l176">176</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l177" name="l177">177</a></td><td><pre><span class="insertion">+</span><span class="insertion">def info():</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l178" name="l178">178</a></td><td><pre><span class="insertion">+</span><span class="insertion"> clear()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l179" name="l179">179</a></td><td><pre><span class="insertion">+</span><span class="insertion"> print(''.rjust(56, '#'))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l180" name="l180">180</a></td><td><pre><span class="insertion">+</span><span class="insertion"> print('#{0}#'.format(''.center(54)))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l181" name="l181">181</a></td><td><pre><span class="insertion">+</span><span class="insertion"> print('#{0}#'.format('IRC Services (IRCS)'.center(54)))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l182" name="l182">182</a></td><td><pre><span class="insertion">+</span><span class="insertion"> print('#{0}#'.format('Developed by acidvegas in Python'.center(54)))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l183" name="l183">183</a></td><td><pre><span class="insertion">+</span><span class="insertion"> print('#{0}#'.format('https://acid.vegas/ircs'.center(54)))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l184" name="l184">184</a></td><td><pre><span class="insertion">+</span><span class="insertion"> print('#{0}#'.format(''.center(54)))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l185" name="l185">185</a></td><td><pre><span class="insertion">+</span><span class="insertion"> print(''.rjust(56, '#'))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l186" name="l186">186</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l187" name="l187">187</a></td><td><pre><span class="insertion">+</span><span class="insertion">def irc(msg):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l188" name="l188">188</a></td><td><pre><span class="insertion">+</span><span class="insertion"> print('{0} | [~] - {1}'.format(get_time(), msg))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l189" name="l189">189</a></td><td><pre><span class="bold">diff --git a/ircs/core/functions.py b/ircs/core/functions.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l190" name="l190">190</a></td><td><pre><span class="bold">new file mode 100644</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l191" name="l191">191</a></td><td><pre><span class="bold">index 0000000..0af9b41</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l192" name="l192">192</a></td><td><pre><span class="bold">--- /dev/null</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l193" name="l193">193</a></td><td><pre><span class="bold">+++ b/ircs/core/functions.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l194" name="l194">194</a></td><td><pre><span class="hunk">@@ -0,0 +1,113 @@</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l195" name="l195">195</a></td><td><pre><span class="insertion">+</span><span class="insertion">#!/usr/bin/env python</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l196" name="l196">196</a></td><td><pre><span class="insertion">+</span><span class="insertion"># IRC Services (IRCS) - Developed by acidvegas in Python (https://acid.vegas/ircs)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l197" name="l197">197</a></td><td><pre><span class="insertion">+</span><span class="insertion"># functions.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l198" name="l198">198</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l199" name="l199">199</a></td><td><pre><span class="insertion">+</span><span class="insertion">import inspect</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l200" name="l200">200</a></td><td><pre><span class="insertion">+</span><span class="insertion">import os</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l201" name="l201">201</a></td><td><pre><span class="insertion">+</span><span class="insertion">import sqlite3</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l202" name="l202">202</a></td><td><pre><span class="insertion">+</span><span class="insertion">import string</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l203" name="l203">203</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l204" name="l204">204</a></td><td><pre><span class="insertion">+</span><span class="insertion"># Database</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l205" name="l205">205</a></td><td><pre><span class="insertion">+</span><span class="insertion">database_dir = os.path.join(os.path.dirname(os.path.realpath(inspect.stack()[-1][1])), 'data')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l206" name="l206">206</a></td><td><pre><span class="insertion">+</span><span class="insertion">database_file = os.path.join(database_dir, 'ircs.db')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l207" name="l207">207</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l208" name="l208">208</a></td><td><pre><span class="insertion">+</span><span class="insertion"># Globals</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l209" name="l209">209</a></td><td><pre><span class="insertion">+</span><span class="insertion">db = sqlite3.connect(database_file)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l210" name="l210">210</a></td><td><pre><span class="insertion">+</span><span class="insertion">sql = db.cursor()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l211" name="l211">211</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l212" name="l212">212</a></td><td><pre><span class="insertion">+</span><span class="insertion">class Database:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l213" name="l213">213</a></td><td><pre><span class="insertion">+</span><span class="insertion"> def check():</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l214" name="l214">214</a></td><td><pre><span class="insertion">+</span><span class="insertion"> tables = sql.execute('SELECT name FROM sqlite_master WHERE type=\'table\'').fetchall()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l215" name="l215">215</a></td><td><pre><span class="insertion">+</span><span class="insertion"> if len(tables):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l216" name="l216">216</a></td><td><pre><span class="insertion">+</span><span class="insertion"> return True</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l217" name="l217">217</a></td><td><pre><span class="insertion">+</span><span class="insertion"> else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l218" name="l218">218</a></td><td><pre><span class="insertion">+</span><span class="insertion"> return False</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l219" name="l219">219</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l220" name="l220">220</a></td><td><pre><span class="insertion">+</span><span class="insertion"> def create():</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l221" name="l221">221</a></td><td><pre><span class="insertion">+</span><span class="insertion"> sql.execute('CREATE TABLE CHANSERV (CHANNEL TEXT NOT NULL, IDENT TEXT NOT NULL, MODE TEXT NOT NULL);')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l222" name="l222">222</a></td><td><pre><span class="insertion">+</span><span class="insertion"> sql.execute('CREATE TABLE HOSTSERV (IDENT TEXT NOT NULL, VHOST TEXT NOT NULL, STATUS TEXT NOT NULL);')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l223" name="l223">223</a></td><td><pre><span class="insertion">+</span><span class="insertion"> db.commit()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l224" name="l224">224</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l225" name="l225">225</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l226" name="l226">226</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l227" name="l227">227</a></td><td><pre><span class="insertion">+</span><span class="insertion">class ChanServ:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l228" name="l228">228</a></td><td><pre><span class="insertion">+</span><span class="insertion"> def add_mode(chan, ident, mode):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l229" name="l229">229</a></td><td><pre><span class="insertion">+</span><span class="insertion"> sql.execute('INSERT INTO CHANSERV (CHANNEL,IDENT,MODE) VALUES (?, ?, ?)', (chan, ident, mode))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l230" name="l230">230</a></td><td><pre><span class="insertion">+</span><span class="insertion"> db.commit()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l231" name="l231">231</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l232" name="l232">232</a></td><td><pre><span class="insertion">+</span><span class="insertion"> def channels():</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l233" name="l233">233</a></td><td><pre><span class="insertion">+</span><span class="insertion"> return set(list(item[0] for item in sql.execute('SELECT CHANNEL FROM CHANSERV ORDER BY CHANNEL ASC').fetchall()))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l234" name="l234">234</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l235" name="l235">235</a></td><td><pre><span class="insertion">+</span><span class="insertion"> def del_mode(chan, ident):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l236" name="l236">236</a></td><td><pre><span class="insertion">+</span><span class="insertion"> sql.execute('DELETE FROM CHANSERV WHERE CHANNEL=? AND IDENT=?', (chan, ident))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l237" name="l237">237</a></td><td><pre><span class="insertion">+</span><span class="insertion"> db.commit()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l238" name="l238">238</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l239" name="l239">239</a></td><td><pre><span class="insertion">+</span><span class="insertion"> def drop(chan):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l240" name="l240">240</a></td><td><pre><span class="insertion">+</span><span class="insertion"> sql.execute('DELETE FROM CHANSERV WHERE CHANNEL=?', (chan,))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l241" name="l241">241</a></td><td><pre><span class="insertion">+</span><span class="insertion"> db.commit()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l242" name="l242">242</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l243" name="l243">243</a></td><td><pre><span class="insertion">+</span><span class="insertion"> def get_mode(chan, ident):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l244" name="l244">244</a></td><td><pre><span class="insertion">+</span><span class="insertion"> data = sql.execute('SELECT MODE FROM CHANSERV WHERE CHANNEL=? AND IDENT=?', (chan, ident)).fetchone()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l245" name="l245">245</a></td><td><pre><span class="insertion">+</span><span class="insertion"> if data:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l246" name="l246">246</a></td><td><pre><span class="insertion">+</span><span class="insertion"> return data[0]</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l247" name="l247">247</a></td><td><pre><span class="insertion">+</span><span class="insertion"> else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l248" name="l248">248</a></td><td><pre><span class="insertion">+</span><span class="insertion"> return None</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l249" name="l249">249</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l250" name="l250">250</a></td><td><pre><span class="insertion">+</span><span class="insertion"> def hosts():</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l251" name="l251">251</a></td><td><pre><span class="insertion">+</span><span class="insertion"> return set(list(item[0].split('@')[1] for item in sql.execute('SELECT IDENT FROM CHANSERV', (channel,)).fetchall()))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l252" name="l252">252</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l253" name="l253">253</a></td><td><pre><span class="insertion">+</span><span class="insertion"> def idents(chan, mode=None):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l254" name="l254">254</a></td><td><pre><span class="insertion">+</span><span class="insertion"> if mode:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l255" name="l255">255</a></td><td><pre><span class="insertion">+</span><span class="insertion"> return list(item[0] for item in sql.execute('SELECT IDENT FROM CHANSERV WHERE CHANNEL=? AND MODE=?', (channel, mode)).fetchall())</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l256" name="l256">256</a></td><td><pre><span class="insertion">+</span><span class="insertion"> else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l257" name="l257">257</a></td><td><pre><span class="insertion">+</span><span class="insertion"> return list(item[0] for item in sql.execute('SELECT IDENT FROM CHANSERV WHERE CHANNEL=?', (channel,)).fetchall())</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l258" name="l258">258</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l259" name="l259">259</a></td><td><pre><span class="insertion">+</span><span class="insertion"> def read(channel, mode=None):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l260" name="l260">260</a></td><td><pre><span class="insertion">+</span><span class="insertion"> if mode:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l261" name="l261">261</a></td><td><pre><span class="insertion">+</span><span class="insertion"> return sql.execute('SELECT IDENT FROM CHANSERV WHERE CHANNEL=? AND MODE=? ORDER BY CHANNEL ASC, MODE ASC, IDENT ASC', (channel, mode)).fetchall()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l262" name="l262">262</a></td><td><pre><span class="insertion">+</span><span class="insertion"> else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l263" name="l263">263</a></td><td><pre><span class="insertion">+</span><span class="insertion"> return sql.execute('SELECT IDENT,MODE FROM CHANSERV WHERE CHANNEL=? ORDER BY CHANNEL ASC, MODE ASC, IDENT ASC', (channel,)).fetchall()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l264" name="l264">264</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l265" name="l265">265</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l266" name="l266">266</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l267" name="l267">267</a></td><td><pre><span class="insertion">+</span><span class="insertion">class HostServ:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l268" name="l268">268</a></td><td><pre><span class="insertion">+</span><span class="insertion"> def add(ident, vhost):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l269" name="l269">269</a></td><td><pre><span class="insertion">+</span><span class="insertion"> sql.execute('INSERT INTO HOSTSERV (IDENT,VHOST,STATUS) VALUES (?, ?, \'pending\')', (ident, vhost))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l270" name="l270">270</a></td><td><pre><span class="insertion">+</span><span class="insertion"> db.commit()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l271" name="l271">271</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l272" name="l272">272</a></td><td><pre><span class="insertion">+</span><span class="insertion"> def delete(ident):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l273" name="l273">273</a></td><td><pre><span class="insertion">+</span><span class="insertion"> sql.execute('DELETE FROM HOSTSERV WHERE IDENT=?', (ident,))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l274" name="l274">274</a></td><td><pre><span class="insertion">+</span><span class="insertion"> db.commit()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l275" name="l275">275</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l276" name="l276">276</a></td><td><pre><span class="insertion">+</span><span class="insertion"> def get_vhost(ident, active=False):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l277" name="l277">277</a></td><td><pre><span class="insertion">+</span><span class="insertion"> data = sql.execute('SELECT VHOST FROM HOSTSERV WHERE IDENT=? AND STATUS=\'on\'', (ident,)).fetchone()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l278" name="l278">278</a></td><td><pre><span class="insertion">+</span><span class="insertion"> if data:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l279" name="l279">279</a></td><td><pre><span class="insertion">+</span><span class="insertion"> return data[0]</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l280" name="l280">280</a></td><td><pre><span class="insertion">+</span><span class="insertion"> else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l281" name="l281">281</a></td><td><pre><span class="insertion">+</span><span class="insertion"> return None</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l282" name="l282">282</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l283" name="l283">283</a></td><td><pre><span class="insertion">+</span><span class="insertion"> def get_status(ident):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l284" name="l284">284</a></td><td><pre><span class="insertion">+</span><span class="insertion"> data = sql.execute('SELECT STATUS FROM HOSTSERV WHERE IDENT=?', (ident,)).fetchone()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l285" name="l285">285</a></td><td><pre><span class="insertion">+</span><span class="insertion"> if data:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l286" name="l286">286</a></td><td><pre><span class="insertion">+</span><span class="insertion"> return data[0]</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l287" name="l287">287</a></td><td><pre><span class="insertion">+</span><span class="insertion"> else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l288" name="l288">288</a></td><td><pre><span class="insertion">+</span><span class="insertion"> return None</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l289" name="l289">289</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l290" name="l290">290</a></td><td><pre><span class="insertion">+</span><span class="insertion"> def hosts():</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l291" name="l291">291</a></td><td><pre><span class="insertion">+</span><span class="insertion"> return set(list(item[0].split('@')[1] for item in sql.execute('SELECT IDENT FROM CHANSERV', (channel,)).fetchall()))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l292" name="l292">292</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l293" name="l293">293</a></td><td><pre><span class="insertion">+</span><span class="insertion"> def idents():</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l294" name="l294">294</a></td><td><pre><span class="insertion">+</span><span class="insertion"> return list(item[0] for item in sql.execute('SELECT IDENT FROM HOSTSERV').fetchall())</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l295" name="l295">295</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l296" name="l296">296</a></td><td><pre><span class="insertion">+</span><span class="insertion"> def pending():</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l297" name="l297">297</a></td><td><pre><span class="insertion">+</span><span class="insertion"> return sql.execute('SELECT IDENT,VHOST FROM HOSTSERV WHERE STATUS=\'pending\' ORDER BY IDENT ASC').fetchall()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l298" name="l298">298</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l299" name="l299">299</a></td><td><pre><span class="insertion">+</span><span class="insertion"> def read():</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l300" name="l300">300</a></td><td><pre><span class="insertion">+</span><span class="insertion"> return sql.execute('SELECT IDENT,VHOST FROM HOSTSERV ORDER BY IDENT ASC').fetchall()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l301" name="l301">301</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l302" name="l302">302</a></td><td><pre><span class="insertion">+</span><span class="insertion"> def set_status(ident, status):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l303" name="l303">303</a></td><td><pre><span class="insertion">+</span><span class="insertion"> sql.execute('UPDATE HOSTSERV SET STATUS=? WHERE IDENT=?', (status, ident))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l304" name="l304">304</a></td><td><pre><span class="insertion">+</span><span class="insertion"> db.commit()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l305" name="l305">305</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l306" name="l306">306</a></td><td><pre><span class="insertion">+</span><span class="insertion"> def vhosts():</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l307" name="l307">307</a></td><td><pre><span class="insertion">+</span><span class="insertion"> return list(item[0] for item in sql.execute('SELECT VHOST FROM HOSTSERV').fetchall())</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l308" name="l308">308</a></td><td><pre><span class="bold">diff --git a/ircs/core/irc.py b/ircs/core/irc.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l309" name="l309">309</a></td><td><pre><span class="bold">new file mode 100644</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l310" name="l310">310</a></td><td><pre><span class="bold">index 0000000..e0834e5</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l311" name="l311">311</a></td><td><pre><span class="bold">--- /dev/null</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l312" name="l312">312</a></td><td><pre><span class="bold">+++ b/ircs/core/irc.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l313" name="l313">313</a></td><td><pre><span class="hunk">@@ -0,0 +1,433 @@</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l314" name="l314">314</a></td><td><pre><span class="insertion">+</span><span class="insertion">#!/usr/bin/env python</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l315" name="l315">315</a></td><td><pre><span class="insertion">+</span><span class="insertion"># IRC Services (IRCS) - Developed by acidvegas in Python (https://acid.vegas/ircs)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l316" name="l316">316</a></td><td><pre><span class="insertion">+</span><span class="insertion"># irc.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l317" name="l317">317</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l318" name="l318">318</a></td><td><pre><span class="insertion">+</span><span class="insertion">import socket</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l319" name="l319">319</a></td><td><pre><span class="insertion">+</span><span class="insertion">import ssl</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l320" name="l320">320</a></td><td><pre><span class="insertion">+</span><span class="insertion">import time</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l321" name="l321">321</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l322" name="l322">322</a></td><td><pre><span class="insertion">+</span><span class="insertion">import config</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l323" name="l323">323</a></td><td><pre><span class="insertion">+</span><span class="insertion">import debug</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l324" name="l324">324</a></td><td><pre><span class="insertion">+</span><span class="insertion">from functions import Database, ChanServ, HostServ</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l325" name="l325">325</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l326" name="l326">326</a></td><td><pre><span class="insertion">+</span><span class="insertion"># Formatting Control Characters / Color Codes</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l327" name="l327">327</a></td><td><pre><span class="insertion">+</span><span class="insertion">bold = '\x02'</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l328" name="l328">328</a></td><td><pre><span class="insertion">+</span><span class="insertion">italic = '\x1D'</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l329" name="l329">329</a></td><td><pre><span class="insertion">+</span><span class="insertion">underline = '\x1F'</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l330" name="l330">330</a></td><td><pre><span class="insertion">+</span><span class="insertion">reverse = '\x16'</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l331" name="l331">331</a></td><td><pre><span class="insertion">+</span><span class="insertion">reset = '\x0f'</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l332" name="l332">332</a></td><td><pre><span class="insertion">+</span><span class="insertion">white = '00'</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l333" name="l333">333</a></td><td><pre><span class="insertion">+</span><span class="insertion">black = '01'</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l334" name="l334">334</a></td><td><pre><span class="insertion">+</span><span class="insertion">blue = '02'</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l335" name="l335">335</a></td><td><pre><span class="insertion">+</span><span class="insertion">green = '03'</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l336" name="l336">336</a></td><td><pre><span class="insertion">+</span><span class="insertion">red = '04'</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l337" name="l337">337</a></td><td><pre><span class="insertion">+</span><span class="insertion">brown = '05'</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l338" name="l338">338</a></td><td><pre><span class="insertion">+</span><span class="insertion">purple = '06'</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l339" name="l339">339</a></td><td><pre><span class="insertion">+</span><span class="insertion">orange = '07'</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l340" name="l340">340</a></td><td><pre><span class="insertion">+</span><span class="insertion">yellow = '08'</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l341" name="l341">341</a></td><td><pre><span class="insertion">+</span><span class="insertion">light_green = '09'</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l342" name="l342">342</a></td><td><pre><span class="insertion">+</span><span class="insertion">cyan = '10'</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l343" name="l343">343</a></td><td><pre><span class="insertion">+</span><span class="insertion">light_cyan = '11'</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l344" name="l344">344</a></td><td><pre><span class="insertion">+</span><span class="insertion">light_blue = '12'</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l345" name="l345">345</a></td><td><pre><span class="insertion">+</span><span class="insertion">pink = '13'</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l346" name="l346">346</a></td><td><pre><span class="insertion">+</span><span class="insertion">grey = '14'</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l347" name="l347">347</a></td><td><pre><span class="insertion">+</span><span class="insertion">light_grey = '15'</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l348" name="l348">348</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l349" name="l349">349</a></td><td><pre><span class="insertion">+</span><span class="insertion">class IRC(object):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l350" name="l350">350</a></td><td><pre><span class="insertion">+</span><span class="insertion"> server = config.server</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l351" name="l351">351</a></td><td><pre><span class="insertion">+</span><span class="insertion"> port = config.port</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l352" name="l352">352</a></td><td><pre><span class="insertion">+</span><span class="insertion"> use_ipv6 = config.use_ipv6</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l353" name="l353">353</a></td><td><pre><span class="insertion">+</span><span class="insertion"> use_ssl = config.use_ssl</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l354" name="l354">354</a></td><td><pre><span class="insertion">+</span><span class="insertion"> vhost = config.vhost</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l355" name="l355">355</a></td><td><pre><span class="insertion">+</span><span class="insertion"> password = config.password</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l356" name="l356">356</a></td><td><pre><span class="insertion">+</span><span class="insertion"> nickname = config.nickname</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l357" name="l357">357</a></td><td><pre><span class="insertion">+</span><span class="insertion"> username = config.username</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l358" name="l358">358</a></td><td><pre><span class="insertion">+</span><span class="insertion"> realname = config.realname</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l359" name="l359">359</a></td><td><pre><span class="insertion">+</span><span class="insertion"> oper_passwd = config.oper_passwd</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l360" name="l360">360</a></td><td><pre><span class="insertion">+</span><span class="insertion"> admin_host = config.admin_host</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l361" name="l361">361</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l362" name="l362">362</a></td><td><pre><span class="insertion">+</span><span class="insertion"> def __init__(self):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l363" name="l363">363</a></td><td><pre><span class="insertion">+</span><span class="insertion"> self.husers = list()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l364" name="l364">364</a></td><td><pre><span class="insertion">+</span><span class="insertion"> self.last = dict()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l365" name="l365">365</a></td><td><pre><span class="insertion">+</span><span class="insertion"> self.sock = None</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l366" name="l366">366</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l367" name="l367">367</a></td><td><pre><span class="insertion">+</span><span class="insertion"> def action(self, chan, msg):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l368" name="l368">368</a></td><td><pre><span class="insertion">+</span><span class="insertion"> self.sendmsg(chan, '\x01ACTION {0}\x01'.format(msg))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l369" name="l369">369</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l370" name="l370">370</a></td><td><pre><span class="insertion">+</span><span class="insertion"> def chghost(self, nick, host):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l371" name="l371">371</a></td><td><pre><span class="insertion">+</span><span class="insertion"> self.raw('CHGHOST {0} {1}'.format(nick, host))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l372" name="l372">372</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l373" name="l373">373</a></td><td><pre><span class="insertion">+</span><span class="insertion"> def color(self, msg, foreground, background=None):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l374" name="l374">374</a></td><td><pre><span class="insertion">+</span><span class="insertion"> if background:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l375" name="l375">375</a></td><td><pre><span class="insertion">+</span><span class="insertion"> return '\x03{0},{1}{2}{3}'.format(foreground, background, msg, reset)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l376" name="l376">376</a></td><td><pre><span class="insertion">+</span><span class="insertion"> else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l377" name="l377">377</a></td><td><pre><span class="insertion">+</span><span class="insertion"> return '\x03{0}{1}{2}'.format(foreground, msg, reset)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l378" name="l378">378</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l379" name="l379">379</a></td><td><pre><span class="insertion">+</span><span class="insertion"> def connect(self):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l380" name="l380">380</a></td><td><pre><span class="insertion">+</span><span class="insertion"> try:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l381" name="l381">381</a></td><td><pre><span class="insertion">+</span><span class="insertion"> self.create_socket()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l382" name="l382">382</a></td><td><pre><span class="insertion">+</span><span class="insertion"> self.sock.connect((self.server, self.port))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l383" name="l383">383</a></td><td><pre><span class="insertion">+</span><span class="insertion"> if self.password:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l384" name="l384">384</a></td><td><pre><span class="insertion">+</span><span class="insertion"> self.raw('PASS ' + self.password)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l385" name="l385">385</a></td><td><pre><span class="insertion">+</span><span class="insertion"> self.raw('USER {0} 0 * :{1}'.format(self.username, self.realname))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l386" name="l386">386</a></td><td><pre><span class="insertion">+</span><span class="insertion"> self.raw('NICK ' + self.nickname)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l387" name="l387">387</a></td><td><pre><span class="insertion">+</span><span class="insertion"> except socket.error as ex:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l388" name="l388">388</a></td><td><pre><span class="insertion">+</span><span class="insertion"> debug.error('Failed to connect to IRC server.', ex)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l389" name="l389">389</a></td><td><pre><span class="insertion">+</span><span class="insertion"> self.event_disconnect()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l390" name="l390">390</a></td><td><pre><span class="insertion">+</span><span class="insertion"> else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l391" name="l391">391</a></td><td><pre><span class="insertion">+</span><span class="insertion"> self.listen()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l392" name="l392">392</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l393" name="l393">393</a></td><td><pre><span class="insertion">+</span><span class="insertion"> def create_socket(self):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l394" name="l394">394</a></td><td><pre><span class="insertion">+</span><span class="insertion"> if self.use_ipv6:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l395" name="l395">395</a></td><td><pre><span class="insertion">+</span><span class="insertion"> self.sock = socket.socket(socket.AF_INET6, socket.SOCK_STREAM)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l396" name="l396">396</a></td><td><pre><span class="insertion">+</span><span class="insertion"> else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l397" name="l397">397</a></td><td><pre><span class="insertion">+</span><span class="insertion"> self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l398" name="l398">398</a></td><td><pre><span class="insertion">+</span><span class="insertion"> if self.vhost:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l399" name="l399">399</a></td><td><pre><span class="insertion">+</span><span class="insertion"> self.sock.bind((self.vhost, 0))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l400" name="l400">400</a></td><td><pre><span class="insertion">+</span><span class="insertion"> if self.use_ssl:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l401" name="l401">401</a></td><td><pre><span class="insertion">+</span><span class="insertion"> self.sock = ssl.wrap_socket(self.sock)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l402" name="l402">402</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l403" name="l403">403</a></td><td><pre><span class="insertion">+</span><span class="insertion"> def error(self, target, msg, reason=None):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l404" name="l404">404</a></td><td><pre><span class="insertion">+</span><span class="insertion"> if reason:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l405" name="l405">405</a></td><td><pre><span class="insertion">+</span><span class="insertion"> self.sendmsg(target, '[{0}] {1} {2}'.format(self.color('ERROR', red), msg, self.color('({0})'.format(str(reason)), grey)))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l406" name="l406">406</a></td><td><pre><span class="insertion">+</span><span class="insertion"> else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l407" name="l407">407</a></td><td><pre><span class="insertion">+</span><span class="insertion"> self.sendmsg(target, '[{0}] {1}'.format(self.color('ERROR', red), msg))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l408" name="l408">408</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l409" name="l409">409</a></td><td><pre><span class="insertion">+</span><span class="insertion"> def event_connect(self):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l410" name="l410">410</a></td><td><pre><span class="insertion">+</span><span class="insertion"> self.mode(self.nickname, '+Bd')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l411" name="l411">411</a></td><td><pre><span class="insertion">+</span><span class="insertion"> self.oper(self.username, self.oper_passwd)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l412" name="l412">412</a></td><td><pre><span class="insertion">+</span><span class="insertion"> if Database.check():</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l413" name="l413">413</a></td><td><pre><span class="insertion">+</span><span class="insertion"> for channel in ChanServ.channels():</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l414" name="l414">414</a></td><td><pre><span class="insertion">+</span><span class="insertion"> self.join(channel)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l415" name="l415">415</a></td><td><pre><span class="insertion">+</span><span class="insertion"> else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l416" name="l416">416</a></td><td><pre><span class="insertion">+</span><span class="insertion"> Database.create()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l417" name="l417">417</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l418" name="l418">418</a></td><td><pre><span class="insertion">+</span><span class="insertion"> def event_connection(self, nick, ident):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l419" name="l419">419</a></td><td><pre><span class="insertion">+</span><span class="insertion"> vhost = HostServ.get_vhost(ident, True)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l420" name="l420">420</a></td><td><pre><span class="insertion">+</span><span class="insertion"> if vhost:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l421" name="l421">421</a></td><td><pre><span class="insertion">+</span><span class="insertion"> self.chghost(nick, vhost)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l422" name="l422">422</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l423" name="l423">423</a></td><td><pre><span class="insertion">+</span><span class="insertion"> def event_disconnect(self):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l424" name="l424">424</a></td><td><pre><span class="insertion">+</span><span class="insertion"> self.sock.close()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l425" name="l425">425</a></td><td><pre><span class="insertion">+</span><span class="insertion"> time.sleep(10)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l426" name="l426">426</a></td><td><pre><span class="insertion">+</span><span class="insertion"> self.connect()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l427" name="l427">427</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l428" name="l428">428</a></td><td><pre><span class="insertion">+</span><span class="insertion"> def event_end_of_who(self):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l429" name="l429">429</a></td><td><pre><span class="insertion">+</span><span class="insertion"> if self.last['cmd'] == 'husers':</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l430" name="l430">430</a></td><td><pre><span class="insertion">+</span><span class="insertion"> if self.husers:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l431" name="l431">431</a></td><td><pre><span class="insertion">+</span><span class="insertion"> self.sendmsg(self.last['nick'], '{0} {1}'.format(self.color('Total:', light_blue), self.color(len(self.husers), grey)))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l432" name="l432">432</a></td><td><pre><span class="insertion">+</span><span class="insertion"> else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l433" name="l433">433</a></td><td><pre><span class="insertion">+</span><span class="insertion"> self.error(self.last['nick'], 'No hidden users found.')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l434" name="l434">434</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l435" name="l435">435</a></td><td><pre><span class="insertion">+</span><span class="insertion"> def event_join(self, nick, ident, chan):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l436" name="l436">436</a></td><td><pre><span class="insertion">+</span><span class="insertion"> mode = ChanServ.get_mode(chan, ident)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l437" name="l437">437</a></td><td><pre><span class="insertion">+</span><span class="insertion"> if mode:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l438" name="l438">438</a></td><td><pre><span class="insertion">+</span><span class="insertion"> self.mode(chan, '+{0} {1}'.format(mode, nick))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l439" name="l439">439</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l440" name="l440">440</a></td><td><pre><span class="insertion">+</span><span class="insertion"> def event_kick(self, chan, kicked):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l441" name="l441">441</a></td><td><pre><span class="insertion">+</span><span class="insertion"> if kicked == self.nickname:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l442" name="l442">442</a></td><td><pre><span class="insertion">+</span><span class="insertion"> if chan in Database.channels():</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l443" name="l443">443</a></td><td><pre><span class="insertion">+</span><span class="insertion"> self.join(chan)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l444" name="l444">444</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l445" name="l445">445</a></td><td><pre><span class="insertion">+</span><span class="insertion"> def event_nick_in_use(self):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l446" name="l446">446</a></td><td><pre><span class="insertion">+</span><span class="insertion"> debug.error_exit('IRCS is already running.')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l447" name="l447">447</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l448" name="l448">448</a></td><td><pre><span class="insertion">+</span><span class="insertion"> def event_notice(self, nick, data):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l449" name="l449">449</a></td><td><pre><span class="insertion">+</span><span class="insertion"> if '.' in nick or nick == self.server:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l450" name="l450">450</a></td><td><pre><span class="insertion">+</span><span class="insertion"> args = data.split()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l451" name="l451">451</a></td><td><pre><span class="insertion">+</span><span class="insertion"> if 'Client connecting' in data:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l452" name="l452">452</a></td><td><pre><span class="insertion">+</span><span class="insertion"> nick = args[6]</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l453" name="l453">453</a></td><td><pre><span class="insertion">+</span><span class="insertion"> ident = args[7][1:][:-1]</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l454" name="l454">454</a></td><td><pre><span class="insertion">+</span><span class="insertion"> self.event_connection(nick, ident)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l455" name="l455">455</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l456" name="l456">456</a></td><td><pre><span class="insertion">+</span><span class="insertion"> def event_private(self, nick, ident, msg):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l457" name="l457">457</a></td><td><pre><span class="insertion">+</span><span class="insertion"> try:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l458" name="l458">458</a></td><td><pre><span class="insertion">+</span><span class="insertion"> args = msg.split()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l459" name="l459">459</a></td><td><pre><span class="insertion">+</span><span class="insertion"> cmd = args[0][1:]</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l460" name="l460">460</a></td><td><pre><span class="insertion">+</span><span class="insertion"> host = ident.split('@')[1]</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l461" name="l461">461</a></td><td><pre><span class="insertion">+</span><span class="insertion"> if cmd == 'husers' and host == self.admin_host:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l462" name="l462">462</a></td><td><pre><span class="insertion">+</span><span class="insertion"> if len(args) == 1:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l463" name="l463">463</a></td><td><pre><span class="insertion">+</span><span class="insertion"> self.husers = list()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l464" name="l464">464</a></td><td><pre><span class="insertion">+</span><span class="insertion"> self.last = {'nick':nick,'cmd':'husers'}</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l465" name="l465">465</a></td><td><pre><span class="insertion">+</span><span class="insertion"> self.who('I', '*')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l466" name="l466">466</a></td><td><pre><span class="insertion">+</span><span class="insertion"> elif len(args) == 2:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l467" name="l467">467</a></td><td><pre><span class="insertion">+</span><span class="insertion"> if args[1] == 'kill':</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l468" name="l468">468</a></td><td><pre><span class="insertion">+</span><span class="insertion"> if self.husers:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l469" name="l469">469</a></td><td><pre><span class="insertion">+</span><span class="insertion"> self.action(nick, 'Killing all hidden users...')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l470" name="l470">470</a></td><td><pre><span class="insertion">+</span><span class="insertion"> for item in self.husers:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l471" name="l471">471</a></td><td><pre><span class="insertion">+</span><span class="insertion"> self.kill(item['nick'], 'Killed by IRCS anti-bot protection.')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l472" name="l472">472</a></td><td><pre><span class="insertion">+</span><span class="insertion"> else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l473" name="l473">473</a></td><td><pre><span class="insertion">+</span><span class="insertion"> self.error(nick, 'Hidden users list is empty.', 'Make sure you run !husers first')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l474" name="l474">474</a></td><td><pre><span class="insertion">+</span><span class="insertion"> elif args[1] == 'gzline':</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l475" name="l475">475</a></td><td><pre><span class="insertion">+</span><span class="insertion"> if self.husers:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l476" name="l476">476</a></td><td><pre><span class="insertion">+</span><span class="insertion"> self.action(nick, 'Z:Lining all hidden users...')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l477" name="l477">477</a></td><td><pre><span class="insertion">+</span><span class="insertion"> for item in self.husers:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l478" name="l478">478</a></td><td><pre><span class="insertion">+</span><span class="insertion"> self.gzline(item['host'], '1d', 'Banned by IRCS anti-bot protection.')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l479" name="l479">479</a></td><td><pre><span class="insertion">+</span><span class="insertion"> else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l480" name="l480">480</a></td><td><pre><span class="insertion">+</span><span class="insertion"> self.error(nick, 'Hidden users list is empty.', 'Make sure you run !husers first')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l481" name="l481">481</a></td><td><pre><span class="insertion">+</span><span class="insertion"> elif len(args) == 3:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l482" name="l482">482</a></td><td><pre><span class="insertion">+</span><span class="insertion"> if args [1] == 'join':</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l483" name="l483">483</a></td><td><pre><span class="insertion">+</span><span class="insertion"> channel = args[2]</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l484" name="l484">484</a></td><td><pre><span class="insertion">+</span><span class="insertion"> if channel.startswith('#') and len(channel) &lt;= 20:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l485" name="l485">485</a></td><td><pre><span class="insertion">+</span><span class="insertion"> if self.husers:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l486" name="l486">486</a></td><td><pre><span class="insertion">+</span><span class="insertion"> self.action(nick, 'Joining all hidden users to {0}...'.format(channel))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l487" name="l487">487</a></td><td><pre><span class="insertion">+</span><span class="insertion"> for item in self.husers:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l488" name="l488">488</a></td><td><pre><span class="insertion">+</span><span class="insertion"> self.sajoin(item['nick'], channel)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l489" name="l489">489</a></td><td><pre><span class="insertion">+</span><span class="insertion"> else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l490" name="l490">490</a></td><td><pre><span class="insertion">+</span><span class="insertion"> self.error(nick, 'Hidden users list is empty.', 'Make sure you run !husers first')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l491" name="l491">491</a></td><td><pre><span class="insertion">+</span><span class="insertion"> else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l492" name="l492">492</a></td><td><pre><span class="insertion">+</span><span class="insertion"> self.error(nick, 'Invalid arguments.')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l493" name="l493">493</a></td><td><pre><span class="insertion">+</span><span class="insertion"> else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l494" name="l494">494</a></td><td><pre><span class="insertion">+</span><span class="insertion"> self.error(nick, 'Invalid arguments.')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l495" name="l495">495</a></td><td><pre><span class="insertion">+</span><span class="insertion"> else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l496" name="l496">496</a></td><td><pre><span class="insertion">+</span><span class="insertion"> self.error(nick, 'Invalid arguments.')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l497" name="l497">497</a></td><td><pre><span class="insertion">+</span><span class="insertion"> elif cmd == 'mode':</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l498" name="l498">498</a></td><td><pre><span class="insertion">+</span><span class="insertion"> if len(args) &gt; 1:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l499" name="l499">499</a></td><td><pre><span class="insertion">+</span><span class="insertion"> channel = args[1]</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l500" name="l500">500</a></td><td><pre><span class="insertion">+</span><span class="insertion"> if channel[:1] == '#' and len(channel) &lt;= 20 and debug.check_data(channel):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l501" name="l501">501</a></td><td><pre><span class="insertion">+</span><span class="insertion"> if ChanServ.get_mode(channel, ident) == 'q' or host == self.admin_host:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l502" name="l502">502</a></td><td><pre><span class="insertion">+</span><span class="insertion"> if len(args) == 2:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l503" name="l503">503</a></td><td><pre><span class="insertion">+</span><span class="insertion"> if channel in ChanServ.channels():</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l504" name="l504">504</a></td><td><pre><span class="insertion">+</span><span class="insertion"> data = ChanServ.read(channel)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l505" name="l505">505</a></td><td><pre><span class="insertion">+</span><span class="insertion"> self.sendmsg(nick, '[{0}]'.format(self.color(channel, purple)))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l506" name="l506">506</a></td><td><pre><span class="insertion">+</span><span class="insertion"> for row in data:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l507" name="l507">507</a></td><td><pre><span class="insertion">+</span><span class="insertion"> self.sendmsg(nick, '{0} | {1}'.format(self.color('+' + row[1], grey), self.color(row[0], yellow)))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l508" name="l508">508</a></td><td><pre><span class="insertion">+</span><span class="insertion"> self.sendmsg(nick, '{0} {1}'.format(self.color('Total:', light_blue), self.color(len(data), grey)))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l509" name="l509">509</a></td><td><pre><span class="insertion">+</span><span class="insertion"> else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l510" name="l510">510</a></td><td><pre><span class="insertion">+</span><span class="insertion"> self.error(nick, self.color(channel, purple) + ' does not exist.')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l511" name="l511">511</a></td><td><pre><span class="insertion">+</span><span class="insertion"> elif len(args) == 3:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l512" name="l512">512</a></td><td><pre><span class="insertion">+</span><span class="insertion"> if args[2] in ('a','h','o','v','q'):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l513" name="l513">513</a></td><td><pre><span class="insertion">+</span><span class="insertion"> if channel in ChanServ.channels():</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l514" name="l514">514</a></td><td><pre><span class="insertion">+</span><span class="insertion"> mode = args[2]</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l515" name="l515">515</a></td><td><pre><span class="insertion">+</span><span class="insertion"> data = ChanServ.read(channel, mode)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l516" name="l516">516</a></td><td><pre><span class="insertion">+</span><span class="insertion"> if data:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l517" name="l517">517</a></td><td><pre><span class="insertion">+</span><span class="insertion"> self.sendmsg(nick, '[{0}] {1}'.format(self.color(channel, purple) , self.color('(+{0})'.format(mode), grey)))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l518" name="l518">518</a></td><td><pre><span class="insertion">+</span><span class="insertion"> for row in data:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l519" name="l519">519</a></td><td><pre><span class="insertion">+</span><span class="insertion"> self.sendmsg(nick, self.color(row[0], yellow))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l520" name="l520">520</a></td><td><pre><span class="insertion">+</span><span class="insertion"> self.sendmsg(nick, '{0} {1}'.format(self.color('Total:', light_blue), self.color(len(data), grey)))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l521" name="l521">521</a></td><td><pre><span class="insertion">+</span><span class="insertion"> else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l522" name="l522">522</a></td><td><pre><span class="insertion">+</span><span class="insertion"> self.error(nick, self.color('+{0}'.format(mode), grey) + ' is empty.')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l523" name="l523">523</a></td><td><pre><span class="insertion">+</span><span class="insertion"> else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l524" name="l524">524</a></td><td><pre><span class="insertion">+</span><span class="insertion"> self.error(nick, self.color(channel, purple) + ' does not exist.')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l525" name="l525">525</a></td><td><pre><span class="insertion">+</span><span class="insertion"> else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l526" name="l526">526</a></td><td><pre><span class="insertion">+</span><span class="insertion"> self.error(nick, 'Invalid arguments.')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l527" name="l527">527</a></td><td><pre><span class="insertion">+</span><span class="insertion"> elif len(args) == 4:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l528" name="l528">528</a></td><td><pre><span class="insertion">+</span><span class="insertion"> if args[2] in ('a','h','o','v','q') and args[3][:1] in '+-' and len(args[3]) &lt;= 63 and debug.check_data(args[3]):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l529" name="l529">529</a></td><td><pre><span class="insertion">+</span><span class="insertion"> mode = args[2]</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l530" name="l530">530</a></td><td><pre><span class="insertion">+</span><span class="insertion"> if mode == 'q' and host != self.admin_host:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l531" name="l531">531</a></td><td><pre><span class="insertion">+</span><span class="insertion"> self.error(nick, 'You do not have permission to change this mode.')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l532" name="l532">532</a></td><td><pre><span class="insertion">+</span><span class="insertion"> else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l533" name="l533">533</a></td><td><pre><span class="insertion">+</span><span class="insertion"> action = args[3][:1]</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l534" name="l534">534</a></td><td><pre><span class="insertion">+</span><span class="insertion"> ident = args[3][1:]</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l535" name="l535">535</a></td><td><pre><span class="insertion">+</span><span class="insertion"> if action == '+':</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l536" name="l536">536</a></td><td><pre><span class="insertion">+</span><span class="insertion"> if not ChanServ.get_mode(channel, ident):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l537" name="l537">537</a></td><td><pre><span class="insertion">+</span><span class="insertion"> ChanServ.add_mode(channel, ident, mode)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l538" name="l538">538</a></td><td><pre><span class="insertion">+</span><span class="insertion"> self.sendmsg(nick, '{0} {1} has been {2} to the {3} database.'.format(self.color(ident, light_blue), self.color('(+{0})'.format(mode), grey), self.color('added', green), self.color(channel, purple)))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l539" name="l539">539</a></td><td><pre><span class="insertion">+</span><span class="insertion"> else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l540" name="l540">540</a></td><td><pre><span class="insertion">+</span><span class="insertion"> self.error(nick, '{0} already exists in the {1} database.'.format(self.color(ident, light_blue), self.color(channel, purple)))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l541" name="l541">541</a></td><td><pre><span class="insertion">+</span><span class="insertion"> elif action == '-':</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l542" name="l542">542</a></td><td><pre><span class="insertion">+</span><span class="insertion"> if ChanServ.get_mode(channel, ident):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l543" name="l543">543</a></td><td><pre><span class="insertion">+</span><span class="insertion"> ChanServ.del_mode(channel, ident)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l544" name="l544">544</a></td><td><pre><span class="insertion">+</span><span class="insertion"> self.sendmsg(nick, '{0} {1} has been {2} from the {3} database.'.format(self.color(ident, light_blue), self.color('(+{0})'.format(mode), grey), self.color('removed', red), self.color(channel, purple)))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l545" name="l545">545</a></td><td><pre><span class="insertion">+</span><span class="insertion"> else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l546" name="l546">546</a></td><td><pre><span class="insertion">+</span><span class="insertion"> self.error(nick, '{0} does not exist in the {1} database.'.format(self.color(ident, light_blue), self.color(channel, purple)))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l547" name="l547">547</a></td><td><pre><span class="insertion">+</span><span class="insertion"> else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l548" name="l548">548</a></td><td><pre><span class="insertion">+</span><span class="insertion"> self.error(nick, 'Invalid arguments.')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l549" name="l549">549</a></td><td><pre><span class="insertion">+</span><span class="insertion"> else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l550" name="l550">550</a></td><td><pre><span class="insertion">+</span><span class="insertion"> self.error(nick, 'Invalid arguments.')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l551" name="l551">551</a></td><td><pre><span class="insertion">+</span><span class="insertion"> else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l552" name="l552">552</a></td><td><pre><span class="insertion">+</span><span class="insertion"> self.error(nick, 'You do not have permission to use this command.')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l553" name="l553">553</a></td><td><pre><span class="insertion">+</span><span class="insertion"> else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l554" name="l554">554</a></td><td><pre><span class="insertion">+</span><span class="insertion"> self.error(nick, 'Invalid arguments.')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l555" name="l555">555</a></td><td><pre><span class="insertion">+</span><span class="insertion"> else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l556" name="l556">556</a></td><td><pre><span class="insertion">+</span><span class="insertion"> self.error(nick, 'Invalid arguments.')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l557" name="l557">557</a></td><td><pre><span class="insertion">+</span><span class="insertion"> elif cmd == 'sync':</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l558" name="l558">558</a></td><td><pre><span class="insertion">+</span><span class="insertion"> if len(args) == 2:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l559" name="l559">559</a></td><td><pre><span class="insertion">+</span><span class="insertion"> channel = args[1]</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l560" name="l560">560</a></td><td><pre><span class="insertion">+</span><span class="insertion"> if channel[:1] == '#' and len(channel) &lt;= 20 and debug.check_data(channel):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l561" name="l561">561</a></td><td><pre><span class="insertion">+</span><span class="insertion"> if channel in ChanServ.channels():</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l562" name="l562">562</a></td><td><pre><span class="insertion">+</span><span class="insertion"> if ChanServ.get_mode(channel, ident) == 'q' or host == self.admin_host:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l563" name="l563">563</a></td><td><pre><span class="insertion">+</span><span class="insertion"> self.action(nick, 'Syncing all modes in {0}...'.format(color(channel, purple)))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l564" name="l564">564</a></td><td><pre><span class="insertion">+</span><span class="insertion"> self.last['cmd'] = 'sync ' + channel</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l565" name="l565">565</a></td><td><pre><span class="insertion">+</span><span class="insertion"> self.who('h', '*')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l566" name="l566">566</a></td><td><pre><span class="insertion">+</span><span class="insertion"> else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l567" name="l567">567</a></td><td><pre><span class="insertion">+</span><span class="insertion"> self.error(nick, 'You do not have permission to use this command.')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l568" name="l568">568</a></td><td><pre><span class="insertion">+</span><span class="insertion"> else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l569" name="l569">569</a></td><td><pre><span class="insertion">+</span><span class="insertion"> self.error(nick, '{0} does not exist.'.format(color(channel, purple)))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l570" name="l570">570</a></td><td><pre><span class="insertion">+</span><span class="insertion"> else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l571" name="l571">571</a></td><td><pre><span class="insertion">+</span><span class="insertion"> self.error(nick, 'Invalid arguments.')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l572" name="l572">572</a></td><td><pre><span class="insertion">+</span><span class="insertion"> else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l573" name="l573">573</a></td><td><pre><span class="insertion">+</span><span class="insertion"> self.error(nick, 'Invalid arguments.')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l574" name="l574">574</a></td><td><pre><span class="insertion">+</span><span class="insertion"> elif cmd == 'vhost':</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l575" name="l575">575</a></td><td><pre><span class="insertion">+</span><span class="insertion"> if len(args) == 2:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l576" name="l576">576</a></td><td><pre><span class="insertion">+</span><span class="insertion"> if args[1] == 'list':</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l577" name="l577">577</a></td><td><pre><span class="insertion">+</span><span class="insertion"> if host == self.admin_host:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l578" name="l578">578</a></td><td><pre><span class="insertion">+</span><span class="insertion"> vhosts = HostServ.read()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l579" name="l579">579</a></td><td><pre><span class="insertion">+</span><span class="insertion"> if vhosts:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l580" name="l580">580</a></td><td><pre><span class="insertion">+</span><span class="insertion"> self.sendmsg(nick, '[{0}]'.format(self.color('Registered Vhosts', purple)))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l581" name="l581">581</a></td><td><pre><span class="insertion">+</span><span class="insertion"> for vhost in vhosts:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l582" name="l582">582</a></td><td><pre><span class="insertion">+</span><span class="insertion"> self.sendmsg(nick, '{0} {1}'.format(self.color(vhost[0], yellow), self.color('({0})'.format(vhost[1]), grey)))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l583" name="l583">583</a></td><td><pre><span class="insertion">+</span><span class="insertion"> self.sendmsg(nick, '{0} {1}'.format(self.color('Total:', light_blue), self.color(len(vhosts), grey)))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l584" name="l584">584</a></td><td><pre><span class="insertion">+</span><span class="insertion"> else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l585" name="l585">585</a></td><td><pre><span class="insertion">+</span><span class="insertion"> self.error(nick, 'Vhost list is empty.')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l586" name="l586">586</a></td><td><pre><span class="insertion">+</span><span class="insertion"> else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l587" name="l587">587</a></td><td><pre><span class="insertion">+</span><span class="insertion"> self.error(nick, 'You do not have permission to use this command.')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l588" name="l588">588</a></td><td><pre><span class="insertion">+</span><span class="insertion"> elif args[1] == 'off':</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l589" name="l589">589</a></td><td><pre><span class="insertion">+</span><span class="insertion"> status = HostServ.get_status(ident)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l590" name="l590">590</a></td><td><pre><span class="insertion">+</span><span class="insertion"> if status == 'off':</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l591" name="l591">591</a></td><td><pre><span class="insertion">+</span><span class="insertion"> self.error(nick, 'VHOST is already turned off.')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l592" name="l592">592</a></td><td><pre><span class="insertion">+</span><span class="insertion"> elif status == 'on':</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l593" name="l593">593</a></td><td><pre><span class="insertion">+</span><span class="insertion"> HostServ.set_status(ident, 'off')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l594" name="l594">594</a></td><td><pre><span class="insertion">+</span><span class="insertion"> self.sendmsg(nick, 'VHOST has been turned ' + color('off', red))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l595" name="l595">595</a></td><td><pre><span class="insertion">+</span><span class="insertion"> else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l596" name="l596">596</a></td><td><pre><span class="insertion">+</span><span class="insertion"> self.error(nick, 'You do not have a registered VHOST.')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l597" name="l597">597</a></td><td><pre><span class="insertion">+</span><span class="insertion"> elif args[1] == 'on':</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l598" name="l598">598</a></td><td><pre><span class="insertion">+</span><span class="insertion"> status = HostServ.get_status(ident)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l599" name="l599">599</a></td><td><pre><span class="insertion">+</span><span class="insertion"> if status == 'off':</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l600" name="l600">600</a></td><td><pre><span class="insertion">+</span><span class="insertion"> HostServ.set_status(ident, 'on')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l601" name="l601">601</a></td><td><pre><span class="insertion">+</span><span class="insertion"> self.sendmsg(nick, 'VHOST has been turned ' + color('on', green))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l602" name="l602">602</a></td><td><pre><span class="insertion">+</span><span class="insertion"> elif status == 'on':</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l603" name="l603">603</a></td><td><pre><span class="insertion">+</span><span class="insertion"> self.error(nick, 'Your VHOST is already turned on.')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l604" name="l604">604</a></td><td><pre><span class="insertion">+</span><span class="insertion"> else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l605" name="l605">605</a></td><td><pre><span class="insertion">+</span><span class="insertion"> self.error(nick, 'You do not have a registered VHOST.')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l606" name="l606">606</a></td><td><pre><span class="insertion">+</span><span class="insertion"> elif args[1] == 'sync':</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l607" name="l607">607</a></td><td><pre><span class="insertion">+</span><span class="insertion"> vhost = HostServ.get_vhost(ident)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l608" name="l608">608</a></td><td><pre><span class="insertion">+</span><span class="insertion"> if host == vhost:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l609" name="l609">609</a></td><td><pre><span class="insertion">+</span><span class="insertion"> self.error(nick, 'Your VHOST is already synced and working.')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l610" name="l610">610</a></td><td><pre><span class="insertion">+</span><span class="insertion"> elif vhost:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l611" name="l611">611</a></td><td><pre><span class="insertion">+</span><span class="insertion"> self.action(nick, 'Syncing VHOST...')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l612" name="l612">612</a></td><td><pre><span class="insertion">+</span><span class="insertion"> self.chghost(nick, vhost)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l613" name="l613">613</a></td><td><pre><span class="insertion">+</span><span class="insertion"> else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l614" name="l614">614</a></td><td><pre><span class="insertion">+</span><span class="insertion"> self.error(nick, 'You do not have a registered VHOST.')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l615" name="l615">615</a></td><td><pre><span class="insertion">+</span><span class="insertion"> elif len(args) == 3:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l616" name="l616">616</a></td><td><pre><span class="insertion">+</span><span class="insertion"> if args[1] == 'drop':</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l617" name="l617">617</a></td><td><pre><span class="insertion">+</span><span class="insertion"> if host == self.admin_host:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l618" name="l618">618</a></td><td><pre><span class="insertion">+</span><span class="insertion"> ident = args[2]</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l619" name="l619">619</a></td><td><pre><span class="insertion">+</span><span class="insertion"> if ident in HostServ.idents():</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l620" name="l620">620</a></td><td><pre><span class="insertion">+</span><span class="insertion"> HostServ.delete(ident)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l621" name="l621">621</a></td><td><pre><span class="insertion">+</span><span class="insertion"> self.sendmsg(nick, '{0} has been {1} from the vhost database.'.format(self.color(ident, light_blue), self.color('removed', red)))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l622" name="l622">622</a></td><td><pre><span class="insertion">+</span><span class="insertion"> else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l623" name="l623">623</a></td><td><pre><span class="insertion">+</span><span class="insertion"> self.error(nick, '{0} does not have a vhost.'.format(self.color(ident, light_blue)))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l624" name="l624">624</a></td><td><pre><span class="insertion">+</span><span class="insertion"> else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l625" name="l625">625</a></td><td><pre><span class="insertion">+</span><span class="insertion"> self.error(nick, 'You do not have permission to use this command.')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l626" name="l626">626</a></td><td><pre><span class="insertion">+</span><span class="insertion"> elif len(args) == 4:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l627" name="l627">627</a></td><td><pre><span class="insertion">+</span><span class="insertion"> if args[1] == 'add':</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l628" name="l628">628</a></td><td><pre><span class="insertion">+</span><span class="insertion"> if host == self.admin_host:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l629" name="l629">629</a></td><td><pre><span class="insertion">+</span><span class="insertion"> ident = args[2]</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l630" name="l630">630</a></td><td><pre><span class="insertion">+</span><span class="insertion"> vhost = args[3]</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l631" name="l631">631</a></td><td><pre><span class="insertion">+</span><span class="insertion"> if ident not in HostServ.idents():</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l632" name="l632">632</a></td><td><pre><span class="insertion">+</span><span class="insertion"> HostServ.add(ident, vhost)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l633" name="l633">633</a></td><td><pre><span class="insertion">+</span><span class="insertion"> self.sendmsg(nick, '{0} has been {1} from the database.'.format(self.color(ident, light_blue), self.color('added', green)))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l634" name="l634">634</a></td><td><pre><span class="insertion">+</span><span class="insertion"> else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l635" name="l635">635</a></td><td><pre><span class="insertion">+</span><span class="insertion"> self.error(nick, '{0} is already registered.'.format(color(ident, light_blue)))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l636" name="l636">636</a></td><td><pre><span class="insertion">+</span><span class="insertion"> else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l637" name="l637">637</a></td><td><pre><span class="insertion">+</span><span class="insertion"> self.error(nick, 'You do not have permission to use this command.')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l638" name="l638">638</a></td><td><pre><span class="insertion">+</span><span class="insertion"> else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l639" name="l639">639</a></td><td><pre><span class="insertion">+</span><span class="insertion"> self.error(nick, 'Invalid arguments.')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l640" name="l640">640</a></td><td><pre><span class="insertion">+</span><span class="insertion"> else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l641" name="l641">641</a></td><td><pre><span class="insertion">+</span><span class="insertion"> self.error(nick, 'Invalid arguments.')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l642" name="l642">642</a></td><td><pre><span class="insertion">+</span><span class="insertion"> except Exception as ex:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l643" name="l643">643</a></td><td><pre><span class="insertion">+</span><span class="insertion"> self.error(nick, 'Unexpected error has occured.', ex)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l644" name="l644">644</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l645" name="l645">645</a></td><td><pre><span class="insertion">+</span><span class="insertion"> def event_who(self, chan, user, host, nick):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l646" name="l646">646</a></td><td><pre><span class="insertion">+</span><span class="insertion"> if self.last:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l647" name="l647">647</a></td><td><pre><span class="insertion">+</span><span class="insertion"> if self.last['cmd'] == 'husers':</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l648" name="l648">648</a></td><td><pre><span class="insertion">+</span><span class="insertion"> if chan == '*':</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l649" name="l649">649</a></td><td><pre><span class="insertion">+</span><span class="insertion"> self.husers.append({'user':user,'host':host,'nick':nick})</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l650" name="l650">650</a></td><td><pre><span class="insertion">+</span><span class="insertion"> self.sendmsg(self.last['nick'], '{0} {1}'.format(self.color(nick, yellow), self.color('({0}@{1})'.format(user, host), grey)))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l651" name="l651">651</a></td><td><pre><span class="insertion">+</span><span class="insertion"> elif self.last['cmd'].startswith('sync'):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l652" name="l652">652</a></td><td><pre><span class="insertion">+</span><span class="insertion"> channel = self.last['cmd'].split()[1]</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l653" name="l653">653</a></td><td><pre><span class="insertion">+</span><span class="insertion"> if chan == channel:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l654" name="l654">654</a></td><td><pre><span class="insertion">+</span><span class="insertion"> mode = ChanServ.mode(chan, '{0}@{1]'.format(user, host))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l655" name="l655">655</a></td><td><pre><span class="insertion">+</span><span class="insertion"> if mode:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l656" name="l656">656</a></td><td><pre><span class="insertion">+</span><span class="insertion"> self.mode(chan, '+{0} {1}'.format(mode, nick))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l657" name="l657">657</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l658" name="l658">658</a></td><td><pre><span class="insertion">+</span><span class="insertion"> def gzline(self, host, duration, msg):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l659" name="l659">659</a></td><td><pre><span class="insertion">+</span><span class="insertion"> self.raw('gzline *@{1} {2} {3}'.format(user, host, duration, msg))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l660" name="l660">660</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l661" name="l661">661</a></td><td><pre><span class="insertion">+</span><span class="insertion"> def handle_events(self, data):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l662" name="l662">662</a></td><td><pre><span class="insertion">+</span><span class="insertion"> args = data.split()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l663" name="l663">663</a></td><td><pre><span class="insertion">+</span><span class="insertion"> if args[0] == 'PING':</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l664" name="l664">664</a></td><td><pre><span class="insertion">+</span><span class="insertion"> self.raw('PONG ' + args[1][1:])</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l665" name="l665">665</a></td><td><pre><span class="insertion">+</span><span class="insertion"> elif args[1] == '001':</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l666" name="l666">666</a></td><td><pre><span class="insertion">+</span><span class="insertion"> self.event_connect()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l667" name="l667">667</a></td><td><pre><span class="insertion">+</span><span class="insertion"> elif args[1] == '315':</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l668" name="l668">668</a></td><td><pre><span class="insertion">+</span><span class="insertion"> self.event_end_of_who()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l669" name="l669">669</a></td><td><pre><span class="insertion">+</span><span class="insertion"> elif args[1] == '352':</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l670" name="l670">670</a></td><td><pre><span class="insertion">+</span><span class="insertion"> chan = args[3]</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l671" name="l671">671</a></td><td><pre><span class="insertion">+</span><span class="insertion"> user = args[4]</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l672" name="l672">672</a></td><td><pre><span class="insertion">+</span><span class="insertion"> host = args[5]</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l673" name="l673">673</a></td><td><pre><span class="insertion">+</span><span class="insertion"> nick = args[7]</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l674" name="l674">674</a></td><td><pre><span class="insertion">+</span><span class="insertion"> self.event_who(chan, user, host, nick)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l675" name="l675">675</a></td><td><pre><span class="insertion">+</span><span class="insertion"> elif args[1] == '433':</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l676" name="l676">676</a></td><td><pre><span class="insertion">+</span><span class="insertion"> self.event_nick_in_use()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l677" name="l677">677</a></td><td><pre><span class="insertion">+</span><span class="insertion"> elif args[1] == 'NOTICE':</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l678" name="l678">678</a></td><td><pre><span class="insertion">+</span><span class="insertion"> nick = args[0][1:]</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l679" name="l679">679</a></td><td><pre><span class="insertion">+</span><span class="insertion"> self.event_notice(nick, data)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l680" name="l680">680</a></td><td><pre><span class="insertion">+</span><span class="insertion"> elif args[1] in ('JOIN','KICK','PRIVMSG'):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l681" name="l681">681</a></td><td><pre><span class="insertion">+</span><span class="insertion"> nick = args[0].split('!')[0][1:]</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l682" name="l682">682</a></td><td><pre><span class="insertion">+</span><span class="insertion"> if nick != self.nickname:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l683" name="l683">683</a></td><td><pre><span class="insertion">+</span><span class="insertion"> chan = args[2]</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l684" name="l684">684</a></td><td><pre><span class="insertion">+</span><span class="insertion"> if args[1] == 'JOIN':</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l685" name="l685">685</a></td><td><pre><span class="insertion">+</span><span class="insertion"> host = args[0].split('!')[1]</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l686" name="l686">686</a></td><td><pre><span class="insertion">+</span><span class="insertion"> self.event_join(nick, host, chan[1:])</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l687" name="l687">687</a></td><td><pre><span class="insertion">+</span><span class="insertion"> elif args[1] == 'KICK':</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l688" name="l688">688</a></td><td><pre><span class="insertion">+</span><span class="insertion"> kicked = args[3]</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l689" name="l689">689</a></td><td><pre><span class="insertion">+</span><span class="insertion"> self.event_kick(chan, kicked)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l690" name="l690">690</a></td><td><pre><span class="insertion">+</span><span class="insertion"> elif args[1] == 'PRIVMSG':</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l691" name="l691">691</a></td><td><pre><span class="insertion">+</span><span class="insertion"> ident = args[0].split('!')[1]</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l692" name="l692">692</a></td><td><pre><span class="insertion">+</span><span class="insertion"> msg = data.split('{0} PRIVMSG {1} :'.format(args[0], chan))[1]</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l693" name="l693">693</a></td><td><pre><span class="insertion">+</span><span class="insertion"> if msg.startswith('!'):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l694" name="l694">694</a></td><td><pre><span class="insertion">+</span><span class="insertion"> if chan == self.nickname:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l695" name="l695">695</a></td><td><pre><span class="insertion">+</span><span class="insertion"> self.event_private(nick, ident, msg)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l696" name="l696">696</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l697" name="l697">697</a></td><td><pre><span class="insertion">+</span><span class="insertion"> def join(self, chan):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l698" name="l698">698</a></td><td><pre><span class="insertion">+</span><span class="insertion"> self.raw('JOIN ' + chan)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l699" name="l699">699</a></td><td><pre><span class="insertion">+</span><span class="insertion"> self.mode(chan, '+q ' + self.nickname)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l700" name="l700">700</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l701" name="l701">701</a></td><td><pre><span class="insertion">+</span><span class="insertion"> def kill(self, nick, reason):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l702" name="l702">702</a></td><td><pre><span class="insertion">+</span><span class="insertion"> self.raw('KILL {0} {1}'.format(nick, reason))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l703" name="l703">703</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l704" name="l704">704</a></td><td><pre><span class="insertion">+</span><span class="insertion"> def listen(self):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l705" name="l705">705</a></td><td><pre><span class="insertion">+</span><span class="insertion"> while True:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l706" name="l706">706</a></td><td><pre><span class="insertion">+</span><span class="insertion"> try:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l707" name="l707">707</a></td><td><pre><span class="insertion">+</span><span class="insertion"> data = self.sock.recv(1024).decode('utf-8')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l708" name="l708">708</a></td><td><pre><span class="insertion">+</span><span class="insertion"> if data:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l709" name="l709">709</a></td><td><pre><span class="insertion">+</span><span class="insertion"> for line in (line for line in data.split('\r\n') if line):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l710" name="l710">710</a></td><td><pre><span class="insertion">+</span><span class="insertion"> debug.irc(line)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l711" name="l711">711</a></td><td><pre><span class="insertion">+</span><span class="insertion"> if line.startswith('ERROR :Closing Link:'):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l712" name="l712">712</a></td><td><pre><span class="insertion">+</span><span class="insertion"> raise Exception('Connection has closed.')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l713" name="l713">713</a></td><td><pre><span class="insertion">+</span><span class="insertion"> elif len(line.split()) &gt;= 2:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l714" name="l714">714</a></td><td><pre><span class="insertion">+</span><span class="insertion"> self.handle_events(line)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l715" name="l715">715</a></td><td><pre><span class="insertion">+</span><span class="insertion"> else:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l716" name="l716">716</a></td><td><pre><span class="insertion">+</span><span class="insertion"> debug.error('No data recieved from server.')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l717" name="l717">717</a></td><td><pre><span class="insertion">+</span><span class="insertion"> break</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l718" name="l718">718</a></td><td><pre><span class="insertion">+</span><span class="insertion"> except (UnicodeDecodeError,UnicodeEncodeError):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l719" name="l719">719</a></td><td><pre><span class="insertion">+</span><span class="insertion"> debug.error('Unicode error has occured.')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l720" name="l720">720</a></td><td><pre><span class="insertion">+</span><span class="insertion"> except Exception as ex:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l721" name="l721">721</a></td><td><pre><span class="insertion">+</span><span class="insertion"> debug.error('Unexpected error occured.', ex)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l722" name="l722">722</a></td><td><pre><span class="insertion">+</span><span class="insertion"> break</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l723" name="l723">723</a></td><td><pre><span class="insertion">+</span><span class="insertion"> self.event_disconnect()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l724" name="l724">724</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l725" name="l725">725</a></td><td><pre><span class="insertion">+</span><span class="insertion"> def mode(self, target, mode):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l726" name="l726">726</a></td><td><pre><span class="insertion">+</span><span class="insertion"> self.raw('MODE {0} {1}'.format(target, mode))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l727" name="l727">727</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l728" name="l728">728</a></td><td><pre><span class="insertion">+</span><span class="insertion"> def oper(self, nick, password):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l729" name="l729">729</a></td><td><pre><span class="insertion">+</span><span class="insertion"> self.raw('OPER {0} {1}'.format(nick, password))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l730" name="l730">730</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l731" name="l731">731</a></td><td><pre><span class="insertion">+</span><span class="insertion"> def part(self, chan, msg):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l732" name="l732">732</a></td><td><pre><span class="insertion">+</span><span class="insertion"> self.raw('PART {0} {1}'.format(chan, msg))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l733" name="l733">733</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l734" name="l734">734</a></td><td><pre><span class="insertion">+</span><span class="insertion"> def raw(self, msg):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l735" name="l735">735</a></td><td><pre><span class="insertion">+</span><span class="insertion"> self.sock.send(bytes(msg + '\r\n', 'utf-8'))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l736" name="l736">736</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l737" name="l737">737</a></td><td><pre><span class="insertion">+</span><span class="insertion"> def sajoin(self, nick, chan):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l738" name="l738">738</a></td><td><pre><span class="insertion">+</span><span class="insertion"> self.raw('SAJOIN {0} {1}'.format(nick, chan))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l739" name="l739">739</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l740" name="l740">740</a></td><td><pre><span class="insertion">+</span><span class="insertion"> def sendmsg(self, target, msg):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l741" name="l741">741</a></td><td><pre><span class="insertion">+</span><span class="insertion"> self.raw('PRIVMSG {0} :{1}'.format(target, msg))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l742" name="l742">742</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l743" name="l743">743</a></td><td><pre><span class="insertion">+</span><span class="insertion"> def who(self, flag, args):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l744" name="l744">744</a></td><td><pre><span class="insertion">+</span><span class="insertion"> self.raw('who +{0} {1}'.format(flag, args))</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l745" name="l745">745</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l746" name="l746">746</a></td><td><pre><span class="insertion">+</span><span class="insertion">IRCS = IRC()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l747" name="l747">747</a></td><td><pre><span class="bold">diff --git a/ircs/data/.gitignore b/ircs/data/.gitignore</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l748" name="l748">748</a></td><td><pre><span class="bold">new file mode 100644</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l749" name="l749">749</a></td><td><pre><span class="bold">index 0000000..b722e9e</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l750" name="l750">750</a></td><td><pre><span class="bold">--- /dev/null</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l751" name="l751">751</a></td><td><pre><span class="bold">+++ b/ircs/data/.gitignore</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l752" name="l752">752</a></td><td><pre><span class="hunk">@@ -0,0 +1 @@</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l753" name="l753">753</a></td><td><pre><span class="insertion">+</span><span class="insertion">!.gitignore</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l754" name="l754">754</a></td><td><pre><span class="bold">diff --git a/ircs/ircs.py b/ircs/ircs.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l755" name="l755">755</a></td><td><pre><span class="bold">new file mode 100644</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l756" name="l756">756</a></td><td><pre><span class="bold">index 0000000..0ec026f</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l757" name="l757">757</a></td><td><pre><span class="bold">--- /dev/null</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l758" name="l758">758</a></td><td><pre><span class="bold">+++ b/ircs/ircs.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l759" name="l759">759</a></td><td><pre><span class="hunk">@@ -0,0 +1,20 @@</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l760" name="l760">760</a></td><td><pre><span class="insertion">+</span><span class="insertion">#!/usr/bin/env python</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l761" name="l761">761</a></td><td><pre><span class="insertion">+</span><span class="insertion"># IRC Services (IRCS) - Developed by acidvegas in Python (https://acid.vegas/ircs)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l762" name="l762">762</a></td><td><pre><span class="insertion">+</span><span class="insertion"># ircs.py</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l763" name="l763">763</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l764" name="l764">764</a></td><td><pre><span class="insertion">+</span><span class="insertion">import os</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l765" name="l765">765</a></td><td><pre><span class="insertion">+</span><span class="insertion">import sys</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l766" name="l766">766</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l767" name="l767">767</a></td><td><pre><span class="insertion">+</span><span class="insertion">sys.dont_write_bytecode = True</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l768" name="l768">768</a></td><td><pre><span class="insertion">+</span><span class="insertion">os.chdir(sys.path[0] or '.')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l769" name="l769">769</a></td><td><pre><span class="insertion">+</span><span class="insertion">sys.path += ('core',)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l770" name="l770">770</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l771" name="l771">771</a></td><td><pre><span class="insertion">+</span><span class="insertion">import debug</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l772" name="l772">772</a></td><td><pre><span class="insertion">+</span><span class="insertion">import irc</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l773" name="l773">773</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l774" name="l774">774</a></td><td><pre><span class="insertion">+</span><span class="insertion">debug.info()</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l775" name="l775">775</a></td><td><pre><span class="insertion">+</span><span class="insertion">if not debug.check_version(3):</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l776" name="l776">776</a></td><td><pre><span class="insertion">+</span><span class="insertion"> debug.error_exit('IRCS requires Python 3!')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l777" name="l777">777</a></td><td><pre><span class="insertion">+</span><span class="insertion">if debug.check_privileges():</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l778" name="l778">778</a></td><td><pre><span class="insertion">+</span><span class="insertion"> debug.error_exit('Do not run IRCS as admin/root!')</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l779" name="l779">779</a></td><td><pre><span class="insertion">+</span><span class="insertion">irc.IRCS.connect()</span></pre></td></tr>
</table>
<div id="footer">site generated by <a href="https://github.com/acidvegas/stagit" target="_blank">stagit</a> on <a href="#">05/03/20</a></div>

File diff suppressed because it is too large Load Diff

View File

@ -1,14 +0,0 @@
<!doctype html>
<link rel="stylesheet" href="../style.css">
<title>random</title>
<h1><a href="../index.html" title="Home">&#8962;&#xFE0E;</a> random</h1>
<div style="padding-left:30px">
<h4>irc services bot</h4>
<h5>git clone <a href="https://github.com/acidvegas/random.git" title="random clone URL">https://github.com/acidvegas/random.git</a></h5>
</div>
<hr>
<table id="main" cellpadding="0" cellspacing="0">
<tr id="navigation"><th></th><th>Hash</th><th>Commit message</th><th>Author</th><th>Date</th><th align="right">Files</th><th align="right">+</th><th align="right">-</th></tr>
<tr class="item"><td></td><td><a href="commit/a2d36f8.html" title="View this commit">a2d36f8</a></td><td>Initial commit</td><td>acidvegas</td><td>2019-06-27 23:11</td><td align="right">8</td><td align="right">+715</td><td align="right">-0</td></tr>
</table>
<div id="footer">site generated by <a href="https://github.com/acidvegas/stagit" target="_blank">stagit</a> on <a href="#">05/03/20</a></div>

View File

@ -1,43 +0,0 @@
<!doctype html>
<link rel="stylesheet" href="../../style.css">
<title>resources :: 07579c6</title>
<h1><a href="../index.html" title="Back to Repository">&larr;&#xFE0E;</a> resources :: 07579c6</h1>
<hr>
<table id="main" cellpadding="0" cellspacing="0">
<tr class="item"><td class="linenumber"><a href="#l1" name="l1">1</a></td><td><pre><span class="commit">commit 07579c6469e2fa64368c20edf22af5111f3f5b98</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l2" name="l2">2</a></td><td><pre>Author: acidvegas &lt;acid.vegas@acid.vegas&gt;</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l3" name="l3">3</a></td><td><pre>Date: Sun Sep 22 23:24:11 2019 -0400</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l4" name="l4">4</a></td><td><pre></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l5" name="l5">5</a></td><td><pre> added roar to tools</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l6" name="l6">6</a></td><td><pre>---</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l7" name="l7">7</a></td><td><pre> README.md | 4 <span class="insertion">+++</span><span class="deletion">-</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l8" name="l8">8</a></td><td><pre> 1 file changed, 3 insertions(+), 1 deletion(-)</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l9" name="l9">9</a></td><td><pre></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l10" name="l10">10</a></td><td><pre><span class="bold">diff --git a/README.md b/README.md</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l11" name="l11">11</a></td><td><pre><span class="bold">index 624040d..92db6a4 100644</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l12" name="l12">12</a></td><td><pre><span class="bold">--- a/README.md</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l13" name="l13">13</a></td><td><pre><span class="bold">+++ b/README.md</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l14" name="l14">14</a></td><td><pre><span class="hunk">@@ -156,7 +156,7 @@</span> </span>UTF-8 is enabled by default on Weechat.</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l15" name="l15">15</a></td><td><pre> | Name | Description |</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l16" name="l16">16</a></td><td><pre> | ---- | ----------- |</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l17" name="l17">17</a></td><td><pre> | [a2m](https://git.trollforge.org/a2m/) | Convert ANSI art to IRC art |</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l18" name="l18">18</a></td><td><pre><span class="deletion">-| [p2u](https://git.trollforge.org/p2u/) | Convertt images to ANSI/IRC art |</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l19" name="l19">19</a></td><td><pre><span class="insertion">+</span><span class="insertion">| [p2u](https://git.trollforge.org/p2u/) | Convert images to ANSI/IRC art |</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l20" name="l20">20</a></td><td><pre> | [irc2html](https://ircart.github.io/irc2html/) | Convert IRC art to HTML |</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l21" name="l21">21</a></td><td><pre> | [img2term](https://github.com/wwared/img2term) | Output images in your terminal |</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l22" name="l22">22</a></td><td><pre> | [RuinIRC99](https://ruinirc99.firebaseapp.com/) | Convert images to IRC art from your browser |</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l23" name="l23">23</a></td><td><pre><span class="hunk">@@ -169,10 +169,12 @@</span> </span>UTF-8 is enabled by default on Weechat.</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l24" name="l24">24</a></td><td><pre> | [asciipumper](https://github.com/ircart/asciipumper) | MS-Paint style program to draw IRC art *(archived)* |</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l25" name="l25">25</a></td><td><pre> | [IRC-Paint](https://github.com/wwared/IRC-Paint) | MS-Paint style program to draw IRC art *(archived)* |</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l26" name="l26">26</a></td><td><pre> | [PabloDraw](http://picoe.ca/products/pablodraw/) | Old school ANSI art drawing tool |</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l27" name="l27">27</a></td><td><pre><span class="insertion">+</span><span class="insertion">| [Roar](https://github.com/lalbornoz/roar) | Editor &amp; Tools |</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l28" name="l28">28</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l29" name="l29">29</a></td><td><pre> ###### Web Based</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l30" name="l30">30</a></td><td><pre> | Name | Description |</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l31" name="l31">31</a></td><td><pre> | ---- | ----------- |</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l32" name="l32">32</a></td><td><pre><span class="insertion">+</span><span class="insertion">| [ASC_Paint](https://asc-paint.glitch.me/) | Draw ANSI art from your browser |</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l33" name="l33">33</a></td><td><pre> | [asciiblaster](https://asdf.us/asciiblaster/) | Draw IRC/ANSI art from your browser |</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l34" name="l34">34</a></td><td><pre> | [asciimaker](https://ircart.github.io/asciimaker/)| Draw IRC art from your browser |</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l35" name="l35">35</a></td><td><pre> | [ansiedit](https://github.com/andyherbert/ansiedit) | Network-enabled web based ANSi art application |</span></pre></td></tr>
</table>
<div id="footer">site generated by <a href="https://github.com/acidvegas/stagit" target="_blank">stagit</a> on <a href="#">05/03/20</a></div>

View File

@ -1,29 +0,0 @@
<!doctype html>
<link rel="stylesheet" href="../../style.css">
<title>resources :: 18356a7</title>
<h1><a href="../index.html" title="Back to Repository">&larr;&#xFE0E;</a> resources :: 18356a7</h1>
<hr>
<table id="main" cellpadding="0" cellspacing="0">
<tr class="item"><td class="linenumber"><a href="#l1" name="l1">1</a></td><td><pre><span class="commit">commit 18356a77393e82a76e9442db3798a883263c23ea</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l2" name="l2">2</a></td><td><pre>Author: acidvegas &lt;acid.vegas@acid.vegas&gt;</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l3" name="l3">3</a></td><td><pre>Date: Wed Mar 25 22:21:53 2020 -0400</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l4" name="l4">4</a></td><td><pre></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l5" name="l5">5</a></td><td><pre> added tool</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l6" name="l6">6</a></td><td><pre>---</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l7" name="l7">7</a></td><td><pre> README.md | 1 <span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l8" name="l8">8</a></td><td><pre> 1 file changed, 1 insertion(+)</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l9" name="l9">9</a></td><td><pre></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l10" name="l10">10</a></td><td><pre><span class="bold">diff --git a/README.md b/README.md</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l11" name="l11">11</a></td><td><pre><span class="bold">index 5558ffe..c4f0169 100644</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l12" name="l12">12</a></td><td><pre><span class="bold">--- a/README.md</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l13" name="l13">13</a></td><td><pre><span class="bold">+++ b/README.md</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l14" name="l14">14</a></td><td><pre><span class="hunk">@@ -121,6 +121,7 @@</span> </span>UTF-8 is enabled by default on Weechat.</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l15" name="l15">15</a></td><td><pre> | ---- | ----------- |</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l16" name="l16">16</a></td><td><pre> | [a2m](https://git.trollforge.org/a2m/) | Convert ANSI art to IRC art |</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l17" name="l17">17</a></td><td><pre> | [p2u](https://git.trollforge.org/p2u/) | Convert images to ANSI/IRC art |</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l18" name="l18">18</a></td><td><pre><span class="insertion">+</span><span class="insertion">| [irc2ansi](https://github.com/timb/irc2ansi) | Convert IRC art to ANSI art for your terminal |</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l19" name="l19">19</a></td><td><pre> | [irc2html](https://ircart.github.io/irc2html/) | Convert IRC art to HTML |</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l20" name="l20">20</a></td><td><pre> | [img2term](https://github.com/wwared/img2term) | Output images in your terminal |</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l21" name="l21">21</a></td><td><pre> | [RuinIRC99](https://ruinirc99.firebaseapp.com/) | Convert images to IRC art from your browser |</span></pre></td></tr>
</table>
<div id="footer">site generated by <a href="https://github.com/acidvegas/stagit" target="_blank">stagit</a> on <a href="#">05/03/20</a></div>

View File

@ -1,97 +0,0 @@
<!doctype html>
<link rel="stylesheet" href="../../style.css">
<title>resources :: 5779b45</title>
<h1><a href="../index.html" title="Back to Repository">&larr;&#xFE0E;</a> resources :: 5779b45</h1>
<hr>
<table id="main" cellpadding="0" cellspacing="0">
<tr class="item"><td class="linenumber"><a href="#l1" name="l1">1</a></td><td><pre><span class="commit">commit 5779b454599bb11140319e1f66fbdd7b0594157c</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l2" name="l2">2</a></td><td><pre>Author: acidvegas &lt;acid.vegas@acid.vegas&gt;</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l3" name="l3">3</a></td><td><pre>Date: Wed Mar 25 22:18:01 2020 -0400</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l4" name="l4">4</a></td><td><pre></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l5" name="l5">5</a></td><td><pre> updated</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l6" name="l6">6</a></td><td><pre>---</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l7" name="l7">7</a></td><td><pre> README.md | 48 <span class="insertion">++++++</span><span class="deletion">------------------------------------------</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l8" name="l8">8</a></td><td><pre> 1 file changed, 6 insertions(+), 42 deletions(-)</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l9" name="l9">9</a></td><td><pre></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l10" name="l10">10</a></td><td><pre><span class="bold">diff --git a/README.md b/README.md</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l11" name="l11">11</a></td><td><pre><span class="bold">index 92db6a4..5558ffe 100644</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l12" name="l12">12</a></td><td><pre><span class="bold">--- a/README.md</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l13" name="l13">13</a></td><td><pre><span class="bold">+++ b/README.md</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l14" name="l14">14</a></td><td><pre><span class="hunk">@@ -38,8 +38,6 @@</span> </span>export LANGUAGE=en_US.UTF-8</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l15" name="l15">15</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l16" name="l16">16</a></td><td><pre> Now just run `source ~/.bashrc` to make the changes take affect.</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l17" name="l17">17</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l18" name="l18">18</a></td><td><pre><span class="deletion">-If you are using [GNU screen](https://www.gnu.org/software/screen/), make sure that `defutf8 on` is in your ~/.screenrc file.</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l19" name="l19">19</a></td><td><pre><span class="deletion">-</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l20" name="l20">20</a></td><td><pre> #### Client</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l21" name="l21">21</a></td><td><pre> &lt;details&gt;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l22" name="l22">22</a></td><td><pre> &lt;summary&gt;IRSSI&lt;/summary&gt;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l23" name="l23">23</a></td><td><pre><span class="hunk">@@ -67,45 +65,6 @@</span> </span>If you are using [GNU screen](https://www.gnu.org/software/screen/), make sure t</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l24" name="l24">24</a></td><td><pre> ```</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l25" name="l25">25</a></td><td><pre> &lt;/details&gt;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l26" name="l26">26</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l27" name="l27">27</a></td><td><pre><span class="deletion">-&lt;details&gt;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l28" name="l28">28</a></td><td><pre><span class="deletion">- &lt;summary&gt;HexChat/xChat&lt;/summary&gt;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l29" name="l29">29</a></td><td><pre><span class="deletion">- </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l30" name="l30">30</a></td><td><pre><span class="deletion">-##### UTF-8</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l31" name="l31">31</a></td><td><pre><span class="deletion">-Edit your network and change &quot;Character set&quot; to &quot;UTF-8 (Unicode)&quot; for all of your networks.</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l32" name="l32">32</a></td><td><pre><span class="deletion">-</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l33" name="l33">33</a></td><td><pre><span class="deletion">-##### Font</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l34" name="l34">34</a></td><td><pre><span class="deletion">-Navigate to Settings-&gt;Preferences-&gt;Interface-&gt;Text box and set the font to monospace normal size 9.</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l35" name="l35">35</a></td><td><pre><span class="deletion">-</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l36" name="l36">36</a></td><td><pre><span class="deletion">-##### Colors</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l37" name="l37">37</a></td><td><pre><span class="deletion">-Locate your colors.conf file in either the AppData (Windows) or ~/.xchat2 (Linux) directory and replace the first 16 lines with the follow:</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l38" name="l38">38</a></td><td><pre><span class="deletion">-```</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l39" name="l39">39</a></td><td><pre><span class="deletion">-color_0 = ffff ffff ffff</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l40" name="l40">40</a></td><td><pre><span class="deletion">-color_1 = 0000 0000 0000</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l41" name="l41">41</a></td><td><pre><span class="deletion">-color_2 = 0000 0000 7f7f</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l42" name="l42">42</a></td><td><pre><span class="deletion">-color_3 = 0000 9393 0000</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l43" name="l43">43</a></td><td><pre><span class="deletion">-color_4 = ffff 0000 0000</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l44" name="l44">44</a></td><td><pre><span class="deletion">-color_5 = 7f7f 0000 0000</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l45" name="l45">45</a></td><td><pre><span class="deletion">-color_6 = 9c9c 0000 9c9c</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l46" name="l46">46</a></td><td><pre><span class="deletion">-color_7 = fcfc 7f7f 0000</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l47" name="l47">47</a></td><td><pre><span class="deletion">-color_8 = ffff ffff 0000</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l48" name="l48">48</a></td><td><pre><span class="deletion">-color_9 = 0101 fcfc 0000</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l49" name="l49">49</a></td><td><pre><span class="deletion">-color_10 = 0000 9393 9393</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l50" name="l50">50</a></td><td><pre><span class="deletion">-color_11 = 0101 ffff ffff</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l51" name="l51">51</a></td><td><pre><span class="deletion">-color_12 = 0000 0000 fcfc</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l52" name="l52">52</a></td><td><pre><span class="deletion">-color_13 = ffff 0000 ffff</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l53" name="l53">53</a></td><td><pre><span class="deletion">-color_14 = 7f7f 7f7f 7f7f</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l54" name="l54">54</a></td><td><pre><span class="deletion">-color_15 = d2d2 d2d2 d2d2</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l55" name="l55">55</a></td><td><pre><span class="deletion">-```</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l56" name="l56">56</a></td><td><pre><span class="deletion">-</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l57" name="l57">57</a></td><td><pre><span class="deletion">-##### Flooding</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l58" name="l58">58</a></td><td><pre><span class="deletion">-```</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l59" name="l59">59</a></td><td><pre><span class="deletion">-/set net_throttle 0</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l60" name="l60">60</a></td><td><pre><span class="deletion">-```</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l61" name="l61">61</a></td><td><pre><span class="deletion">-</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l62" name="l62">62</a></td><td><pre><span class="deletion">-#####</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l63" name="l63">63</a></td><td><pre><span class="deletion">-</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l64" name="l64">64</a></td><td><pre><span class="deletion">-&lt;/details&gt;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l65" name="l65">65</a></td><td><pre><span class="deletion">-</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l66" name="l66">66</a></td><td><pre> &lt;details&gt;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l67" name="l67">67</a></td><td><pre> &lt;summary&gt;WeeChat&lt;/summary&gt;</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l68" name="l68">68</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l69" name="l69">69</a></td><td><pre><span class="hunk">@@ -133,6 +92,11 @@</span> </span>UTF-8 is enabled by default on Weechat.</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l70" name="l70">70</a></td><td><pre> ### Resources</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l71" name="l71">71</a></td><td><pre> #### Art Packs</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l72" name="l72">72</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l73" name="l73">73</a></td><td><pre><span class="insertion">+</span><span class="insertion">###### ASCII Fart Packs</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l74" name="l74">74</a></td><td><pre><span class="insertion">+</span><span class="insertion">| Pack | Description |</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l75" name="l75">75</a></td><td><pre><span class="insertion">+</span><span class="insertion">| ---- | ----------- |</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l76" name="l76">76</a></td><td><pre><span class="insertion">+</span><span class="insertion">| [ASCII Art Farts](http://www.asciiartfarts.com) | Big collection of shitty ASCII only art |</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l77" name="l77">77</a></td><td><pre><span class="insertion">+</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l78" name="l78">78</a></td><td><pre> ###### ANSI Art Packs</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l79" name="l79">79</a></td><td><pre> | Pack | Description |</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l80" name="l80">80</a></td><td><pre> | ---- | ----------- |</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l81" name="l81">81</a></td><td><pre><span class="hunk">@@ -145,7 +109,7 @@</span> </span>UTF-8 is enabled by default on Weechat.</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l82" name="l82">82</a></td><td><pre> | Pack | Description |</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l83" name="l83">83</a></td><td><pre> | ---- | ----------- |</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l84" name="l84">84</a></td><td><pre> | [IRCArt](https://github.com/ircart/ircart) | Massive collection of organized IRC art |</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l85" name="l85">85</a></td><td><pre><span class="deletion">-| [MiRCART](https://mircart.org/?page_id=1882) | Art pack made by the [MiRCART](https://mircart.org/) crew |</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l86" name="l86">86</a></td><td><pre><span class="insertion">+</span><span class="insertion">| [MiRCART](https://mircart.org/) | Art pack made by the [MiRCART](https://mircart.org/) crew |</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l87" name="l87">87</a></td><td><pre> | [PP4L](http://wepump.in/ascii/) | Art pack made by the [PP4L](http://wepump.in/) crew |</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l88" name="l88">88</a></td><td><pre> | [TrollASCII](https://github.com/jakkm3n/trollascii) | Giant mess of unorganized art |</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l89" name="l89">89</a></td><td><pre> | [Volatile](https://git.volatile.bz/cgit/wowaname/ascii-art/) | Art pack containing other packs &amp; some OC by [volatile](https://volatile.bz/) |</span></pre></td></tr>
</table>
<div id="footer">site generated by <a href="https://github.com/acidvegas/stagit" target="_blank">stagit</a> on <a href="#">05/03/20</a></div>

View File

@ -1,31 +0,0 @@
<!doctype html>
<link rel="stylesheet" href="../../style.css">
<title>resources :: 6eb875a</title>
<h1><a href="../index.html" title="Back to Repository">&larr;&#xFE0E;</a> resources :: 6eb875a</h1>
<hr>
<table id="main" cellpadding="0" cellspacing="0">
<tr class="item"><td class="linenumber"><a href="#l1" name="l1">1</a></td><td><pre><span class="commit">commit 6eb875ae7e292ef97e32e265c425712063c376db</span><span class="commit"> (</span><span class="reference">HEAD -&gt; </span><span class="branch">master</span><span class="commit">, </span><span class="remote">origin/master</span><span class="commit">)</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l2" name="l2">2</a></td><td><pre>Author: acidvegas &lt;acid.vegas@acid.vegas&gt;</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l3" name="l3">3</a></td><td><pre>Date: Tue Mar 31 17:28:33 2020 -0400</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l4" name="l4">4</a></td><td><pre></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l5" name="l5">5</a></td><td><pre> added fsymbols draw</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l6" name="l6">6</a></td><td><pre>---</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l7" name="l7">7</a></td><td><pre> README.md | 3 <span class="insertion">++</span><span class="deletion">-</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l8" name="l8">8</a></td><td><pre> 1 file changed, 2 insertions(+), 1 deletion(-)</pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l9" name="l9">9</a></td><td><pre></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l10" name="l10">10</a></td><td><pre><span class="bold">diff --git a/README.md b/README.md</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l11" name="l11">11</a></td><td><pre><span class="bold">index fc40894..ea895fe 100644</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l12" name="l12">12</a></td><td><pre><span class="bold">--- a/README.md</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l13" name="l13">13</a></td><td><pre><span class="bold">+++ b/README.md</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l14" name="l14">14</a></td><td><pre><span class="hunk">@@ -144,7 +144,8 @@</span> </span>UTF-8 is enabled by default on Weechat.</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l15" name="l15">15</a></td><td><pre> | [asciiblaster](https://asdf.us/asciiblaster/) | Draw IRC/ANSI art from your browser |</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l16" name="l16">16</a></td><td><pre> | [asciimaker](https://ircart.github.io/asciimaker/)| Draw IRC art from your browser |</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l17" name="l17">17</a></td><td><pre> | [ansiedit](https://github.com/andyherbert/ansiedit) | Network-enabled web based ANSi art application |</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l18" name="l18">18</a></td><td><pre><span class="deletion">-| [bashfill](https://max.io/bash.html)| Draw art for your terminal |</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l19" name="l19">19</a></td><td><pre><span class="insertion">+</span><span class="insertion">| [bashfill](https://max.io/bash.html) | Draw art for your terminal |</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l20" name="l20">20</a></td><td><pre><span class="insertion">+</span><span class="insertion">| [FSymbols Draw](https://fsymbols.com/draw/) | Draw unicode block art in your browser |</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l21" name="l21">21</a></td><td><pre> </span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l22" name="l22">22</a></td><td><pre> #### Other</span></pre></td></tr>
<tr class="item"><td class="linenumber"><a href="#l23" name="l23">23</a></td><td><pre> | Name | Description |</span></pre></td></tr>
</table>
<div id="footer">site generated by <a href="https://github.com/acidvegas/stagit" target="_blank">stagit</a> on <a href="#">05/03/20</a></div>

Some files were not shown because too many files have changed in this diff Show More