<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Telegram Shell Bot &#8211; 天地一沙鸥</title>
	<atom:link href="https://haoluobo.com/tag/telegram-shell-bot/feed/" rel="self" type="application/rss+xml" />
	<link>https://haoluobo.com</link>
	<description>to be continue....</description>
	<lastBuildDate>Thu, 05 Mar 2020 14:11:15 +0000</lastBuildDate>
	<language>zh-Hans</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.8.2</generator>
	<item>
		<title>Go语言版 [Telegram Shell Bot]及Go的初体验</title>
		<link>https://haoluobo.com/2020/03/telegram-shell-bot-go/</link>
		
		<dc:creator><![CDATA[vicalloy]]></dc:creator>
		<pubDate>Thu, 05 Mar 2020 14:11:15 +0000</pubDate>
				<category><![CDATA[vicalloy的庄家]]></category>
		<category><![CDATA[Telegram Shell Bot]]></category>
		<guid isPermaLink="false">/?p=11792</guid>

					<description><![CDATA[项目地址(Go)：&#160;https://github.com/vicalloy/telegram-she [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>项目地址(Go)：&nbsp;<a href="https://github.com/vicalloy/telegram-shell-bot-go">https://github.com/vicalloy/telegram-shell-bot-go</a></p>


<p>由于对Go不熟悉，因此<a href="https://github.com/vicalloy/telegram-shell-bot">之前版本的 Telegram Shell Bot</a> 采用Python实现。在Python版发布后就开始尝试使用Go重新实现，毕竟之所以要做这东西也是想借个小程序体验一下Go语言。</p>


<h2 class="wp-block-heading">我对Go语言的一些看法</h2>


<p>随着微服务的兴起，相较以往服务的粒度可以拆分的更细。系统复杂度更多的转变为微服务构架设计的复杂度。服务拆分后每个具体的服务的复杂度将降低，系统对程序语言本身的构架能力的依赖会减少很多。同时在服务拆分后，各个服务组件可以灵活的采用适合的技术来完成工作。</p>


<p>Go语言本身极度精简（简陋），如果要象Java一样搭建一个单体的巨型项目会存在一定困难。Go的高性能，异步，加之足够简单，使Go在一些对性能要求较高，但业务复杂度相对较低的场合会非常适合。</p>


<p>Go可能永远不能变的同Java一样流行,但Go已经足够成功，值得去体验。</p>


<h2 class="wp-block-heading">Go开发的相关资源</h2>


<ul class="wp-block-list"><li><a rel="noreferrer noopener" href="https://tour.golang.org/" target="_blank"> Tour of Go</a> 官方的简明教程，可以快速浏览一遍了解Go的主要语言特性。代码编写过程中也可以作为参考手册。</li><li><a rel="noreferrer noopener" href="https://golang.org/pkg/" target="_blank">Go标准类库</a> Go的标准类库。</li><li><a href="https://github.com/fatih/vim-go">Vim Go</a> Vim的Go语言插件，支持语法检查、自动格式化、自动补全等特性。注：挺想试试GoLand，不过GoLand只有30天的试用期。</li><li>在国内Go的官网访问不是特别方便，可以使用国内翻译的中文教程。<a rel="noreferrer noopener" href="https://studygolang.com/pkgdoc" target="_blank">Go标准类库（中文版）</a> 、 <a rel="noreferrer noopener" href="https://tour.golang.org/" target="_blank"> </a><a href="http://tour.studygolang.com/" target="_blank" rel="noreferrer noopener" aria-label="Tour of Go（中文版） (opens in a new tab)">Tour of Go（中文版）</a></li></ul>


<h2 class="wp-block-heading">开发过程中的实际体验</h2>


<p><a href="https://github.com/vicalloy/telegram-shell-bot-go">Telegram Shell Bot Go</a> 是我第一次使用Go写东西，由于只是一个小项目体验还不算特别深。Go语言中最精华的并发相关内容（goroutine / channel / select）并没有用到。</p>


<p>总的来说Go有着还不错的开发体验，但另一方便由于习惯了Python，Go又有不少让我用的不是特别舒服的地方。有人说Go是better C，我个人还是比较认可这个观点，相比其他语言Go很像C语言。</p>


<h3 class="wp-block-heading">优点</h3>


<ul class="wp-block-list"><li>Python使用缩进语法保证代码的整洁。Go则直接内置代码格式化工具来强制保证代码格式的一致性。</li><li>之前听说Go的包管理很差劲。这次使用已经有go mod的支持，用下来体验还不错。</li><li>GC、性能好、编译速度快等。</li></ul>


<h3 class="wp-block-heading">不太习惯的地方（不一定是缺点）</h3>


<ul class="wp-block-list"><li>基础类型同Python相比差太多。Slice和Python里的List相对应，但功能方面差非常多。其中一个简单的删除对象的功能都需要自己实现。不清楚这是否是出于性能的考虑，需要让用户明确清楚相关操作的时间复杂度。但使用起来真的非常不方便。用了其他开发语言后，更让人怀念Python的列表推导。</li><li>Go在语法层面比较简单，相对较新的概念也就异步相关的内容（这部分Go设计的不错，实际上也并不难理解），真正难的还是适应Go的编程风格。Go的Telegram类库API风格同Python版有较大差别。我想API的风格差异更多的还是同语言本身风格差异相关的。要完全适应Go的编程风格可能需要先找几个代码写的比较好的项目先学习一下。</li></ul>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>[Telegram Shell Bot]远程执行 Shell 命令的 Telegram 机器人</title>
		<link>https://haoluobo.com/2020/03/telegram-shell-bot/</link>
		
		<dc:creator><![CDATA[vicalloy]]></dc:creator>
		<pubDate>Sun, 01 Mar 2020 11:20:20 +0000</pubDate>
				<category><![CDATA[vicalloy的庄家]]></category>
		<category><![CDATA[telegram]]></category>
		<category><![CDATA[Telegram Shell Bot]]></category>
		<guid isPermaLink="false">/?p=11787</guid>

					<description><![CDATA[项目地址：&#160;https://github.com/vicalloy/telegram-shell-b [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>项目地址：&nbsp;<a href="https://github.com/vicalloy/telegram-shell-bot">https://github.com/vicalloy/telegram-shell-bot</a></p>


<p>很早之前就打算做这么一个东西，后来因为要调用的脚本是 Python 写的，于是直接在 Bot 里调用 Python 代码。 近期把这个想法重新实现了。</p>


<p>网上也有类似的项目，其中一些比较简单，甚至都没有对用户做校验，这样只要有人可以连上你的机器人就可以控制你的机器。类似的机器人里功能最强的是<a href="https://github.com/botgram/shell-bot">shell-bot</a>。&#8221;shell-bot&#8221;模拟了一个 tty，实现较复杂，没有仔细研究。</p>


<p><a href="https://github.com/vicalloy/telegram-shell-bot">Telegram Shell Bot</a>目前提供的功能有：</p>


<ol class="wp-block-list"><li>鉴权，只有在许可列表里的用户才能对机器人发号指令。</li><li>支持命令的黑白名单。注：为避免使用 <code>;</code> 跳过命令检查，类似的字符也应当加到字符串黑名单中。</li><li>Shell 命令的执行，如 ls、cat、ps 等。</li><li>长时间执行命令的管理。如执行 wget 操作，只返回最开始几条输出（防止一直刷屏）。之后可以通过<code>/tasks</code>命令查看有哪些命令还在执行中，并可以通过 /kill pid 的方式强制结束命令。</li><li>支持 sudo。注：sudo 通过 <code>echo password | su -S</code> 的方式实现，需要自行评估风险。</li><li>自定义脚本放在 ./scripts 目录，通过 /script 命令可以快速访问这些脚本并执行。</li></ol>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
