diff options
Diffstat (limited to 'ATRI/plugins/plugin_chat')
-rw-r--r-- | ATRI/plugins/plugin_chat/__init__.py | 532 | ||||
-rw-r--r-- | ATRI/plugins/plugin_chat/drifting_bottle.json | 1 | ||||
-rw-r--r-- | ATRI/plugins/plugin_chat/key_repo.json | 1 | ||||
-rw-r--r-- | ATRI/plugins/plugin_chat/laugh.txt | 132 |
4 files changed, 0 insertions, 666 deletions
diff --git a/ATRI/plugins/plugin_chat/__init__.py b/ATRI/plugins/plugin_chat/__init__.py deleted file mode 100644 index 5a323c3..0000000 --- a/ATRI/plugins/plugin_chat/__init__.py +++ /dev/null @@ -1,532 +0,0 @@ -#!/usr/bin/env python3 -# -*- encoding: utf-8 -*- -''' -@File : __init__.py -@Time : 2020/11/07 14:24:57 -@Author : Kyomotoi -@Contact : [email protected] -@Github : https://github.com/Kyomotoi -@License : Copyright © 2018-2020 Kyomotoi, All Rights Reserved. -''' -__author__ = 'kyomotoi' - -import os -import re -import json -import time -from pathlib import Path -from random import choice -from random import randint -from requests import exceptions -from datetime import timedelta, datetime -from apscheduler.triggers.date import DateTrigger - -from nonebot.log import logger -from nonebot.rule import to_me -from nonebot.typing import Bot, Event -from nonebot.permission import SUPERUSER -from nonebot_plugin_apscheduler import scheduler -from nonebot.plugin import on_command, on_message, on_notice, on_request, on_regex - -from ATRI.utils.utils_times import countX -from ATRI.utils.utils_yml import load_yaml -from ATRI.utils.utils_ban import ban, unban -from ATRI.utils.utils_error import errorRepo -from ATRI.utils.utils_textcheck import Textcheck -from ATRI.utils.utils_history import saveMessage -from ATRI.utils.utils_request import request_api_text -from ATRI.utils.utils_rule import check_banlist, check_switch - -CONFIG_PATH = Path('.') / 'config.yml' -config = load_yaml(CONFIG_PATH)['bot'] - -master = config['superusers'] - -# 收集 bot 所在群的聊天记录 -MessageSave = on_message() - - -async def _(bot: Bot, event: Event, state: dict) -> None: - user = str(event.user_id) - group = str(event.group_id) - message = str(event.message) - message_id = str(event.id) - - if group == "None": - saveMessage(message_id, message, user) - else: - saveMessage(message_id, message, user, group) - - logger.opt(colors=True).info( - f"GROUP[<yellow>{group}</yellow>]: USER(<blue>{user}</blue>) > Message: (<green>{message}</green>) Saved successfully" - ) - - -# ====================================================================== -# · 关键词回复,使用 json 存储,包含人设固定回复,以及咱添加的亿小部分 -# · 添加关键词位于此处,审核位于 plugin_admin 文件下。 -# Usage: -# - /learnrepo [key] [repo] [proba] -# For SUPERUSER: -# - 关键词审核 -# - /learnrepo del [key] -# Tips: -# - 普通用户添加需等维护者审核 -# - 参数类型: -# * key: 关键词(for匹配) -# * repo: 回复 -# * proba: 机率(x>=1)(int) -# ====================================================================== -KEY_PATH = Path('.') / 'ATRI' / 'plugins' / 'plugin_chat' / 'key_repo.json' -KEY_WAITING_PATH = Path( - '.') / 'ATRI' / 'plugins' / 'plugin_admin' / 'key_repo_waiting.json' -with open(KEY_PATH, 'r', encoding='utf-8') as f: - data = json.load(f) -with open(KEY_WAITING_PATH, 'r', encoding='utf-8') as f: - data_rev = json.load(f) - -keyRepo = on_message(rule=check_banlist()) - - -async def _(bot: Bot, event: Event, state: dict) -> None: - for key in data.keys(): - proba = randint(1, data[key][1]) - if proba == 1: - await keyRepo.finish(data.get(key, None)) - - -keyRepoADD = on_command('/learnrepo', rule=check_banlist()) - - -async def _(bot: Bot, event: Event, state: dict) -> None: - user = event.user_id - group = event.group_id - msg = str(event.message).strip(' ') - - if not msg: - await keyRepoADD.finish("请查看文档获取帮助(") - - if not msg[0] or not msg[1] or not msg[2]: - await keyRepoADD.finish("ごんめなさい...请检查格式嗷...") - - if not re.findall(r"/^\d{1,}$/", msg[2]): - await keyRepoADD.finish("非法字符!咱不接受除int以外的类型!!") - - if msg[0] in data or msg[0] in data_rev: - await keyRepoADD.finish("相关关键词咱已经学习过了呢...") - - msg0 = f"Key: {msg[0]}\n" - msg0 += f"Repo: {msg[1]}\n" - msg0 += f"Proba: {msg[2]}\n" - - if user in master: - data[msg[0]] = [ - msg[1], msg[2], user, group, - time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time())) - ] - - with open(KEY_PATH, 'w') as f: - f.write(json.dumps(data)) - msg0 = "学習しました~!" - - else: - data_rev[msg[0]] = [ - msg[1], msg[2], user, group, - time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time())) - ] - - with open(KEY_WAITING_PATH, 'w') as f: - f.write(json.dumps(data_rev)) - msg0 += "请等待咱主人审核嗷~" - - await keyRepoADD.finish(msg0) - - -# ========================[结束关键词回复部分]========================== - -# Call bot -callMe = on_message(rule=check_banlist()) - - -async def _(bot: Bot, event: Event, state: dict) -> None: - msg = str(event.raw_event['raw_message']).strip() - - if "萝卜子" in msg: - rep = choice(["萝卜子是对咱的蔑称!!", "差不多得了😅", "这好吗?这不好!", "吃咱一发火箭拳——!"]) - await callMe.finish("萝卜子是对咱的蔑称!!") - - elif msg in config['nickname']: - if event.user_id in master: - rep = choice(["w", "~~", ""]) - await callMe.finish("叫咱有啥事吗w") - - -# 戳 一 戳 -pokehah = on_command("戳一戳", rule=to_me() & check_banlist()) - - -async def _poke(bot: Bot, event: Event, state: dict) -> None: - msg = choice([ - "你再戳!", "?再戳试试?", "别戳了别戳了再戳就坏了555", "我爪巴爪巴,球球别再戳了", "你戳你🐎呢?!", - "那...那里...那里不能戳...绝对...", "(。´・ω・)ん?", "有事恁叫我,别天天一个劲戳戳戳!", "欸很烦欸!你戳🔨呢", - "?", "差不多得了😅", "欺负咱这好吗?这不好", "我希望你耗子尾汁" - ]) - - await pokehah.finish(msg) - - -async def poke_(bot: Bot, event: Event, state: dict) -> bool: - try: - return (event.raw_event['sub_type'] == 'poke' - and event.raw_event['target_id'] == int(event.self_id) - and event.raw_event['notice_type'] == 'notify') - except: - return False - - -poke = on_notice(rule=check_banlist() & poke_, block=True) -poke.handle()(_poke) - -# 处理 进 / 退 群事件 -groupEvent = on_notice() - - -async def _(bot: Bot, event: Event, state: dict) -> None: - if event.raw_event['notice_type'] == 'group_increase': - if event.user_id != int(event.self_id): - await groupEvent.finish( - f'好欸!事新人[CQ:at,qq={event.raw_event["user_id"]}]') - elif event.user_id == int(event.self_id): - await groupEvent.finish("在下 ATRI,你可以叫我 亚托莉 或 アトリ !~w") - - if event.raw_event['notice_type'] == 'group_decrease': - if event.user_id != int(event.self_id): - await groupEvent.finish(f'[{event.user_id}] 离开了我们...') - elif event.user_id == int(event.self_id): - for sup in master: - await bot.send_private_msg( - user_id=sup, - message=f'呜呜呜,主人,咱被群[{event.group_id}]扔出来了...') - - -# 处理 加好友 / 拉群 事件 -selfEvent = on_request(rule=check_banlist()) -FRIEND_ADD = 0 -GROUP_INVITE = 0 - - -async def _(bot: Bot, event: Event, state: dict) -> None: - print(event.raw_event) - flag = event.raw_event['flag'] - req_type = event.raw_event['request_type'] - - if req_type == 'friend': - for sup in master: - msg0 = '主人,收到一条好友请求:\n' - msg0 += f"请求人:{event.raw_event['user_id']}\n" - msg0 += f"申请信息:{event.raw_event['comment']}\n" - - if FRIEND_ADD == 0: - msg0 += '由于主人未允许咱添加好友,已回拒' - await bot.set_friend_add_request(flag=flag, approve=False) - else: - msg0 += '由于主人已同意咱添加好友,已通过' - await bot.set_friend_add_request(flag=flag, approve=True) - - await bot.send_private_msg(user_id=sup, message=msg0) - - elif req_type == 'group' and event.raw_event['sub_type'] == 'invite': - for sup in master: - msg0 = '主人,收到一条群邀请:\n' - msg0 += f"邀请人:{event.raw_event['user_id']}\n" - msg0 += f"目标群:{event.raw_event['group_id']}\n" - - if GROUP_INVITE == 0: - msg0 += '由于主人未允许咱添加群聊,已回拒' - await bot.set_group_add_request( - flag=flag, - sub_type=event.raw_event['sub_type'], - approve=False, - reason=f'ねね..ごんめね...\n主人不允许咱添加其他群聊...\n如需寻求帮助,请联系维护者:{sup}' - ) - - else: - msg0 += '由于主人已允许咱添加群聊,已同意' - await bot.set_group_add_request( - flag=flag, - sub_type=event.raw_event['sub_type'], - approve=True) - - await bot.send_private_msg(user_id=sup, message=msg0) - - -# 控制 加好友 / 拉群 认证,默认关闭 -# Tips: -# - For SUPERUSERS -# - Normal all false -# Usage: -# - selfevent group-true/false -# - selfevent friend-true/false -controlSelfEvent = on_command('/selfevent', permission=SUPERUSER) - - -async def _(bot: Bot, event: Event, state: dict) -> None: - args = str(event.message).strip() - global FRIEND_ADD, GROUP_INVITE - - if not args: - await controlSelfEvent.finish("请查看文档获取帮助(") - - if 'group-' in args: - if 'true' in args: - GROUP_INVITE = 1 - elif 'friend-' in args: - if 'true' in args: - FRIEND_ADD = 1 - else: - await controlSelfEvent.finish("请查看文档获取帮助(") - - await controlSelfEvent.finish('DONE!') - - -# 口臭一下 -fxxkMe = on_command('口臭一下', - aliases={'口臭', '骂我'}, - rule=to_me() & check_banlist()) -list_M = [] - - [email protected]() # type: ignore -async def _(bot: Bot, event: Event, state: dict) -> None: - user = str(event.user_id) - global list_M - - if countX(list_M, user) == 3: - await bot.send(event, - "不是??你这么想被咱骂的嘛??被咱骂就这么舒服的吗?!该......你该不会是.....M吧!") - - elif countX(list_M, user) == 6: - await bot.send(event, "给我适可而止阿!?") - list_M = list(set(list_M)) - - else: - list_M.append(user) - URL = "https://nmsl.shadiao.app/api.php?level=min&lang=zh_cn" - msg = "" - - try: - msg = request_api_text(URL) - except exceptions: - await fxxkMe.finish(errorRepo("请求错误")) - - await fxxkMe.finish(msg) - - -# Hitokoto -hitokoto = on_command('一言', - aliases={'抑郁一下', '网抑云'}, - rule=to_me() & check_banlist()) -list_Y = [] - - -async def _(bot: Bot, event: Event, state: dict) -> None: - user = str(event.user_id) - global list_Y - - if countX(list_Y, user) == 3: - await bot.send(event, "额......需要咱安慰一下嘛~?") - - elif countX(list_Y, user) == 6: - await bot.send(event, "如果心里感到难受就赶快去睡觉奥!别再憋自己了!") - list_Y = list(set(list_Y)) - - else: - list_Y.append(user) - URL = "https://api.imjad.cn/hitokoto/?cat=a&charset=utf-8&length=50&encode=json&fun=sync&source=" - info = {} - - try: - info = json.loads(request_api_text(URL)) - except: - await hitokoto.finish(errorRepo("请求错误")) - - await hitokoto.finish(info["hitokoto"]) - - -laughFunny = on_command('来句笑话', rule=check_banlist()) - - [email protected]() #type: ignore -async def _(bot: Bot, event: Event, state: dict) -> None: - name = event.sender['nickname'] - result = [] - - LAUGH_FILE = Path('.') / 'ATRI' / 'plugins' / 'plugin_chat' / 'laugh.txt' - - with open(LAUGH_FILE, 'r', encoding='utf-8') as f: - for line in f: - result.append(line.strip('\n')) - - resu = choice(result) - await laughFunny.finish(resu.replace("%name", name)) - - -# 扔漂流瓶 -plugin_name = 'drifting-bottle' -DRIFTING_BOTTLE_PATH = Path( - '.') / 'ATRI' / 'plugins' / 'plugin_chat' / 'drifting_bottle.json' -driftingBottle = on_command('扔漂流瓶', - rule=to_me() & check_banlist() - & check_switch(plugin_name, True)) - - -async def _(bot: Bot, event: Event, state: dict) -> None: - args = str(event.message).strip() - - if args: - state['args'] = args - - [email protected]('args', prompt='请告诉咱瓶中内容~!') -async def _(bot: Bot, event: Event, state: dict) -> None: - args = state['args'] - user = event.user_id - group = event.group_id - - if not DRIFTING_BOTTLE_PATH.is_file(): - with open(DRIFTING_BOTTLE_PATH, 'w') as f: - f.write(json.dumps({})) - - with open(DRIFTING_BOTTLE_PATH, 'r') as f: - data = json.load(f) - - num = len(data) - data[num + 1] = [user, group, args] - - with open(DRIFTING_BOTTLE_PATH, 'w') as f: - f.write(json.dumps(data)) - - await driftingBottle.finish('漂流瓶已飘向远方...') - - -# 捡漂流瓶 -getDriftingBottle = on_command('捞漂流瓶', - rule=to_me() & check_banlist() - & check_switch(plugin_name, True)) - - -async def _(bot: Bot, event: Event, state: dict) -> None: - if not DRIFTING_BOTTLE_PATH.is_file(): - with open(DRIFTING_BOTTLE_PATH, 'w') as f: - f.write(json.dumps({})) - - with open(DRIFTING_BOTTLE_PATH, 'r') as f: - data = json.load(f) - - num = len(data) - if not num: - await getDriftingBottle.finish('暂无漂流瓶可供打捞呢~(') - - num = randint(1, num) - bottle = data[str(num)] - msg = bottle[2] - - msg0 = f'[CQ:at,qq={event.user_id}]\n' - msg0 += f'漂流瓶[{num}]内容如下:\n' - msg0 += msg - - await getDriftingBottle.finish(msg0) - - -# 清除漂流瓶 -# *For SUPERUSERS -# - delall -# - del [num] -# eg: 清除漂流瓶 del 123 -delDriftingBottle = on_command('清除漂流瓶', - rule=check_banlist(), - permission=SUPERUSER) - - -async def _(bot: Bot, event: Event, state: dict) -> None: - args = str(event.message).strip() - - if not args: - - await delDriftingBottle.finish("请查看文档获取帮助(") - - if not DRIFTING_BOTTLE_PATH.is_file(): - with open(DRIFTING_BOTTLE_PATH, 'w') as f: - f.write(json.dumps({})) - - await delDriftingBottle.finish('清除了个寂寞...') - - with open(DRIFTING_BOTTLE_PATH, 'r') as f: - data = json.load(f) - - if args[0] == 'delall': - os.remove(os.path.abspath(DRIFTING_BOTTLE_PATH)) - - elif args[0] == 'del': - try: - del data[args[1]] - except: - await delDriftingBottle.finish(errorRepo('清除失败了...')) - - with open(DRIFTING_BOTTLE_PATH, 'w') as f: - f.write(json.dumps(data)) - f.close() - - result = args[1] if args[0] == 'del' else "ALL" - await delDriftingBottle.finish( - f'完成啦!成功清除漂流瓶[{result}],目前还剩余[{len(data)}]个~') - - -# 舆情监听 -publicOpinion = on_message(rule=check_banlist()) -ban_temp_list = [] - - -async def _(bot: Bot, event: Event, state: dict) -> None: - global ban_temp_list - msg = str(event.message) - user = str(event.user_id) - - # 检查是否满足条件 - if countX(ban_temp_list, - user) == Textcheck().get_times(str(Textcheck().check(msg))): - ban_temp_list = list(set(ban_temp_list)) - ban(user) - - delta = timedelta(minutes=Textcheck().get_ban_time(msg)) - trigger = DateTrigger(run_date=datetime.now() + delta) - scheduler.add_job(func=unban, - trigger=trigger, - args=(user, ), - misfire_grace_time=60) - - await publicOpinion.finish(Textcheck().check(msg)) - - if Textcheck().check(msg) == "False": - return - - if Textcheck().check(msg): - if user in master: - await publicOpinion.finish("主人你给我注意点阿?!你这可是在死亡边缘试探呢!!") - - ban_temp_list.append(int(user)) - - await publicOpinion.finish(Textcheck().check(msg)) diff --git a/ATRI/plugins/plugin_chat/drifting_bottle.json b/ATRI/plugins/plugin_chat/drifting_bottle.json deleted file mode 100644 index 8a57a22..0000000 --- a/ATRI/plugins/plugin_chat/drifting_bottle.json +++ /dev/null @@ -1 +0,0 @@ -{"1": [1172294279, 516729280, "\u6ca1\u5565\uff0c\u9001\u4e00\u5f20\u6da9\u56fe8[CQ:image,file=542e3acdfba13430d61b084fb07a2812.image,url=http://gchat.qpic.cn/gchatpic_new/1172294279/516729280-3085694275-542E3ACDFBA13430D61B084FB07A2812/0?term=2]"]}
\ No newline at end of file diff --git a/ATRI/plugins/plugin_chat/key_repo.json b/ATRI/plugins/plugin_chat/key_repo.json deleted file mode 100644 index 9e26dfe..0000000 --- a/ATRI/plugins/plugin_chat/key_repo.json +++ /dev/null @@ -1 +0,0 @@ -{}
\ No newline at end of file diff --git a/ATRI/plugins/plugin_chat/laugh.txt b/ATRI/plugins/plugin_chat/laugh.txt deleted file mode 100644 index 50c0987..0000000 --- a/ATRI/plugins/plugin_chat/laugh.txt +++ /dev/null @@ -1,132 +0,0 @@ -Erdos相信上帝有一本记录所有数学中绝妙证明的书,上帝相信这本书在%name手里 -有一次费马惹怒了%name,于是就有了费马最后定理 -%name从不会用光页边的空白 -%name的Erdos数是-1 -如果%name告诉你他在说谎,他就正在说真话 -%name从大到小列举了所有素数,就知道了素数有无穷多 -%name可以不重复地走遍柯尼斯堡的七座桥 -%name可以倒着写完圆周率的每一位 -当数学家们使用通用语句——设n是一个正整数时,这是在请求%name允许他们这样做 -%name小时候有一次要把正整数从1加到100,于是他用心算把所有正整数的和减去大于100的正整数的和 -不是%name发现了正态分布,而是自然规律在遵从%name的意愿 -一个数学家,一个物理学家,一个工程师走进一家酒吧,侍者说:‘你好,%name教授’ -%name可以走到莫比乌斯带的另一面 -当%name令一个正整数增加1时,那个正整数并没有增加,而是其他正整数减少了1 -%name同时给他自己和罗素剪头发 -%name不能理解什么是随机过程,因为他能预言随机数 -有一次%name证明了一个结论,但他不喜欢这个结论,于是%name把它证伪了 -有些级数是发散的,因为%name觉得它们不值得加起来 -问%name一个定理是否正确可以作为一个定理的严谨证明 -如果没有船,%name可以把狼,羊,菜传送到河对岸 -有一次%name在森林里迷路了,于是他给这个森林添加了一些边把它变成了一棵树 -只有%name知道薛定谔的猫是死是活 -通过故意遗漏证明最后的‘证毕’,%name拯救了热带雨林 -%name可以剔掉奥卡姆剃刀 -你刚证明了一个定理?%name200年前就证明它了。 -空集的定义是%name不会证明的定理构成的集合 -‘我找不到反例’可以被视为一个定理的证明,如果它是%name写下的 -%name把磁铁断为两块时,他得到两个单极磁铁 -费马认为书页边缘写不下自己对费马大定理的证明,%name能证明为什么这个证明这么长 -上帝从不掷色子,除非%name允许他赢一小会 -平行线在%name让它们相交的地方相交 -当哥德尔听说%name能证明一切命题时,他让%name证明‘存在一个命题%name不能证明’——这就是量子态的来历 -%name可以看到自己头上帽子的颜色 -%name把无穷视为归纳证明的第一个非平凡情况 -%name可以用1种颜色染任何地图 -%name在求不定积分时不需要在最后加上一个常数 -%name无需站在任何人肩膀上就能比别人看的更远 -%name用克莱因瓶喝酒 -%name通过枚举法证伪了哥德尔不完备性定理/n有一次%name发现有一个定理自己不会证——这直接证明了哥德尔不完备定理 -%name有log(n)速度的排序算法 -上帝创造了正整数,剩下的就是%name的工作了 -黎曼是%name发表未公开成果时使用的名字 -%name不用任何公理就能证明一个定理 -一个发现就是一个%name的未公开结果 -%name使用无穷进制写数 -%name可以除以0 -存在一个实数到被%name证明了的定理的双射 -%name从不需要选择公理 -%name在200年前发明了64量子位计算机,但这让他的工作减速了 -难题不会为%name带来麻烦,%name会为难题带来麻烦 -%name说过‘数学是科学的皇后’,你猜谁是国王? -没有比65537大的费马素数,因为%name发现费马将要发现什么了不起的事情,于是把它终结掉了 -发散序列当看到%name在旁边时会收敛 -宇宙通过膨胀让自己的熵增加速度不超过%name证明定理的速度 -Erdos说他知道37个勾股定理的证明,%name说他知道37个黎曼定理的证明,并留给黎曼做练习 -希尔伯特23问题是他收集的%name的手稿中留给读者做练习的那些问题 -只有两件事物是无限的:人类的愚蠢和%name的智慧,而且我对前者不太确定——爱因斯坦 -%name也发现了伽罗瓦理论,但他赢了那场决斗 -%name不能理解P与NP的问题,因为一切对他而言都是常数级别 -%name能心算干掉RSA公钥加密算法 -%name在实数集上使用数归 -%name从不证明任何定理——都是他的引理 -不是%name素数的素数会遭到戏弄 -%name可以做出正17边形——只用直尺 -有一次%name在脑子里构建了所有集合构成的集合 -%name证明了哥德巴赫猜想——通过检查所有情况 -%name可以把毛球捋平 -世界上没有定理,只有%name允许其正确的命题 -%name知道哪些图灵机会停机,因为它们运行前要得到%name批准 -在晚上,定理们围坐在篝火边给%name讲故事 -%name本想证明三色定理,但他喜欢蓝色,所以放弃了 -%name当初面试Google时,被问到‘如果P=NP能够推导出哪些结论’,Jeff回答说:‘P = 0或者N = 1’。而在面试官还没笑完的时候,Jeff检查了一下Google的公钥,然后在黑板上写下了私钥。 -编译器从不警告%name,只有%name警告编译器。 -%name的编码速度在2000年底提高了约40倍,因为他换了USB2.0的键盘。 -%name在提交代码前都会编译一遍,不过是为了检查编译器和链接器有没有出bug。 -%name有时候会调整他的工作环境和设备,不过这是为了保护他的键盘。 -所有指针都指向%name。 -gcc -O4的功能是发送代码给%name重写。 -%name有一次没有通过图灵测试,因为他正确说出了斐波那契数列的第203项的值,在一秒钟内。 -真空中光速曾经是35英里每小时,直到%name%花了一个周末时间优化了一下物理法则。 -%name出生于1969年12月31日午后11点48分,他花了12分钟实现了他的第一个计时器。 -%name既不用Emacs也不用Vim,他直接输入代码到zcat,因为这样更快。 -%name发送以太网封包从不会发生冲突,因为其他封包都吓得逃回了网卡的缓冲区里。 -因为对常数级的时间复杂度感到不满意,%name发明了世界上第一个O(1/n)算法。 -有一次%name去旅行,期间Google的几个服务神秘地罢工了好几天。这是真事。 -%name被迫发明了异步API因为有一天他把一个函数优化到在调用前就返回结果了。 -%name首先写的是二进制代码,然后再写源代码作为文档。 -%name曾经写过一个O(n^2)算法,那是为了解决旅行商问题。 -%name有一次用一句printf实现了一个web服务器。其他工程师添加了数千行注释但依然无法完全解释清楚其工作原理。而这个程序就是今天Google首页的前端。 -%name可以下四子棋时用三步就击败你。 -当你的代码出现未定义行为时,你会得到一个segmentation fault和一堆损坏的数据。当%name的代码出现未定义行为时,一个独角兽会踏着彩虹从天而降并给每个人提供免费的冰激凌。 -当%name运行一个profiler时,循环们都会恐惧地自动展开。 -%name至今还在等待数学家们发现他隐藏在PI的小数点后数字里的笑话。 -%name的键盘只有两个键,1和0。 -%name失眠的时候,就Mapreduce羊。 -%name想听mp3的时候,他只需要把文件cat到/dev/dsp,然后在脑内解码。 -Graham Bell当初发明出电话时,他看到有一个来自%name的未接来电。 -%name的手表显示的是自1970年1月1日的秒数,并且从没慢过一秒。 -%name写程序是从‘cat >/dev/mem’开始的。 -有一天%name出门时把笔记本错拿成了绘画板。在他回去拿笔记本的路上,他在绘图板上写了个俄罗斯方块打发时间。 -%name卡里只有8毛钱,本来想打个6毛的饭结果不小心按了9毛的,哪知机器忽然疯狂地喷出255两饭,被喷得满脸热饭的%name%大叫‘烫烫烫烫烫烫。。。。’ -%name不洗澡是因为水力发电公司运行的是专有软件。 -%name的胡子是由括号构成的。 -%name从来不用洗澡;他只需要运行‘make clean’。 -%name通过把一切都变得free而解决了旅行推销员问题。 -%name的左手和右手分别命名为‘(’和‘)’。 -%name用Emacs写出了Emacs的第一版。 -有些人检查他们的电脑里是否有病毒。病毒检查他们的电脑里是否有%name。 -在一间普通的客厅里有1242件物体可以被%name用来写一个操作系统,包括这房间本身。 -当%name还是个学数手指的小毛孩时,他总是从0开始数。 -%name不去kill一个进程,他只想看它是否胆敢继续运行。 -当%name指向(point at)一台Windows电脑时,它就会出现段错误。 -%name最初的话语是syscalls(系统调用)。 -%name之所以存在是因为他把自己编译成了生命体。 -%name是他自己在Emacs里用Lisp语言编写成的。 -%name能够通过Emacs的ssh客户端程序连接到任何大脑。 -当%name使用浮点数时,它们便没有舍入误差。 -%name不用维护代码。他注视着它们,直到它们带着敬仰改正自己的错误。 -%name不对开源项目作出贡献;开源项目对%name作出贡献。 -%name的胡须里面不是下巴,而是另一撮胡须。如此递归直至无穷。 -%name曾经得过猪流感,但是该病毒很快被GPL污染并且同化了。 -无论何时世界上有人写出一个‘Hello, world’程序,%name总以“Hello”回应。 -%name从不编译,他只要闭上眼睛,就能看见编译器优化时二进制位之间的能量流动被创造出来…… -如果%name有一个1GB的内存,你有一个1GB的内存,那么%name拥有比你更多的内存。 -当%name执行ps -e时,你的名字会出现。 -从来就没有软件开发过程这回事,只有被%name允许存在的一些程序。 -%name的DNA中包含调试符号。尽管他从不需要它们。 -%name的医生能通过CVS采集他的血样。 -对于%name来说,多项式时间就是O(1)。 -%name将会使可口可乐在GPL协议下公布他们的配方。 -%name不需要用鼠标或键盘来操作计算机。他只要凝视着它,直到它完成想要的工作。 -%name就是图灵测试的解答。
\ No newline at end of file |