summaryrefslogtreecommitdiff
path: root/ATRI/plugins/plugin_chat
diff options
context:
space:
mode:
Diffstat (limited to 'ATRI/plugins/plugin_chat')
-rw-r--r--ATRI/plugins/plugin_chat/__init__.py532
-rw-r--r--ATRI/plugins/plugin_chat/drifting_bottle.json1
-rw-r--r--ATRI/plugins/plugin_chat/key_repo.json1
-rw-r--r--ATRI/plugins/plugin_chat/laugh.txt132
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