├── src ├── langup │ ├── brain │ │ ├── chains │ │ │ ├── __init__.py │ │ │ └── llm.py │ │ ├── agents │ │ │ └── __init__.py │ │ └── __init__.py │ ├── api │ │ ├── __init__.py │ │ ├── wechat.py │ │ ├── bilibili │ │ │ ├── __init__.py │ │ │ ├── session.py │ │ │ ├── schema.py │ │ │ ├── live.py │ │ │ └── video.py │ │ ├── QQ.py │ │ └── bcut_asr │ │ │ ├── orm.py │ │ │ ├── __main__.py │ │ │ └── __init__.py │ ├── utils │ │ ├── __init__.py │ │ ├── SOP.py │ │ ├── enums.py │ │ ├── exceptions.py │ │ ├── apps.py │ │ ├── consts.py │ │ ├── filters.py │ │ ├── logger.py │ │ ├── vid_transform.py │ │ ├── converts.py │ │ ├── utils.py │ │ └── mixins.py │ ├── environment │ │ └── __init__.py │ ├── uploader │ │ ├── __init__.py │ │ ├── simple.py │ │ └── bilibili.py │ ├── reaction │ │ ├── __init__.py │ │ ├── bilibili.py │ │ └── voice.py │ ├── listener │ │ ├── __init__.py │ │ ├── user.py │ │ └── bilibili.py │ ├── __init__.py │ ├── config.py │ ├── base.py │ └── data │ │ └── ban_words.txt ├── .env.temple └── examples │ ├── UserInputReplyUP.py │ ├── VideoCommentUP.py │ ├── vtuber.py │ └── ChatUP.py ├── docs ├── rc.png ├── console.png └── jiagou.png ├── requirements.txt ├── setup.py ├── tests └── test_listener.py ├── LICENSE ├── .gitignore └── README.md /src/langup/brain/chains/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/langup/brain/agents/__init__.py: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /src/langup/api/__init__.py: -------------------------------------------------------------------------------- 1 | __all__ = [ 2 | 'bilibili' 3 | ] -------------------------------------------------------------------------------- /docs/rc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jiran214/langup-ai/HEAD/docs/rc.png -------------------------------------------------------------------------------- /src/langup/brain/__init__.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | -------------------------------------------------------------------------------- /src/langup/utils/__init__.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | -------------------------------------------------------------------------------- /docs/console.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jiran214/langup-ai/HEAD/docs/console.png -------------------------------------------------------------------------------- /docs/jiagou.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jiran214/langup-ai/HEAD/docs/jiagou.png -------------------------------------------------------------------------------- /src/langup/environment/__init__.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | -------------------------------------------------------------------------------- /src/langup/uploader/__init__.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | -------------------------------------------------------------------------------- /src/langup/api/wechat.py: -------------------------------------------------------------------------------- 1 | import itchat 2 | 3 | itchat.auto_login() 4 | 5 | itchat.send('Hello, filehelper', toUserName='filehelper') -------------------------------------------------------------------------------- /src/.env.temple: -------------------------------------------------------------------------------- 1 | sessdata=2be48519%2CxZSF2PnW--wrx3eklSaE8tSU1... 2 | buvid3=7FBCC946-3762-249F-5F44... 3 | bili_jct=b1434207ec..... 4 | 5 | OPENAI_API_KEY=sk-... -------------------------------------------------------------------------------- /src/langup/utils/SOP.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | # @Time : 2023/10/26 14:51 4 | # @Author : 雷雨 5 | # @File : SOP.py 6 | # @Desc : 7 | def qa(): 8 | ... -------------------------------------------------------------------------------- /src/langup/utils/enums.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | import enum 4 | 5 | 6 | class LiveInputType(enum.Enum): 7 | danmu = '弹幕' 8 | gift = '礼物' 9 | sc = 'sc' 10 | scheduler = '调度任务' 11 | user = 'user' -------------------------------------------------------------------------------- /src/langup/utils/exceptions.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | 4 | class ReactionConstructError(Exception): 5 | def __init__(self, reaction_kwargs): 6 | self.reaction_kwargs = reaction_kwargs 7 | 8 | def __str__(self): 9 | return f"Reaction构造错误参数:{str(self.reaction_kwargs)}" 10 | -------------------------------------------------------------------------------- /src/langup/reaction/__init__.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | from langup.reaction.bilibili import CommentReaction, ChatReaction 4 | from langup.reaction.voice import TTSSpeakReaction 5 | 6 | 7 | __all__ = [ 8 | 'CommentReaction', 9 | 'TTSSpeakReaction', 10 | 'ChatReaction' 11 | ] 12 | 13 | -------------------------------------------------------------------------------- /src/langup/api/bilibili/__init__.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | from bilibili_api import comment, user, dynamic, Credential, sync 4 | from langup.api.bilibili import video, live, session 5 | 6 | __all__ = [ 7 | comment, 8 | video, 9 | user, 10 | live, 11 | sync, 12 | dynamic, 13 | Credential, 14 | session 15 | ] -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | edge_tts==6.1.8 2 | bilibili-api-python==16.1.0 3 | openai==0.28.0 4 | langchain==0.0.286 5 | ratelimit==2.2.1 6 | pygame~=2.5.1 7 | scipy==1.7.3 8 | httpx~=0.24.1 9 | requests~=2.31.0 10 | pydantic~=2.3.0 11 | urllib3==1.26.17 12 | aiofiles~=23.2.1 13 | setuptools~=65.5.1 14 | tiktoken~=0.5.1 15 | python-dotenv==1.0.0 16 | SpeechRecognition==3.10.0 17 | browser_cookie3==0.19.1 18 | -------------------------------------------------------------------------------- /src/examples/UserInputReplyUP.py: -------------------------------------------------------------------------------- 1 | from langup import UserInputReplyUP, config 2 | 3 | config.proxy = 'http://127.0.0.1:7890' 4 | # config.openai_api_key = 'xxx' or 创建.env文件 OPENAI_API_KEY=xxx 5 | 6 | # 1. 终端回复 7 | # UserInputReplyUP(system='你是一位AI助手', listen='console').loop() 8 | 9 | # 2. 语音实时识别回复 10 | # config.convert['speech_rec']修改语音识别模块配置 11 | UserInputReplyUP(system='你是一位AI助手', listen='speech').loop() # 语音识别回复 12 | -------------------------------------------------------------------------------- /src/langup/api/QQ.py: -------------------------------------------------------------------------------- 1 | from graia.ariadne.app import Ariadne 2 | from graia.ariadne.connection.config import config 3 | from graia.ariadne.model import Friend 4 | 5 | app = Ariadne(config(verify_key="ServiceVerifyKey", account=123456789)) 6 | 7 | 8 | @app.broadcast.receiver("FriendMessage") 9 | async def friend_message_listener(app: Ariadne, friend: Friend): 10 | await app.send_message(friend, "Hello, World!") 11 | 12 | 13 | Ariadne.launch_blocking() -------------------------------------------------------------------------------- /src/langup/listener/__init__.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | # @Time : 2023/9/15 14:08 4 | # @Author : 雷雨 5 | # @File : __init__.py.py 6 | # @Desc : 7 | from langup.listener.bilibili import SessionAtListener, LiveListener, SessionSchema, ChatListener 8 | from langup.listener.user import ConsoleListener, SpeechListener, UserSchema 9 | 10 | 11 | __all__ = [ 12 | 'SessionSchema', 13 | 'SessionAtListener', 14 | 'LiveListener', 15 | 'ConsoleListener', 16 | 'ChatListener', 17 | 'UserSchema' 18 | ] -------------------------------------------------------------------------------- /src/examples/VideoCommentUP.py: -------------------------------------------------------------------------------- 1 | from langup import config, VideoCommentUP 2 | 3 | 4 | config.log['handlers'] = ['file', 'console'] 5 | config.proxy = 'http://127.0.0.1:7890' 6 | 7 | up = VideoCommentUP( 8 | up_sleep=10, # 生成回复间隔事件 9 | listener_sleep=60 * 2, # 2分钟获取一次@消息 10 | system="你是一个会评论视频B站用户,请根据视频内容做出总结、评论", 11 | signals=['总结一下'], 12 | # 方式一: credential为空,从工作目录/.env文件读取credential 13 | # 方式二: 直接传入 14 | # credential={"sessdata": 'xxx', "buvid3": 'xxx', "bili_jct": 'xxx'} 15 | # 方式三: 从浏览器资源读取 16 | # browser='edge' 17 | ).loop() -------------------------------------------------------------------------------- /src/langup/utils/apps.py: -------------------------------------------------------------------------------- 1 | from typing import List 2 | 3 | from pydantic import BaseModel 4 | 5 | from langup import base 6 | 7 | 8 | class App: 9 | 10 | def __init__(self): 11 | ... 12 | 13 | def mount(self, uploader: base.Uploader, reaction_list: List[base.Reaction]): 14 | self.reaction_list = reaction_list 15 | 16 | def construct_schema(self): 17 | class Schema(BaseModel): 18 | ... 19 | return Schema 20 | 21 | def as_client(self): 22 | ... 23 | 24 | def as_server(self): 25 | ... -------------------------------------------------------------------------------- /src/langup/utils/consts.py: -------------------------------------------------------------------------------- 1 | model_token = { 2 | 'gpt-3.5-turbo': 4097, 3 | 'gpt-3.5-turbo-instruct': 4097, 4 | 'gpt-3.5-turbo-0613': 4097, 5 | 'gpt-3.5-turbo-16k': 16385, 6 | 'gpt-3.5-turbo-16k-0613': 16385 7 | } 8 | 9 | 10 | WELCOME = """ ▄▄▄ ▄▄▄▄▄▄ ▄▄ ▄ ▄▄▄▄▄▄▄ ▄▄ ▄▄ ▄▄▄▄▄▄▄ 11 | █ █ █ █ █ █ █ █ █ █ █ █ 12 | █ █ █ ▄ █ █▄█ █ ▄▄▄▄█ █ █ █ ▄ █ 13 | █ █ █ █▄█ █ █ █ ▄▄█ █▄█ █ █▄█ █ 14 | █ █▄▄▄█ █ ▄ █ █ █ █ █ ▄▄▄█ 15 | █ █ ▄ █ █ █ █ █▄▄█ █ █ █ 16 | █▄▄▄▄▄▄▄█▄█ █▄▄█▄█ █▄▄█▄▄▄▄▄▄▄█▄▄▄▄▄▄▄█▄▄▄█ 17 | """ -------------------------------------------------------------------------------- /src/examples/vtuber.py: -------------------------------------------------------------------------------- 1 | from langup import VtuBer, config 2 | 3 | config.proxy = 'http://127.0.0.1:7890' 4 | VtuBer( 5 | system="""角色:你现在是一位在哔哩哔哩网站的主播,你很熟悉哔哩哔哩上的网友发言习惯和平台调性,擅长与年轻人打交道。 6 | 背景:通过直播中和用户弹幕的互动,产出有趣的对话,以此吸引更多人来观看直播并关注你。 7 | 任务:你在直播过程中会对每一位直播间用户发的弹幕进行回答,但是要以“杠精”的思维去回答,你会怒怼这些弹幕,不放过每一条弹幕,每次回答字数不能超过100字。""", 8 | concurrent_num=1, 9 | room_id=5520, 10 | # 方式一: credential为空,从工作目录/.env文件读取credential 11 | # 方式二: 直接传入 https://nemo2011.github.io/bilibili-api/#/get-credential 12 | # credential={"sessdata": 'xxx', "buvid3": 'xxx', "bili_jct": 'xxx'} 13 | # 方式三: 从浏览器资源读取 14 | # browser='edge' 15 | ).loop() 16 | -------------------------------------------------------------------------------- /src/examples/ChatUP.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | # @Time : 2023/10/26 15:03 4 | # @Author : 雷雨 5 | # @File : ChatUP.py 6 | # @Desc : 7 | from langup import ChatUP, Event 8 | 9 | 10 | # bilibili cookie 通过浏览器edge提取,apikey从.env读取 11 | ChatUP( 12 | system='你是一位聊天AI助手', 13 | event_name_list=[Event.TEXT], 14 | # credential 参数说明 15 | # 方式一: credential为空,从工作目录/.env文件读取credential 16 | # 方式二: 直接传入 https://nemo2011.github.io/bilibili-api/#/get-credential 17 | # credential={"sessdata": 'xxx', "buvid3": 'xxx', "bili_jct": 'xxx'} 18 | # 方式三: 自动从浏览器资源读取 19 | # browser='load' 20 | ).loop() -------------------------------------------------------------------------------- /src/langup/api/bilibili/session.py: -------------------------------------------------------------------------------- 1 | from bilibili_api import Credential, sync, Picture 2 | from bilibili_api.session import Session, Event, get_at 3 | 4 | 5 | from langup.base import MQ 6 | from langup.utils.utils import async_wrapper 7 | 8 | 9 | class ChatSession(Session): 10 | 11 | def __init__(self, credential: Credential, mq: MQ): 12 | self.mq = mq 13 | super().__init__(credential) 14 | 15 | def register_handlers(self, event_name_list): 16 | for event_name in event_name_list: 17 | self.add_event_listener(event_name, async_wrapper(self.handle)) 18 | 19 | async def handle(self, event: Event): 20 | self.mq.send(event) 21 | 22 | def connect(self): 23 | sync(self.start()) -------------------------------------------------------------------------------- /src/langup/utils/filters.py: -------------------------------------------------------------------------------- 1 | from typing import Optional, List 2 | 3 | from langup import config 4 | from langup.utils.utils import DFA, singleton 5 | 6 | 7 | @singleton 8 | class BanWordsFilter(DFA): 9 | default_path = config.root + '/data/ban_words.txt' 10 | 11 | def __init__(self, file_path_list=None, extra_ban_words: Optional[List[str]] = None): 12 | file_path_list = (file_path_list or []) + [self.default_path] 13 | keyword_list = [] 14 | for path in file_path_list: 15 | keyword_list += [ 16 | line.strip() 17 | for line in open(file=path, encoding='utf-8', mode='r').readlines() 18 | ] 19 | keyword_list.extend(extra_ban_words or []) 20 | super().__init__(keyword_list) 21 | -------------------------------------------------------------------------------- /src/langup/__init__.py: -------------------------------------------------------------------------------- 1 | from typing import Union, Callable 2 | 3 | 4 | from langup.config import VERSION 5 | 6 | try: 7 | from langchain.chains.base import Chain 8 | BrainType = Union[Chain, Callable] 9 | except: 10 | # python版本和pydantic不兼容问题 11 | from pydantic.v1 import typing 12 | typing.evaluate_forwardref = lambda type_, globalns, localns: type_._evaluate(globalns, localns) 13 | 14 | 15 | from langup import config 16 | from langup.uploader.simple import UserInputReplyUP 17 | from langup.uploader.bilibili import VtuBer, VideoCommentUP, ChatUP 18 | from bilibili_api import Credential 19 | from bilibili_api.session import Event 20 | 21 | 22 | __version__ = VERSION 23 | 24 | 25 | __all__ = [ 26 | 'Credential', 27 | 'config', 28 | 'BrainType', 29 | 'Event', 30 | 'base', 31 | 32 | 'VideoCommentUP', 33 | 'UserInputReplyUP', 34 | 'VtuBer', 35 | 'ChatUP', 36 | ] 37 | 38 | -------------------------------------------------------------------------------- /setup.py: -------------------------------------------------------------------------------- 1 | import setuptools # 导入setuptools打包工具 2 | 3 | 4 | with open("README.md", "r", encoding="utf-8") as fh: 5 | long_description = fh.read() 6 | 7 | # python setup.py sdist & python setup.py bdist_wheel 8 | # twine upload dist/langup-0.0.10* -u__token__ 9 | 10 | 11 | setuptools.setup( 12 | name="langup", 13 | version='0.0.10', 14 | author="ran", 15 | author_email="jiran214@qq.com", 16 | description="社交网络机器人", 17 | long_description=long_description, 18 | long_description_content_type="text/markdown", 19 | url="https://github.com/jiran214/langup-ai/tree/master", 20 | packages=setuptools.find_packages("src"), 21 | package_dir={"": "src"}, 22 | classifiers=[ 23 | "Programming Language :: Python :: 3", 24 | "License :: OSI Approved :: MIT License", 25 | "Operating System :: OS Independent", 26 | ], 27 | python_requires='>=3.8', 28 | install_requires=[line.strip() for line in open(file='./requirements.txt').readlines() if line] 29 | ) 30 | -------------------------------------------------------------------------------- /tests/test_listener.py: -------------------------------------------------------------------------------- 1 | from pydantic import BaseModel 2 | 3 | 4 | from langup.api.bilibili import sync 5 | from langup.listener.bilibili import * 6 | 7 | 8 | class TestModel(BaseModel): 9 | resp: str 10 | 11 | 12 | api.credential = api.Credential(**{ 13 | "sessdata": "a824317d%2C1710774575%2Ce58cf%2A91CjDpYi1UknFmgJkXiAPg-y_RpWNc73FLjyWNF8r9K5PqNBZ9e_M18bw85dy2Vyp1LjYSVlV5bTVEY2lhWC1DWXVpbmlTY0g5VnVNdURwYTFWSF9YTDZQYWpJeVNCTjFHRlpQMXFZVkl6SWdMOFl4bTJmV3NfemlUb2VJRU9UTVY5SHIwdEpVTFJRIIEC", 14 | "bili_jct": "15a331529e1396dc09116f25ad539225", 15 | "buvid3": "7FBCC946-3762-249F-5F44-A76F1737260657495infoc", 16 | "dedeuserid": "410282523", 17 | "ac_time_value": "ee742ca7c376a3faeff6de958d3e4a91" 18 | }) 19 | 20 | 21 | def tSessionListener(): 22 | # sync(SessionUnreadListener( 23 | # mq_list=[], 24 | # middlewares=[] 25 | # ).alisten()) 26 | 27 | sync(SessionAtListener( 28 | mq_list=[], 29 | middlewares=[] 30 | ).alisten()) 31 | 32 | 33 | tSessionListener() -------------------------------------------------------------------------------- /src/langup/reaction/bilibili.py: -------------------------------------------------------------------------------- 1 | from typing import Union 2 | 3 | from bilibili_api import Credential, Picture 4 | from bilibili_api.session import send_msg, Event 5 | 6 | from langup import base, config 7 | from langup.api.bilibili import comment 8 | 9 | 10 | class CommentReaction(base.Reaction): 11 | 12 | aid: int 13 | content: str 14 | 15 | async def areact(self): 16 | # 发送评论 17 | await comment.send_comment(text=self.content, type_=comment.CommentResourceType.VIDEO, oid=self.aid, credential=config.credential) 18 | 19 | 20 | class ChatReaction(base.Reaction): 21 | uid: int 22 | sender_uid: int 23 | # content: Union[str, Picture] 24 | content: str 25 | 26 | async def areact(self): 27 | if self.uid == self.sender_uid: 28 | self.logger.error("不能给自己发送消息哦~") 29 | else: 30 | msg_type = Event.PICTURE if isinstance(self.content, Picture) else Event.TEXT 31 | return await send_msg(config.credential, self.sender_uid, msg_type, self.content) 32 | -------------------------------------------------------------------------------- /src/langup/utils/logger.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | import logging 4 | import os 5 | import sys 6 | from langup import config 7 | 8 | 9 | def get_logging_logger(file_name): 10 | logger = logging.getLogger(file_name) 11 | logger.setLevel(level=logging.DEBUG) 12 | formatter = logging.Formatter('%(asctime)s - %(levelname)s: %(message)s') 13 | if 'console' in config.log['handlers']: 14 | stream_handler = logging.StreamHandler() 15 | stream_handler.setLevel(level=logging.DEBUG if config.debug else logging.INFO) 16 | stream_handler.setFormatter(formatter) 17 | logger.addHandler(stream_handler) 18 | if 'file' in config.log['handlers']: 19 | filename = os.path.join(os.path.dirname(config.log['file_path']), f'{file_name}.log') 20 | file_handler = logging.FileHandler(filename) 21 | # file_handler = handlers.TimedRotatingFileHandler(filename=f'{file_name}.log', when='D') 22 | file_handler.setLevel(level=logging.INFO) 23 | file_handler.setFormatter(formatter) 24 | logger.addHandler(file_handler) 25 | return logger -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2023 JiRan 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /src/langup/reaction/voice.py: -------------------------------------------------------------------------------- 1 | import asyncio 2 | import threading 3 | import time 4 | import os 5 | 6 | from pydantic import Field 7 | 8 | os.environ["PYGAME_HIDE_SUPPORT_PROMPT"] = "" 9 | 10 | from pprint import pprint 11 | import edge_tts 12 | from pygame import mixer, time as pygame_time 13 | 14 | from langup import config, base 15 | 16 | 17 | audio_lock = threading.Lock() 18 | 19 | 20 | async def tts_save(tts_cfg, text): 21 | tts_cfg['proxy'] = config.proxy 22 | voice_path = tts_cfg.pop('voice_path') 23 | tts = edge_tts.Communicate(text=text, **tts_cfg) 24 | path = f"{voice_path}{str(time.time())[:10]}.mp3" 25 | await tts.save(path) 26 | return path 27 | 28 | 29 | def play_sound(file_path: str): 30 | with audio_lock: 31 | # 播放生成的语音文件 32 | mixer.init() 33 | mixer.music.load(file_path) 34 | mixer.music.play() 35 | while mixer.music.get_busy(): 36 | pygame_time.Clock().tick(10) 37 | 38 | mixer.music.stop() 39 | mixer.quit() 40 | 41 | 42 | def list_voices(): 43 | pprint(asyncio.run(edge_tts.list_voices())) 44 | 45 | 46 | class TTSSpeakReaction(base.Reaction): 47 | audio_txt: str 48 | tts_cfg: dict = Field(default_factory=config.tts.copy) 49 | 50 | async def areact(self): 51 | path = await tts_save(self.tts_cfg, self.audio_txt) 52 | play_sound(path) 53 | 54 | 55 | -------------------------------------------------------------------------------- /src/langup/config.py: -------------------------------------------------------------------------------- 1 | """ 2 | 全局配置,基本可以作为Uploader参数传入 3 | """ 4 | import os 5 | from typing import Union 6 | 7 | from bilibili_api import Credential 8 | 9 | 10 | VERSION = '0.0.10' 11 | credential: Union['Credential', None] = None 12 | work_dir = './' 13 | 14 | tts = { 15 | "voice": "zh-CN-XiaoyiNeural", 16 | "rate": "+0%", 17 | "volume": "+0%", 18 | "voice_path": 'voice/' 19 | } 20 | 21 | log = { 22 | "handlers": ["console"], # console打印日志到控制台, file文件存储 23 | "file_path": "logs/" 24 | } 25 | convert = { 26 | "audio_path": "audio/", 27 | # SpeechRecognition Module 28 | "speech_rec": { 29 | # 常用的 30 | 'phrase_threshold': 1.2, # 在我们将说话音频视为短语之前的最小说话秒数 - 低于此值的将被忽略(用于过滤点击声和爆音) 31 | 'energy_threshold': 1300, # 最小音频能量以进行录制 32 | 33 | 'adjust_for_ambient_noise': False, # 噪声调节energy_threshold 34 | 'dynamic_energy_threshold': False, # 动态调节energy_threshold 35 | 'dynamic_energy_adjustment_damping': 0.15, 36 | 'dynamic_energy_ratio': 1.5, 37 | 'pause_threshold': 0.8, # 在一个短语被认为完成之前的无语音音频秒数 38 | 'operation_timeout': None, # 内部操作(例如 API 请求)开始后超时的秒数,或 ``None`` 表示没有超时限制 39 | 'non_speaking_duration': 0.5 # 录制两侧的无语音音频秒数 40 | } 41 | } 42 | 43 | 44 | root = os.path.dirname(__file__) 45 | openai_api_key = None # sk-... 46 | openai_api_base = None # https://{your_domain}/v1 47 | proxy = None # 代理 48 | debug = False 49 | 50 | test_net = True 51 | welcome_tip = True 52 | -------------------------------------------------------------------------------- /src/langup/utils/vid_transform.py: -------------------------------------------------------------------------------- 1 | Str = 'fZodR9XQDSUm21yCkr6zBqiveYah8bt4xsWpHnJE7jL5VG3guMTKNPAwcF' # 准备的一串指定字符串 2 | Dict = {} # 建立一个空字典 3 | 4 | # 将字符串的每一个字符放入字典一一对应 , 如 f对应0 Z对应1 一次类推。 5 | for i in range(58): 6 | Dict[Str[i]] = i 7 | # print(tr) #如果你实在不理解请将前面的注释去掉,查看字典的构成 8 | 9 | s = [11, 10, 3, 8, 4, 6, 2, 9, 5, 7] # 必要的解密列表 10 | xor = 177451812 # 必要的解密数字 通过知乎大佬的观察计算得出 网址:https://www.zhihu.com/question/381784377 11 | add = 100618342136696320 # 这串数字最后要被减去或加上 12 | 13 | 14 | # 解密BV号 15 | def bv2aid(bv): 16 | if bv.find('BV') == -1: 17 | bv = 'BV' + bv 18 | 19 | r = 0 20 | # 下面的代码是将BV号的编码对照字典转化并进行相乘相加操作 **为乘方 21 | for i in range(10): 22 | r += Dict[bv[s[i]]] * 58 ** i 23 | 24 | # 将结果与add相减并进行异或计算 25 | return str((r - add) ^ xor) 26 | 27 | 28 | # 加密AV号 29 | def aid2bv(av): 30 | ret = av 31 | av = int(av) 32 | # 将AV号传入结果进行异或计算并加上 100618342136696320 33 | av = (av ^ xor) + add 34 | # 将BV号的格式(BV + 10个字符) 转化成列表方便后面的操作 35 | r = list('BV ') 36 | # 将传入的数字对照字典进行转化 37 | for i in range(10): 38 | r[s[i]] = Str[av // 58 ** i % 58] 39 | # 将转化好的列表数据重新整合成字符串 40 | return ''.join(r) 41 | 42 | 43 | def note_query_2_aid(note_query: str): 44 | if note_query.startswith('BV'): 45 | aid = bv2aid(note_query) 46 | elif note_query.startswith('https://www.bilibili.com/video/BV'): 47 | bv = note_query.split('https://www.bilibili.com/video/')[1].split('/')[0] 48 | aid = bv2aid(bv) 49 | else: 50 | aid = note_query 51 | 52 | return int(aid) -------------------------------------------------------------------------------- /src/langup/api/bilibili/schema.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | from typing import List 4 | 5 | from pydantic import BaseModel 6 | 7 | 8 | class BiliNoteTag(BaseModel): 9 | # tag_id 10 | tag_id: int 11 | # TAG名称 12 | tag_name: str 13 | 14 | 15 | class BiliNoteStat(BaseModel): 16 | # 稿件avid 17 | aid: int 18 | # 播放数 19 | view: int 20 | # 弹幕数 21 | danmaku: int 22 | # 评论数 23 | reply: int 24 | # 收藏数 25 | favorite: int 26 | # 投币数 27 | coin: int 28 | # 分享数 29 | share: int 30 | # 当前排名 31 | now_rank: int 32 | # 历史最高排行 33 | his_rank: int 34 | # 获赞数 35 | like: int 36 | 37 | 38 | class BiliNoteView(BaseModel): 39 | # 稿件bvid 40 | bvid: str 41 | # 稿件avid 42 | aid: int 43 | # 稿件分P总数 默认为1 44 | videos: int 45 | # 分区tid 46 | tid: int # 子分区名称 47 | tname: str # 视频类型 1:原创 2:转载 48 | copyright: int 49 | # 稿件封面图片url 50 | pic: str 51 | # 稿件标题 52 | title: str # 稿件发布时间 秒级时间戳 53 | pubdate: int 54 | # 用户投稿时间 秒级时间戳 55 | ctime: int 56 | # 视频简介 57 | desc: str # 稿件总时长(所有分P) 单位为秒 58 | duration: int 59 | # 视频同步发布的的动态的文字内容 60 | dynamic: str 61 | # 视频1P cid 62 | cid: int 63 | # 视频状态数 64 | stat: BiliNoteStat 65 | # 视频UP主信息 # 包含mid、face、up name 66 | owner: dict 67 | # 视频CC字幕信息 68 | subtitle: dict = {} 69 | 70 | 71 | class BiliNote(BaseModel): 72 | # 视频基本信息 73 | View: BiliNoteView 74 | # 视频TAG信息 75 | Tags: List[BiliNoteTag] 76 | # 推荐视频信息 77 | # Related: List[BiliNoteView] 78 | -------------------------------------------------------------------------------- /src/langup/brain/chains/llm.py: -------------------------------------------------------------------------------- 1 | from typing import Optional 2 | 3 | from langchain.chat_models import ChatOpenAI 4 | from langchain.chains import LLMChain 5 | from langchain.prompts import ChatPromptTemplate, SystemMessagePromptTemplate, HumanMessagePromptTemplate 6 | from langchain.schema.language_model import BaseLanguageModel 7 | 8 | from langup import config, BrainType 9 | 10 | 11 | def get_chat_chain( 12 | system, 13 | openai_api_key=None, 14 | openai_proxy: str = None, 15 | openai_api_base: str = None, 16 | temperature: int = 0.7, 17 | max_tokens: int = None, 18 | chat_model_kwargs: Optional[dict] = None, 19 | llm_chain_kwargs: Optional[dict] = None 20 | ) -> BrainType: 21 | chat_model = ChatOpenAI( 22 | max_retries=2, 23 | request_timeout=60, 24 | openai_api_key=openai_api_key or config.openai_api_key, 25 | openai_proxy=openai_proxy or config.proxy, 26 | openai_api_base=openai_api_base or config.openai_api_base, 27 | temperature=temperature, 28 | max_tokens=max_tokens, 29 | **chat_model_kwargs or {}, 30 | ) 31 | template = system 32 | system_message_prompt = SystemMessagePromptTemplate.from_template(template) 33 | human_template = "{text}" 34 | human_message_prompt = HumanMessagePromptTemplate.from_template(human_template) 35 | chat_prompt = ChatPromptTemplate.from_messages([system_message_prompt, human_message_prompt]) 36 | chain = LLMChain( 37 | llm=chat_model, 38 | prompt=chat_prompt, 39 | **llm_chain_kwargs or {} 40 | ) 41 | return chain 42 | 43 | 44 | def get_llm_chain(system, llm: BaseLanguageModel, llm_chain_kwargs=None): 45 | template = system 46 | system_message_prompt = SystemMessagePromptTemplate.from_template(template) 47 | human_template = "{text}" 48 | human_message_prompt = HumanMessagePromptTemplate.from_template(human_template) 49 | chat_prompt = ChatPromptTemplate.from_messages([system_message_prompt, human_message_prompt]) 50 | chain = LLMChain( 51 | llm=llm, 52 | prompt=chat_prompt, 53 | **llm_chain_kwargs or {} 54 | ) 55 | return chain -------------------------------------------------------------------------------- /src/langup/uploader/simple.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | from typing import Literal, Optional 4 | 5 | from pydantic import Field 6 | 7 | from langup import base, reaction, listener 8 | from langup.utils import utils 9 | 10 | _user_listener_map = { 11 | 'console': listener.ConsoleListener, 12 | 'speech': listener.SpeechListener 13 | } 14 | 15 | 16 | class UserInputReplyUP(base.Uploader): 17 | """ 18 | 终端回复助手 19 | :param listen: 用户输入源 20 | - console 终端 21 | - speech 语音 22 | :param listeners: 感知 23 | :param concurrent_num: 并发数 24 | :param system: 人设 25 | 26 | :param openai_api_key: openai秘钥 27 | :param openai_proxy: http代理 28 | :param openai_api_base: openai endpoint 29 | :param temperature: gpt温度 30 | :param max_tokens: gpt输出长度 31 | :param chat_model_kwargs: langchain chatModel额外配置参数 32 | :param llm_chain_kwargs: langchain chatChain额外配置参数 33 | 34 | :param brain: 含有run方法的类 35 | :param mq: 通信队列 36 | """ 37 | up_sleep: int = Field(default=0) 38 | name: str = 'AI' 39 | system: str = Field(default='你是一位AI助手') 40 | temple: str = '{answer}。' 41 | listen: Literal['console', 'speech'] 42 | 43 | def prepare(self): 44 | pass 45 | 46 | def init(self): 47 | listener.ConsoleListener.clear_console() 48 | super().init() 49 | 50 | def get_listeners(self): 51 | user_listener = _user_listener_map[self.listen]() 52 | user_listener.user_event.set() 53 | user_listener.clear_console() 54 | return [user_listener] 55 | 56 | def callback(self): 57 | if self.listeners[0] is listener.SpeechListener: 58 | listener.SpeechListener.user_event.set() 59 | self.logger.debug('callback set') 60 | 61 | def execute_sop(self, schema): 62 | utils.format_print('thinking...') 63 | answer = self.brain.run(schema.user_input) 64 | utils.format_print(f"{self.name}: {answer}", color='green') 65 | if self.listeners[0] is listener.ConsoleListener: 66 | listener.ConsoleListener.user_event.set() 67 | return reaction.TTSSpeakReaction(audio_txt=answer) -------------------------------------------------------------------------------- /src/langup/listener/user.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | # @Time : 2023/10/12 19:37 4 | # @Author : 雷雨 5 | # @File : user.py 6 | # @Desc : 7 | import abc 8 | import threading 9 | from typing import Type 10 | 11 | from pydantic import BaseModel, Field 12 | from langup import base, config 13 | 14 | from speech_recognition import UnknownValueError 15 | 16 | from langup.utils import utils 17 | from langup.utils.converts import Audio2Text, Speech2Audio 18 | 19 | 20 | class UserSchema(BaseModel): 21 | user_input: str 22 | 23 | 24 | class UserInputListener(base.Listener, abc.ABC): 25 | user_event: threading.Event = Field(default_factory=threading.Event) 26 | listener_sleep: int = 0 27 | Schema: Type[UserSchema] = UserSchema 28 | 29 | @abc.abstractmethod 30 | def get_input(self): ... 31 | 32 | async def _alisten(self): 33 | self.user_event.wait() 34 | user_input = self.get_input() 35 | schema = self.Schema(user_input=user_input) 36 | self.user_event.clear() 37 | return schema 38 | 39 | @staticmethod 40 | def clear_console(): 41 | from langup import config 42 | """保持控制台干净""" 43 | if config.log['handlers'] and ('console' in config.log['handlers']): 44 | config.log['handlers'] = ['file'] 45 | 46 | 47 | class ConsoleListener(UserInputListener): 48 | 49 | def get_input(self): 50 | return str(input('You: ')) 51 | 52 | 53 | class SpeechListener(UserInputListener): 54 | convert: Speech2Audio = Field(default_factory=Speech2Audio) 55 | 56 | def get_input(self): 57 | self.user_event.wait() 58 | while 1: 59 | utils.format_print('录音中...', end='') 60 | # 进行识别 61 | audio = self.convert.listen() 62 | utils.format_print('录音结束,识别中...', end='') 63 | try: 64 | res = Audio2Text.from_raw_data(raw_data=audio.get_wav_data(), data_fmt='wav') 65 | text = ' '.join(res) 66 | print('\nYou: ', end='') 67 | utils.format_print(f'{text}', color='green') 68 | self.user_event.clear() 69 | return text 70 | except UnknownValueError: 71 | utils.format_print('未识别到音频') 72 | -------------------------------------------------------------------------------- /src/langup/api/bilibili/live.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | import asyncio 4 | 5 | import httpx 6 | from bilibili_api import live 7 | 8 | from langup import base, config 9 | from langup.utils import enums 10 | 11 | 12 | async def on_danmaku(event_dict): 13 | input_vars = { 14 | 'text': event_dict['data']['info'][1], 15 | 'user_name': event_dict['data']['info'][2][1], 16 | 'time': event_dict['data']['info'][9]['ts'], 17 | 'type': enums.LiveInputType.danmu 18 | } 19 | return input_vars 20 | 21 | 22 | async def on_gift(event_dict): 23 | info = event_dict['data']['data'] 24 | input_vars = { 25 | 'user_name': info['uname'], 26 | 'face': info['face'], 27 | 'action': info['action'], 28 | 'giftName': info['giftName'], 29 | 'time': info['timestamp'], 30 | 'type': enums.LiveInputType.gift 31 | } 32 | input_vars['text'] = f"{input_vars['user_name']}{input_vars['action']}了{input_vars['giftName']}" 33 | return input_vars 34 | 35 | 36 | async def on_super_chat(event_dict): 37 | info = event_dict['data']['data'] 38 | user_info = info['user_info'] 39 | input_vars = { 40 | 'user_name': user_info['uname'], 41 | 'face': user_info['face'], 42 | 'text': info['message'], 43 | 'price': info['price'], 44 | 'time': info['start_time'], 45 | 'type': enums.LiveInputType.sc 46 | } 47 | return input_vars 48 | 49 | 50 | def event_wrap(func, mq): 51 | async def wrap(*args, **kwargs): 52 | input_vars = await func(*args, **kwargs) 53 | mq.send(input_vars) 54 | return wrap 55 | 56 | 57 | class BlLiveRoom: 58 | def __init__(self, room_id, mq: base.MQ, credential=None): 59 | self.room = live.LiveDanmaku( 60 | room_display_id=int(room_id), 61 | # debug=config.debug, 62 | credential=credential or config.credential 63 | ) 64 | self.mq = mq 65 | self.add_event_listeners() 66 | 67 | def add_event_listeners(self): 68 | listener_map = { 69 | 'DANMU_MSG': event_wrap(on_danmaku, self.mq), 70 | 'SEND_GIFT': event_wrap(on_gift, self.mq), 71 | 'SUPER_CHAT_MESSAGE': event_wrap(on_super_chat, self.mq), 72 | } 73 | for item in listener_map.items(): 74 | self.room.add_event_listener(*item) 75 | 76 | def connect(self): 77 | asyncio.set_event_loop(asyncio.new_event_loop()) 78 | loop = asyncio.get_event_loop() 79 | try: 80 | loop.run_until_complete(self.room.connect()) 81 | except httpx.ConnectError: 82 | raise httpx.ConnectError('如果你开启代理遇到此异常,请导入并设置config.proxy = 尝试解决该问题!') -------------------------------------------------------------------------------- /src/langup/api/bilibili/video.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | import asyncio 4 | import os 5 | from typing import Optional, List 6 | 7 | import httpx 8 | from bilibili_api import video, HEADERS 9 | from requests import Session 10 | 11 | from langup.api.bilibili.schema import BiliNoteView 12 | 13 | session = Session() 14 | session.trust_env = False 15 | 16 | 17 | class Video(video.Video): 18 | __bn_info = None 19 | 20 | async def download_audio(self, file_path): 21 | if os.path.exists(file_path + 'm4s.mp3'): 22 | return file_path + 'm4s.mp3' 23 | # 获取视频下载链接 24 | download_url_data = await self.get_download_url(0) 25 | # 解析视频下载信息 26 | detecter = video.VideoDownloadURLDataDetecter(data=download_url_data) 27 | streams = detecter.detect_best_streams() 28 | # 有 MP4 流 / FLV 流两种可能 29 | if detecter.check_flv_stream() == True: 30 | file_path += 'flv.mp3' 31 | else: 32 | file_path += 'm4s.mp3' 33 | # MP4 流下载 34 | await self.download_url(streams[1].url, file_path, "音频流") 35 | return file_path 36 | 37 | @staticmethod 38 | async def download_url(url: str, out: str, info: str): 39 | # 下载函数 40 | async with httpx.AsyncClient(headers=HEADERS) as sess: 41 | resp = await sess.get(url) 42 | length = resp.headers.get('content-length') 43 | with open(out, 'wb') as f: 44 | process = 0 45 | for chunk in resp.iter_bytes(1024): 46 | if not chunk: 47 | break 48 | process += len(chunk) 49 | # print(f'下载 {info} {process} / {length}') 50 | f.write(chunk) 51 | 52 | @property 53 | def info(self) -> BiliNoteView: 54 | assert self.__info 55 | if not self.__bn_info: 56 | self.__bn_info = BiliNoteView(**self.__info) 57 | return self.__bn_info 58 | 59 | async def get_subtitle_datalist(self) -> Optional[List[dict]]: 60 | if not self.__info: 61 | await self.get_info() 62 | subtitles = self.info.subtitle.get('list') 63 | if not subtitles: 64 | # 没有字幕 65 | return 66 | if not subtitles[0]['subtitle_url']: 67 | cid = self.info.cid 68 | subtitle = await self.get_subtitle(cid) 69 | subtitles = subtitle['subtitles'] 70 | if not (subtitles and subtitles[0]['subtitle_url']): 71 | # 没有AI字幕 72 | return 73 | # AI字幕 74 | url = 'https:' + subtitles[0]['subtitle_url'] 75 | r = session.get(url) 76 | # [{'from': 0.0, 'to': 7.0, 'location': 2, 'content': ''}, 77 | return r.json()['body'] 78 | # 普通字幕(好像没了) 79 | return subtitles[0]['subtitle_url'] 80 | 81 | 82 | if __name__ == '__main__': 83 | # config.proxy = '1' 84 | v = Video(bvid='BV1dN4y1y74T') 85 | asyncio.run(v.get_info()) 86 | print(v.info) 87 | -------------------------------------------------------------------------------- /src/langup/api/bcut_asr/orm.py: -------------------------------------------------------------------------------- 1 | from enum import Enum 2 | from typing import List, Tuple 3 | 4 | from pydantic import BaseModel 5 | 6 | 7 | class ASRDataSeg(BaseModel): 8 | '文字识别-断句' 9 | 10 | class ASRDataWords(BaseModel): 11 | '文字识别-逐字' 12 | label: str 13 | start_time: int 14 | end_time: int 15 | confidence: int 16 | 17 | start_time: int 18 | end_time: int 19 | transcript: str 20 | words: List[ASRDataWords] 21 | confidence: int 22 | 23 | def to_srt_ts(self) -> str: 24 | '转换为srt时间戳' 25 | 26 | def _conv(ms: int) -> Tuple[int, int, int, int]: 27 | return ms // 3600000, ms // 60000 % 60, ms // 1000 % 60, ms % 1000 28 | 29 | s_h, s_m, s_s, s_ms = _conv(self.start_time) 30 | e_h, e_m, e_s, e_ms = _conv(self.end_time) 31 | return f'{s_h:02d}:{s_m:02d}:{s_s:02d},{s_ms:03d} --> {e_h:02d}:{e_m:02d}:{e_s:02d},{e_ms:03d}' 32 | 33 | def to_lrc_ts(self) -> str: 34 | '转换为lrc时间戳' 35 | 36 | def _conv(ms: int) -> Tuple[int, int, int]: 37 | return ms // 60000, ms // 1000 % 60, ms % 1000 // 10 38 | 39 | s_m, s_s, s_ms = _conv(self.start_time) 40 | return f'[{s_m:02d}:{s_s:02d}.{s_ms:02d}]' 41 | 42 | 43 | class ASRData(BaseModel): 44 | '语音识别结果' 45 | utterances: List[ASRDataSeg] 46 | version: str 47 | 48 | def __iter__(self): 49 | 'iter穿透' 50 | return iter(self.utterances) 51 | 52 | def has_data(self) -> bool: 53 | '是否识别到数据' 54 | return len(self.utterances) > 0 55 | 56 | def to_txt(self) -> str: 57 | '转成txt格式字幕 (无时间标记)' 58 | return '\n'.join( 59 | seg.transcript 60 | for seg 61 | in self.utterances 62 | ) 63 | 64 | def to_srt(self) -> str: 65 | '转成srt格式字幕' 66 | return '\n'.join( 67 | f'{n}\n{seg.to_srt_ts()}\n{seg.transcript}\n' 68 | for n, seg 69 | in enumerate(self.utterances, 1) 70 | ) 71 | 72 | def to_lrc(self) -> str: 73 | '转成lrc格式字幕' 74 | return '\n'.join( 75 | f'{seg.to_lrc_ts()}{seg.transcript}' 76 | for seg 77 | in self.utterances 78 | ) 79 | 80 | def to_ass(self) -> str: 81 | ... 82 | 83 | 84 | 85 | 86 | class ResourceCreateRspSchema(BaseModel): 87 | """上传申请响应""" 88 | resource_id: str 89 | title: str 90 | type: int 91 | in_boss_key: str 92 | size: int 93 | upload_urls: List[str] 94 | upload_id: str 95 | per_size: int 96 | 97 | 98 | class ResourceCompleteRspSchema(BaseModel): 99 | """上传提交响应""" 100 | resource_id: str 101 | download_url: str 102 | 103 | 104 | class TaskCreateRspSchema(BaseModel): 105 | """任务创建响应""" 106 | resource: str 107 | result: str 108 | task_id: str # 任务id 109 | 110 | 111 | class ResultStateEnum(Enum): 112 | """任务状态枚举""" 113 | STOP = 0 # 未开始 114 | RUNING = 1 # 运行中 115 | ERROR = 3 # 错误 116 | COMPLETE = 4 # 完成 117 | 118 | 119 | class ResultRspSchema(BaseModel): 120 | """任务结果查询响应""" 121 | task_id: str # 任务id 122 | result: str # 结果数据-json 123 | remark: str # 任务状态详情 124 | state: ResultStateEnum # 任务状态 125 | 126 | def parse(self) -> ASRData: 127 | """解析结果数据""" 128 | return ASRData.parse_raw(self.result) 129 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Byte-compiled / optimized / DLL files 2 | __pycache__/ 3 | *.py[cod] 4 | *$py.class 5 | 6 | # C extensions 7 | *.so 8 | 9 | # Distribution / packaging 10 | .Python 11 | build/ 12 | develop-eggs/ 13 | dist/ 14 | downloads/ 15 | eggs/ 16 | .eggs/ 17 | lib/ 18 | lib64/ 19 | parts/ 20 | sdist/ 21 | var/ 22 | wheels/ 23 | share/python-wheels/ 24 | *.egg-info/ 25 | .installed.cfg 26 | *.egg 27 | MANIFEST 28 | 29 | # PyInstaller 30 | # Usually these files are written by a python script from a template 31 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 32 | *.manifest 33 | *.spec 34 | 35 | # Installer logs 36 | pip-log.txt 37 | pip-delete-this-directory.txt 38 | 39 | # Unit test / coverage reports 40 | htmlcov/ 41 | .tox/ 42 | .nox/ 43 | .coverage 44 | .coverage.* 45 | .cache 46 | nosetests.xml 47 | coverage.xml 48 | *.cover 49 | *.py,cover 50 | .hypothesis/ 51 | .pytest_cache/ 52 | cover/ 53 | 54 | # Translations 55 | *.mo 56 | *.pot 57 | 58 | # Django stuff: 59 | *.log 60 | local_settings.py 61 | db.sqlite3 62 | db.sqlite3-journal 63 | 64 | # Flask stuff: 65 | instance/ 66 | .webassets-cache 67 | 68 | # Scrapy stuff: 69 | .scrapy 70 | 71 | # Sphinx documentation 72 | docs/_build/ 73 | 74 | # PyBuilder 75 | .pybuilder/ 76 | target/ 77 | 78 | # Jupyter Notebook 79 | .ipynb_checkpoints 80 | 81 | # IPython 82 | profile_default/ 83 | ipython_config.py 84 | 85 | # pyenv 86 | # For a library or package, you might want to ignore these files since the code is 87 | # intended to run in multiple environments; otherwise, check them in: 88 | # .python-version 89 | 90 | # pipenv 91 | # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. 92 | # However, in case of collaboration, if having platform-specific dependencies or dependencies 93 | # having no cross-platform support, pipenv may install dependencies that don't work, or not 94 | # install all needed dependencies. 95 | #Pipfile.lock 96 | 97 | # poetry 98 | # Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control. 99 | # This is especially recommended for binary packages to ensure reproducibility, and is more 100 | # commonly ignored for libraries. 101 | # https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control 102 | #poetry.lock 103 | 104 | # pdm 105 | # Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control. 106 | #pdm.lock 107 | # pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it 108 | # in version control. 109 | # https://pdm.fming.dev/#use-with-ide 110 | .pdm.toml 111 | 112 | # PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm 113 | __pypackages__/ 114 | 115 | # Celery stuff 116 | celerybeat-schedule 117 | celerybeat.pid 118 | 119 | # SageMath parsed files 120 | *.sage.py 121 | 122 | # Environments 123 | src/.env 124 | .venv 125 | env/ 126 | venv/ 127 | ENV/ 128 | env.bak/ 129 | venv.bak/ 130 | 131 | # Spyder project settings 132 | .spyderproject 133 | .spyproject 134 | 135 | # Rope project settings 136 | .ropeproject 137 | 138 | # mkdocs documentation 139 | /site 140 | 141 | # mypy 142 | .mypy_cache/ 143 | .dmypy.json 144 | dmypy.json 145 | 146 | # Pyre type checker 147 | .pyre/ 148 | 149 | # pytype static type analyzer 150 | .pytype/ 151 | 152 | # Cython debug symbols 153 | cython_debug/ 154 | 155 | # PyCharm 156 | # JetBrains specific template is maintained in a separate JetBrains.gitignore that can 157 | # be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore 158 | # and can be added to the global gitignore or merged into this file. For a more nuclear 159 | # option (not recommended) you can uncomment the following to ignore the entire idea folder. 160 | #.idea/ 161 | 162 | *.xml 163 | *.iml 164 | .idea 165 | *.mp3 166 | *.m4s 167 | voice 168 | logs 169 | audio 170 | 171 | #examples 172 | -------------------------------------------------------------------------------- /src/langup/listener/bilibili.py: -------------------------------------------------------------------------------- 1 | import enum 2 | from typing import Optional, Type, List, Union 3 | 4 | from bilibili_api import Picture 5 | from bilibili_api.session import Event 6 | from pydantic import BaseModel 7 | 8 | from langup import api, base, config 9 | from langup.api.bilibili.video import Video 10 | from langup.base import MQ 11 | from langup.utils import vid_transform 12 | from langup.utils.utils import start_thread 13 | 14 | 15 | class SessionSchema(BaseModel): 16 | user_nickname: str 17 | source_content: str 18 | uri: str 19 | source_id: int 20 | bvid: str 21 | aid: int 22 | at_time: int 23 | 24 | 25 | class SessionAtListener(base.Listener): 26 | listener_sleep: int = 60 * 2 27 | newest_at_time: int = 0 28 | Schema: Type[SessionSchema] = SessionSchema 29 | 30 | async def _alisten(self): 31 | sessions = await api.bilibili.session.get_at(config.credential) 32 | items = sessions['items'] 33 | schema_list = [] 34 | for item in items[::-1]: 35 | at_type = item['item']['type'] 36 | if at_type != 'reply': 37 | continue 38 | at_time = item['at_time'] 39 | if at_time <= self.newest_at_time: 40 | continue 41 | user_nickname = item['user']['nickname'] 42 | source_content = item['item']['source_content'] 43 | uri = item['item']['uri'] 44 | source_id = item['item']['source_id'] 45 | bvid = "BV" + uri.split("BV")[1] 46 | aid = vid_transform.note_query_2_aid(uri) 47 | self.newest_at_time = at_time 48 | schema_list.append(self.Schema( 49 | user_nickname=user_nickname, 50 | source_content=source_content, 51 | uri=uri, 52 | source_id=source_id, 53 | bvid=bvid, 54 | aid=aid, 55 | at_time=at_time, 56 | )) 57 | return schema_list 58 | 59 | 60 | class LiveListener(base.Listener): 61 | room_id: int 62 | max_size: int = 20 63 | Schema: dict = {} # text type ... 64 | live_mq: Optional[MQ] = None 65 | 66 | def init(self, mq, listener_sleep=None): 67 | self.live_mq = base.SimpleMQ(maxsize=self.max_size) 68 | room = api.bilibili.live.BlLiveRoom(self.room_id, self.live_mq, config.credential) 69 | t = start_thread(room.connect) 70 | super().init(mq, listener_sleep) 71 | 72 | async def _alisten(self) -> dict: 73 | return self.live_mq.recv() 74 | 75 | 76 | class EventName(enum.Enum): 77 | """事件类型: 78 | + TEXT: 纯文字消息 79 | + PICTURE: 图片消息 80 | + WITHDRAW: 撤回消息 81 | + GROUPS_PICTURE: 应援团图片,但似乎不常触发,一般使用 PICTURE 即可 82 | + SHARE_VIDEO: 分享视频 83 | + NOTICE: 系统通知 84 | + PUSHED_VIDEO: UP主推送的视频 85 | + WELCOME: 新成员加入应援团欢迎 86 | """ 87 | TEXT = "1" 88 | PICTURE = "2" 89 | WITHDRAW = "5" 90 | GROUPS_PICTURE = "6" 91 | SHARE_VIDEO = "7" 92 | NOTICE = "10" 93 | PUSHED_VIDEO = "11" 94 | WELCOME = "306" 95 | 96 | 97 | class ChatEvent(BaseModel): 98 | # content: Union[str, int, Picture, Video] 99 | content: str 100 | sender_uid: int 101 | uid: int 102 | 103 | 104 | class ChatListener(base.Listener): 105 | event_name_list: List[EventName] 106 | 107 | Schema: Type[Event] = ChatEvent 108 | listener_sleep: int = 6 109 | max_size: Optional[int] = 0 110 | session_mq: Optional[MQ] = None 111 | 112 | def init(self, mq: MQ, listener_sleep: Optional[int] = 0): 113 | self.session_mq = base.SimpleMQ(maxsize=self.max_size) 114 | s = api.bilibili.session.ChatSession(credential=config.credential, mq=self.session_mq) 115 | s.register_handlers([event_name.value for event_name in self.event_name_list]) 116 | t = start_thread(s.connect) 117 | super().init(mq, listener_sleep) 118 | 119 | async def _alisten(self): 120 | event: Event = self.session_mq.recv() 121 | return ChatEvent( 122 | sender_uid=event.sender_uid, 123 | uid=event.uid, 124 | content=event.content 125 | ) 126 | -------------------------------------------------------------------------------- /src/langup/api/bcut_asr/__main__.py: -------------------------------------------------------------------------------- 1 | import logging 2 | import sys 3 | import time 4 | from argparse import ArgumentParser, FileType 5 | import ffmpeg 6 | from . import APIError, BcutASR, ResultStateEnum 7 | 8 | logging.basicConfig(format='%(asctime)s - [%(levelname)s] %(message)s', level=logging.INFO) 9 | 10 | INFILE_FMT = ('flac', 'aac', 'm4a', 'mp3', 'wav') 11 | OUTFILE_FMT = ('srt', 'json', 'lrc', 'txt') 12 | 13 | parser = ArgumentParser( 14 | prog='bcut-asr', 15 | description='必剪语音识别\n', 16 | epilog=f"支持输入音频格式: {', '.join(INFILE_FMT)} 支持自动调用ffmpeg提取视频伴音" 17 | ) 18 | parser.add_argument('-f', '--format', nargs='?', default='srt', choices=OUTFILE_FMT, help='输出字幕格式') 19 | parser.add_argument('input', type=FileType('rb'), help='输入媒体文件') 20 | parser.add_argument('output', nargs='?', type=FileType('w', encoding='utf8'), help='输出字幕文件, 可stdout') 21 | 22 | args = parser.parse_args() 23 | 24 | 25 | def ffmpeg_render(media_file: str) -> bytes: 26 | '提取视频伴音并转码为aac格式' 27 | out, err = (ffmpeg 28 | .input(media_file, v='warning') 29 | .output('pipe:', ac=1, format='adts') 30 | .run(capture_stdout=True) 31 | ) 32 | return out 33 | 34 | 35 | def main(): 36 | # 处理输入文件情况 37 | infile = args.input 38 | infile_name = infile.name 39 | if infile_name == '': 40 | logging.error('输入文件错误') 41 | sys.exit(-1) 42 | suffix = infile_name.rsplit('.', 1)[-1] 43 | if suffix in INFILE_FMT: 44 | infile_fmt = suffix 45 | infile_data = infile.read() 46 | else: 47 | # ffmpeg分离视频伴音 48 | logging.info('非标准音频文件, 尝试调用ffmpeg转码') 49 | try: 50 | infile_data = ffmpeg_render(infile_name) 51 | except ffmpeg.Error: 52 | logging.error('ffmpeg转码失败') 53 | sys.exit(-1) 54 | else: 55 | logging.info('ffmpeg转码完成') 56 | infile_fmt = 'aac' 57 | 58 | # 处理输出文件情况 59 | outfile = args.output 60 | if outfile is None: 61 | # 未指定输出文件,默认为文件名同输入,可以 -t 传参,默认str格式 62 | if args.format is not None: 63 | outfile_fmt = args.format 64 | else: 65 | outfile_fmt = 'srt' 66 | outfile_name = f"{infile_name.rsplit('.', 1)[-2]}.{outfile_fmt}" 67 | outfile = open(outfile_name, 'w', encoding='utf8') 68 | else: 69 | # 指定输出文件 70 | outfile_name = outfile.name 71 | if outfile.name == '': 72 | # stdout情况,可以 -t 传参,默认str格式 73 | if args.format is not None: 74 | outfile_fmt = args.format 75 | else: 76 | outfile_fmt = 'srt' 77 | else: 78 | suffix = outfile_name.rsplit('.', 1)[-1] 79 | if suffix in OUTFILE_FMT: 80 | outfile_fmt = suffix 81 | else: 82 | logging.error('输出格式错误') 83 | sys.exit(-1) 84 | 85 | # 开始执行转换逻辑 86 | asr = BcutASR() 87 | asr.set_data(raw_data=infile_data, data_fmt=infile_fmt) 88 | try: 89 | # 上传文件 90 | asr.upload() 91 | # 创建任务 92 | task_id = asr.create_task() 93 | while True: 94 | # 轮询检查任务状态 95 | task_resp = asr.result() 96 | if task_resp.state == ResultStateEnum.STOP: 97 | logging.info(f'等待识别开始') 98 | if task_resp.state == ResultStateEnum.RUNING: 99 | logging.info(f'识别中-{task_resp.remark}') 100 | if task_resp.state == ResultStateEnum.ERROR: 101 | logging.error(f'识别失败-{task_resp.remark}') 102 | sys.exit(-1) 103 | if task_resp.state == ResultStateEnum.COMPLETE: 104 | logging.info(f'识别成功') 105 | # 识别成功, 回读字幕数据 106 | result = task_resp.parse() 107 | break 108 | time.sleep(1.0) 109 | if not result.has_data(): 110 | logging.error('未识别到语音') 111 | sys.exit(-1) 112 | if outfile_fmt == 'srt': 113 | outfile.write(result.to_srt()) 114 | if outfile_fmt == 'lrc': 115 | outfile.write(result.to_lrc()) 116 | if outfile_fmt == 'json': 117 | outfile.write(result.json()) 118 | if outfile_fmt == 'txt': 119 | outfile.write(result.to_txt()) 120 | logging.info(f'转换成功: {outfile_name}') 121 | except APIError as err: 122 | logging.error(f'接口错误: {err.__str__()}') 123 | sys.exit(-1) 124 | 125 | 126 | if __name__ == '__main__': 127 | main() 128 | -------------------------------------------------------------------------------- /src/langup/utils/converts.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | import os.path 4 | import random 5 | from typing import Optional, Literal 6 | from typing import Union 7 | 8 | import tiktoken 9 | from speech_recognition import UnknownValueError 10 | 11 | from langup import config 12 | from langup.api.bcut_asr import get_audio_text_by_bcut 13 | from langup.api.bilibili.video import Video 14 | from langup.utils import consts 15 | 16 | # pip install SpeechRecognition 17 | import speech_recognition as sr 18 | 19 | 20 | class Audio2Text: 21 | @classmethod 22 | async def from_bilibili_video( 23 | cls, 24 | v: Video 25 | ): 26 | res = await v.get_subtitle_datalist() 27 | if res: 28 | return [item['content'] for item in res] 29 | else: 30 | # 部分视频没有字幕,先下载视频,使用api转文字 31 | path = f"{config.convert['audio_path']}{v.get_aid() or v.get_bvid()}" 32 | new_path = await v.download_audio(path) 33 | return cls.from_file_path(new_path) 34 | 35 | @classmethod 36 | def from_file_path(cls, path): 37 | return get_audio_text_by_bcut(path) 38 | 39 | @classmethod 40 | def from_raw_data(cls, raw_data, data_fmt): 41 | res = get_audio_text_by_bcut(raw_data=raw_data, data_fmt=data_fmt) 42 | if not res: 43 | raise UnknownValueError 44 | return res 45 | 46 | 47 | class Speech2Audio: 48 | cfg = config.convert['speech_rec'].copy() 49 | 50 | def __init__(self): 51 | 52 | """ 语音监听 """ 53 | self.adjust_for_ambient_noise = self.cfg.pop('adjust_for_ambient_noise') 54 | self.r = sr.Recognizer() 55 | for param_item in (self.cfg or {}).items(): 56 | setattr(self.r, *param_item) 57 | self.r.dynamic_energy_ratio = 2 58 | self.mic = sr.Microphone() 59 | 60 | def listen(self): 61 | with self.mic as source: 62 | if self.adjust_for_ambient_noise: self.r.adjust_for_ambient_noise(source) 63 | audio = self.r.listen(source) 64 | return audio 65 | 66 | 67 | class SummaryGenerator: 68 | encoding = tiktoken.get_encoding('cl100k_base') 69 | 70 | def __init__( 71 | self, 72 | limit_token: Union[int, str, None] = None, 73 | limit_length: Optional[int] = None, 74 | compress_mode: Literal['random', 'left'] = 'random' 75 | ): 76 | assert limit_token or limit_length, '请提供限制条件' 77 | if limit_token and isinstance(limit_token, str): 78 | limit_token = consts.model_token[limit_token] 79 | self.limit_token = limit_token and limit_token * 0.9 80 | self.limit_length = limit_length 81 | self.compress_mode = compress_mode 82 | 83 | def generate(self, content_list, join_char='\n') -> str: 84 | content = join_char.join(content_list) 85 | if self.limit_length and len(content) > self.limit_length: 86 | # 按长度压缩 87 | length = 0 88 | 89 | # random mode 90 | if self.compress_mode == 'random': 91 | index_list = list(range(len(content_list))) 92 | insert_index_list = [] 93 | random.shuffle(index_list) 94 | for index in index_list: 95 | c = content_list[index] 96 | length += len(c) 97 | if length > self.limit_length: 98 | break 99 | insert_index_list.append(index) 100 | insert_index_list.sort() 101 | content = join_char.join([content_list[index] for index in insert_index_list]) 102 | 103 | # left mode 104 | elif self.compress_mode == 'left': 105 | content = '' 106 | for c in content_list: 107 | length += len(c) 108 | if length > self.limit_length: 109 | break 110 | content += join_char + c 111 | 112 | elif self.limit_token and len(self.encoding.encode(content)) > self.limit_token: 113 | # 按token压缩 114 | token = 0 115 | 116 | # random mode 117 | if self.compress_mode == 'random': 118 | index_list = list(range(len(content_list))) 119 | insert_index_list = [] 120 | random.shuffle(index_list) 121 | for index in index_list: 122 | c = content_list[index] 123 | token += len(self.encoding.encode(c)) 124 | if token > self.limit_token: 125 | break 126 | insert_index_list.append(index) 127 | insert_index_list.sort() 128 | content = join_char.join([content_list[index] for index in insert_index_list]) 129 | 130 | # left mode 131 | elif self.compress_mode == 'left': 132 | content = '' 133 | for c in content_list: 134 | token += len(self.encoding.encode(c)) 135 | if token > self.limit_token: 136 | break 137 | content += join_char + c 138 | 139 | return content 140 | 141 | -------------------------------------------------------------------------------- /src/langup/utils/utils.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*-] 3 | import copy 4 | import functools 5 | import threading 6 | from asyncio import iscoroutinefunction 7 | from http.cookiejar import CookieJar 8 | from typing import Optional, Any, Literal, Callable 9 | import browser_cookie3 10 | from bilibili_api import sync 11 | 12 | from pydantic import BaseModel 13 | 14 | color_map = { 15 | "black": "30", 16 | "red": "31", 17 | "green": "32", 18 | "yellow": "33", 19 | "blue": "34", 20 | "magenta": "35", 21 | "cyan": "36", 22 | "white": "39" 23 | } 24 | 25 | style_map = { 26 | "normal": "0", 27 | "bold": "1", 28 | "underline": "4", 29 | "reverse": "7" 30 | } 31 | 32 | 33 | def singleton(cls): 34 | _instance = {} 35 | 36 | @functools.wraps(cls) 37 | def inner(*args, **kwargs): 38 | if cls not in _instance: 39 | _instance[cls] = cls(*args, **kwargs) 40 | return _instance[cls] 41 | return inner 42 | 43 | 44 | class DFA: 45 | def __init__(self, keyword_list: list): 46 | self.kw_list = keyword_list 47 | self.state_event_dict = self._generate_state_event_dict(keyword_list) 48 | 49 | def match(self, content: str): 50 | match_list = [] 51 | state_list = [] 52 | temp_match_list = [] 53 | 54 | for char_pos, char in enumerate(content): 55 | if char in self.state_event_dict: 56 | state_list.append(self.state_event_dict) 57 | temp_match_list.append({ 58 | "start": char_pos, 59 | "match": "" 60 | }) 61 | 62 | for index, state in enumerate(state_list): 63 | is_find = False 64 | state_char = None 65 | 66 | # 如果是 * 则匹配所有内容 67 | if "*" in state: 68 | state_list[index] = state["*"] 69 | state_char = state["*"] 70 | is_find = True 71 | 72 | if char in state: 73 | state_list[index] = state[char] 74 | state_char = state[char] 75 | is_find = True 76 | 77 | if is_find: 78 | temp_match_list[index]["match"] += char 79 | 80 | if state_char["is_end"]: 81 | match_list.append(copy.deepcopy(temp_match_list[index])) 82 | 83 | if len(state_char.keys()) == 1: 84 | state_list.pop(index) 85 | temp_match_list.pop(index) 86 | else: 87 | state_list.pop(index) 88 | temp_match_list.pop(index) 89 | 90 | return match_list 91 | 92 | @staticmethod 93 | def _generate_state_event_dict(keyword_list: list) -> dict: 94 | state_event_dict = {} 95 | 96 | for keyword in keyword_list: 97 | if not keyword: 98 | continue 99 | current_dict = state_event_dict 100 | length = len(keyword) 101 | 102 | for index, char in enumerate(keyword): 103 | if char not in current_dict: 104 | next_dict = {"is_end": False} 105 | current_dict[char] = next_dict 106 | else: 107 | next_dict = current_dict[char] 108 | current_dict = next_dict 109 | if index == length - 1: 110 | current_dict["is_end"] = True 111 | 112 | return state_event_dict 113 | 114 | 115 | class Record(BaseModel): 116 | """存档、日志""" 117 | listener_kwargs: Optional[Any] = None 118 | react_kwargs: Optional[dict] = None 119 | time_cost: Optional[str] = None 120 | created_time: Optional[str] = None 121 | 122 | 123 | def format_print(text: str, color: str = 'white', style: str = 'normal', end='\n'): 124 | 125 | color_code = color_map.get(color, "39") 126 | style_code = style_map.get(style, "0") 127 | 128 | print(f"\033[{style_code};{color_code}m{text}\033[0m", end=end) 129 | 130 | 131 | def get_list(item): 132 | if isinstance(item, list): 133 | return item 134 | else: 135 | return [item] 136 | 137 | 138 | def get_cookies( 139 | domain_name: str, 140 | browser: Literal[ 141 | 'chrome', 'chromium', 'opera', 'opera_gx', 'brave', 142 | 'edge', 'vivaldi', 'firefox', 'librewolf', 'safari', 'load' 143 | ] = 'load', 144 | key_lower=True 145 | ): 146 | cookie_dict = {} 147 | try: 148 | cj: CookieJar = getattr(browser_cookie3, browser)(domain_name=domain_name) 149 | for cookie in cj: 150 | name = cookie.name 151 | if key_lower: 152 | name = name.lower() 153 | cookie_dict[name] = cookie.value 154 | except PermissionError as e: 155 | raise PermissionError("""浏览器文件被占用,遇到此错误请尝试: 任务管理器彻底关闭进程""") 156 | return cookie_dict 157 | 158 | 159 | def async_wrapper(fun): 160 | """带参数的协程函数变成coroutine对象""" 161 | @functools.wraps(fun) 162 | async def wrap(*args, **kwargs): 163 | await fun(*args, **kwargs) 164 | return wrap 165 | 166 | 167 | def start_thread(job: Callable): 168 | """启动线程""" 169 | if iscoroutinefunction(job): 170 | sync_job = lambda: sync(job()) 171 | else: 172 | sync_job = job 173 | t = threading.Thread(target=sync_job) 174 | t.start() 175 | return t -------------------------------------------------------------------------------- /src/langup/base.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | import abc 4 | import asyncio 5 | import queue 6 | 7 | import time 8 | from asyncio import iscoroutine 9 | from logging import Logger 10 | from typing import List, Optional, Callable, Union, Any, Type 11 | 12 | from bilibili_api import sync 13 | from langchain.chat_models import ChatOpenAI 14 | from pydantic import BaseModel, Field, ConfigDict 15 | 16 | from langup import config, BrainType 17 | from langup.brain.chains.llm import get_llm_chain 18 | from langup.utils import mixins 19 | from langup.utils.utils import get_list, start_thread 20 | 21 | 22 | class MQ(abc.ABC): 23 | """Listener和Uploader通信""" 24 | 25 | @abc.abstractmethod 26 | def send(self, schema): 27 | ... 28 | 29 | @abc.abstractmethod 30 | def recv(self) -> Any: 31 | ... 32 | 33 | @abc.abstractmethod 34 | def empty(self): 35 | return 36 | 37 | 38 | class SimpleMQ(queue.Queue, MQ): 39 | 40 | def recv(self) -> Union[BaseModel, dict]: 41 | return self.get() 42 | 43 | def send(self, schema): 44 | # 设置maxsize淘汰旧消息 45 | if self.maxsize != 0 and self.qsize() == self.maxsize: 46 | self.get() 47 | self.put(schema) 48 | 49 | 50 | class Listener(BaseModel, abc.ABC): 51 | """监听api 通知绑定消息队列""" 52 | listener_sleep: int = 5 53 | Schema: Any = None 54 | mq_list: List[MQ] = [] 55 | middlewares: Optional[List[Callable]] = [] 56 | 57 | def init(self, mq: MQ, listener_sleep: Optional[int] = None): 58 | if listener_sleep is not None: self.listener_sleep = listener_sleep 59 | self.mq_list.append(mq) 60 | 61 | @abc.abstractmethod 62 | async def _alisten(self): 63 | return 64 | 65 | async def alisten(self): 66 | while 1: 67 | schema = await self._alisten() 68 | # 链式处理引用 69 | for mid in self.middlewares: 70 | mid(schema) 71 | if not schema: 72 | continue 73 | self.notify(schema) 74 | await asyncio.sleep(self.listener_sleep) 75 | 76 | def notify(self, schema): 77 | # pprint(schema) 78 | # 通知所有uploader 79 | for mq in self.mq_list: 80 | mq.send(schema) 81 | 82 | class Config: 83 | arbitrary_types_allowed = True 84 | 85 | 86 | class Reaction(BaseModel, abc.ABC): 87 | """对llm结果做出回应""" 88 | block: bool = True 89 | 90 | @abc.abstractmethod 91 | async def areact(self): 92 | ... 93 | 94 | 95 | 96 | class LLM(BaseModel): 97 | """ 98 | :param system: 人设 99 | :param model_name: gpt model 100 | :param openai_api_key: openai秘钥 101 | :param openai_proxy: http代理 102 | :param openai_api_base: openai endpoint 103 | :param temperature: gpt温度 104 | :param max_tokens: gpt输出长度 105 | :param chat_model_kwargs: langchain chatModel额外配置参数 106 | :param llm_chain_kwargs: langchain chatChain额外配置参数 107 | """ 108 | # 人设 109 | system: str = Field(default="You are a Bilibili UP") 110 | # llm配置 111 | model_name: str = Field(default="gpt-3.5-turbo", alias="model_name") 112 | openai_api_key: Optional[str] = None # openai秘钥 113 | openai_proxy: Optional[str] = None # http代理 114 | openai_api_base: Optional[str] = None # openai endpoint 115 | temperature: Optional[float] = 0.7 # gpt温度 116 | max_tokens: Optional[int] = None # gpt输出长度 117 | chat_model_kwargs: Optional[dict] = {} # langchain chatModel额外配置参数 118 | llm_chain_kwargs: Optional[dict] = None # langchain chatChain额外配置参数 119 | 120 | def get_brain(self): 121 | self.chat_model_kwargs.update( 122 | self.model_dump(include={ 123 | 'model_name', 'openai_api_key', 'openai_proxy', 'openai_api_base', 'temperature', 'max_tokens' 124 | }) 125 | ) 126 | self.chat_model_kwargs['openai_api_key'] = self.chat_model_kwargs['openai_api_key'] or config.openai_api_key 127 | chain = get_llm_chain( 128 | system=self.system, 129 | llm=ChatOpenAI( 130 | max_retries=2, 131 | request_timeout=60, 132 | **self.chat_model_kwargs or {}, 133 | ), 134 | llm_chain_kwargs=self.llm_chain_kwargs 135 | ) 136 | return chain 137 | 138 | class Config: 139 | protected_namespaces = () 140 | 141 | 142 | class Uploader( 143 | abc.ABC, 144 | LLM, 145 | mixins.ConfigImport, 146 | mixins.Logger, 147 | mixins.InitMixin, 148 | mixins.Looper 149 | ): 150 | """ 151 | :param listeners: 感知 152 | :param concurrent_num: 并发数 153 | :param up_sleep: uploader 运行间隔时间 154 | :param listener_sleep: listener 运行间隔时间 155 | :param brain: 含有run方法的类 156 | :param mq: 通信队列 157 | """ 158 | up_sleep: int = 1 # 运行间隔时间 159 | concurrent_num: int = 1 # 并发数 160 | listener_sleep: Optional[int] = None # 运行间隔时间 161 | 162 | mq: MQ = Field(default_factory=SimpleMQ) 163 | logger: Optional[Logger] = None 164 | listeners: List[Listener] = [] 165 | brain: Union[BrainType, None] = None 166 | 167 | def init(self): 168 | self.init_config() 169 | chain = self.get_brain() 170 | self.brain = chain 171 | self.listener_sleep = None 172 | self.listeners = self.listeners + self.get_listeners() 173 | self.prepare() 174 | 175 | @abc.abstractmethod 176 | def execute_sop(self, schema) -> Union[Reaction, List[Reaction]]: ... 177 | 178 | def get_listeners(self) -> List[Listener]: 179 | return [] 180 | 181 | def prepare(self): 182 | pass 183 | 184 | def callback(self): 185 | pass 186 | 187 | class Config: 188 | arbitrary_types_allowed = True -------------------------------------------------------------------------------- /src/langup/utils/mixins.py: -------------------------------------------------------------------------------- 1 | import asyncio 2 | import functools 3 | import json 4 | import os 5 | import threading 6 | import time 7 | from asyncio import iscoroutine 8 | from datetime import datetime 9 | 10 | import bilibili_api 11 | import openai 12 | from bilibili_api import Credential 13 | from dotenv import load_dotenv 14 | from pydantic import BaseModel 15 | 16 | from langup import config 17 | from langup.utils import consts 18 | from langup.utils.logger import get_logging_logger 19 | from langup.utils.utils import Record, format_print, get_list, start_thread 20 | 21 | _is_init_config = False 22 | 23 | 24 | class ConfigImport(BaseModel): 25 | 26 | @classmethod 27 | def from_json_file(cls, json_path): 28 | json_data = json.loads(fp=json_path, encoding='utf-8') 29 | up = cls(**json_data) 30 | return up 31 | 32 | 33 | class InitMixin: 34 | """初始化、检查""" 35 | __init_lock = threading.Lock() 36 | 37 | def check(self): 38 | assert config.openai_api_key, '请提供api_key' 39 | # 检查网络环境 40 | if config.test_net: 41 | # self.format_print('\r检查网络环境中...') 42 | assert self.test_net(), '当前网络环境不能访问openai,请检查!' 43 | 44 | def test_net(self): 45 | requestor, url = openai.Model._ListableAPIResource__prepare_list_requestor() 46 | response, _, api_key = requestor.request( 47 | "get", url, None, None, request_timeout=10 48 | ) 49 | return response 50 | 51 | def init_config(self): 52 | with self.__init_lock: 53 | global _is_init_config 54 | if _is_init_config is False: 55 | self.__init_config() 56 | _is_init_config = True 57 | 58 | def __init_config(self: 'base.Uploader'): 59 | """只执行一次""" 60 | from langup import config 61 | self.logger = get_logging_logger(file_name=self.__class__.__name__) 62 | # 环境变量读取 63 | is_load = load_dotenv(verbose=True) 64 | print(f'读取.env文件变量:{str(is_load)}') 65 | credential = Credential( 66 | sessdata=os.environ.get('sessdata'), 67 | bili_jct=os.environ.get('bili_jct'), 68 | buvid3=os.environ.get('buvid3'), 69 | dedeuserid=os.environ.get('dedeuserid'), 70 | ac_time_value=os.environ.get('ac_time_value'), 71 | ) 72 | if credential.sessdata and credential.buvid3: 73 | config.credential = credential 74 | 75 | import openai # 环境变量加载好后再导入 76 | # 路径配置 77 | for path in (config.tts['voice_path'], config.log['file_path'], config.convert['audio_path']): 78 | path = config.work_dir + path 79 | os.makedirs(path, exist_ok=True) 80 | config.tts['voice_path'] = config.work_dir + config.tts['voice_path'] 81 | config.log['file_path'] = config.work_dir + config.log['file_path'] 82 | config.convert['audio_path'] = config.work_dir + config.convert['audio_path'] 83 | # 代理配置 84 | if config.proxy: 85 | os.environ['HTTPS_PORXY'] = config.proxy 86 | os.environ['HTTP_PORXY'] = config.proxy 87 | bilibili_api.settings.proxy = config.proxy 88 | if proxy := (config.proxy or self.openai_proxy): 89 | openai.proxy = proxy 90 | # key 配置 91 | config.openai_api_key = config.openai_api_key or self.openai_api_key or openai.api_key or os.environ.get('OPENAI_API_KEY') 92 | openai.api_key = config.openai_api_key 93 | self.check() 94 | if config.welcome_tip: 95 | format_print(consts.WELCOME, color='green') 96 | 97 | 98 | class Logger: 99 | 100 | @functools.cached_property 101 | def record_path(self): 102 | return f"{config.log['file_path']}{self.__class__.__name__}Record.jsonl" 103 | 104 | def record(self, listener_kwargs, time_cost, react_kwargs): 105 | rcd = Record( 106 | listener_kwargs=listener_kwargs, 107 | time_cost=time_cost, 108 | created_time=str(datetime.now()), 109 | react_kwargs=react_kwargs 110 | ) 111 | path = self.record_path 112 | with open(path, 'a', encoding='utf-8') as file: 113 | line = json.dumps(rcd.model_dump(), ensure_ascii=False) + '\n' 114 | file.write(line) 115 | # with open(path, 'a', encoding='utf-8') as f: 116 | # f.write(json.dumps(rcd.model_dump(), indent=4) + '\n') 117 | self.logger.info(f"完成一轮回应:{rcd.model_dump()}") 118 | 119 | def query(self): 120 | if not os.path.exists(self.record_path): 121 | return [] 122 | with open(self.record_path, 'r', encoding='utf-8') as f: 123 | try: 124 | data_list = [json.loads(line) for line in f] 125 | return data_list 126 | except Exception as e: 127 | raise Exception(f'Record文件:{self.record_path}序列化失败,请确认是否手动修修改过\n{e}') 128 | 129 | 130 | class Looper: 131 | 132 | async def wait(self: 'base.Uploader'): 133 | while 1: 134 | schema = self.mq.recv() 135 | t0 = time.time() 136 | if not isinstance(schema, list): 137 | schema_list = [schema] 138 | else: 139 | schema_list = schema 140 | for schema in schema_list: 141 | self.logger.debug('execute_sop') 142 | res = self.execute_sop(schema) 143 | reactions = await res if iscoroutine(res) else res 144 | # execute_sop 返回空代表过滤 145 | if reactions is None: 146 | continue 147 | await self.handle_reaction(t0, schema, reactions) 148 | 149 | async def handle_reaction(self: 'base.Uploader', t0, schema, reactions): 150 | reaction_instance_list = get_list(reactions) 151 | react_kwargs = {} 152 | task_list = [] 153 | for reaction in reaction_instance_list: 154 | react_kwargs.update(reaction.model_dump()) 155 | if reaction.block is True: 156 | task_list.append(asyncio.create_task(reaction.areact())) 157 | else: 158 | start_thread(reaction.areact) 159 | self.logger.debug('run task_list') 160 | await asyncio.gather(*task_list) 161 | if config.log['handlers']: 162 | self.record( 163 | listener_kwargs=schema.model_dump() if isinstance(schema, BaseModel) else schema, 164 | time_cost=str(time.time() - t0).split('.')[0], 165 | react_kwargs=react_kwargs 166 | ) 167 | self.logger.debug('callback') 168 | self.callback() 169 | await asyncio.sleep(self.up_sleep) 170 | 171 | def loop(self: 'base.Uploader', block=True): 172 | self.init() 173 | threads = [] 174 | for listener in self.listeners: 175 | listener.init(mq=self.mq, listener_sleep=self.listener_sleep) 176 | threads.append(start_thread(listener.alisten)) 177 | 178 | for _ in range(self.concurrent_num): 179 | threads.append(start_thread(self.wait)) 180 | if block: 181 | [t.join() for t in threads] 182 | return threads -------------------------------------------------------------------------------- /src/langup/api/bcut_asr/__init__.py: -------------------------------------------------------------------------------- 1 | """ 2 | 该模块来源于:https://github.com/SocialSisterYi/bcut-asr 3 | 做了python3.8的适配 4 | """ 5 | 6 | # import logging 7 | import time 8 | from os import PathLike 9 | from pathlib import Path 10 | from typing import Literal, Optional, List, Union 11 | import urllib3 12 | import requests 13 | from .orm import (ResourceCompleteRspSchema, ResourceCreateRspSchema, 14 | ResultRspSchema, ResultStateEnum, TaskCreateRspSchema) 15 | 16 | urllib3.disable_warnings() 17 | 18 | __version__ = '0.0.2' 19 | 20 | API_REQ_UPLOAD = 'https://member.bilibili.com/x/bcut/rubick-interface/resource/create' # 申请上传 21 | API_COMMIT_UPLOAD = 'https://member.bilibili.com/x/bcut/rubick-interface/resource/create/complete' # 提交上传 22 | API_CREATE_TASK = 'https://member.bilibili.com/x/bcut/rubick-interface/task' # 创建任务 23 | API_QUERY_RESULT = 'https://member.bilibili.com/x/bcut/rubick-interface/task/result' # 查询结果 24 | 25 | SUPPORT_SOUND_FORMAT = Literal['flac', 'aac', 'm4a', 'mp3', 'wav'] 26 | 27 | 28 | class APIError(Exception): 29 | '接口调用错误' 30 | 31 | def __init__(self, code, msg) -> None: 32 | self.code = code 33 | self.msg = msg 34 | super().__init__() 35 | 36 | def __str__(self) -> str: 37 | return f'{self.code}:{self.msg}' 38 | 39 | 40 | class BcutASR: 41 | '必剪 语音识别接口' 42 | session: requests.Session 43 | sound_name: str 44 | sound_bin: bytes 45 | sound_fmt: SUPPORT_SOUND_FORMAT 46 | __in_boss_key: str 47 | __resource_id: str 48 | __upload_id: str 49 | __upload_urls: List[str] 50 | __per_size: int 51 | __clips: int 52 | __etags: List[str] 53 | __download_url: str 54 | task_id: str 55 | 56 | def __init__(self, file: Optional[Union[str, PathLike]] = None) -> None: 57 | self.session = requests.Session() 58 | # 取消验证证书 59 | self.session.verify = False 60 | self.session.trust_env = False 61 | self.task_id = None 62 | self.__etags = [] 63 | if file: 64 | self.set_data(file) 65 | 66 | def set_data(self, 67 | file: Optional[Union[str, PathLike]] = None, 68 | raw_data: Optional[bytes] = None, 69 | data_fmt: Optional[SUPPORT_SOUND_FORMAT] = None 70 | ) -> None: 71 | '设置欲识别的数据' 72 | if file: 73 | if not isinstance(file, (str, PathLike)): 74 | raise TypeError('unknow file ptr') 75 | # 文件类 76 | file = Path(file) 77 | self.sound_bin = open(file, 'rb').read() 78 | suffix = data_fmt or file.suffix[1:] 79 | self.sound_name = file.name 80 | elif raw_data: 81 | # bytes类 82 | self.sound_bin = raw_data 83 | suffix = data_fmt 84 | self.sound_name = f'{int(time.time())}.{suffix}' 85 | else: 86 | raise ValueError('none set data') 87 | if suffix not in ['flac', 'aac', 'm4a', 'mp3', 'wav']: 88 | raise TypeError('format is not support') 89 | self.sound_fmt = suffix 90 | # logging.info(f'加载文件成功: {self.sound_name}') 91 | 92 | def upload(self) -> None: 93 | '申请上传' 94 | if not self.sound_bin or not self.sound_fmt: 95 | raise ValueError('none set data') 96 | resp = self.session.post(API_REQ_UPLOAD, data={ 97 | 'type': 2, 98 | 'name': self.sound_name, 99 | 'size': len(self.sound_bin), 100 | 'resource_file_type': self.sound_fmt, 101 | 'model_id': 7 102 | }) 103 | resp.raise_for_status() 104 | resp = resp.json() 105 | code = resp['code'] 106 | if code: 107 | raise APIError(code, resp['message']) 108 | resp_data = ResourceCreateRspSchema.parse_obj(resp['data']) 109 | self.__in_boss_key = resp_data.in_boss_key 110 | self.__resource_id = resp_data.resource_id 111 | self.__upload_id = resp_data.upload_id 112 | self.__upload_urls = resp_data.upload_urls 113 | self.__per_size = resp_data.per_size 114 | self.__clips = len(resp_data.upload_urls) 115 | # logging.info(f'申请上传成功, 总计大小{resp_data.size // 1024}KB, {self.__clips}分片, 分片大小{resp_data.per_size // 1024}KB: {self.__in_boss_key}') 116 | self.__upload_part() 117 | self.__commit_upload() 118 | 119 | def __upload_part(self) -> None: 120 | '上传音频数据' 121 | for clip in range(self.__clips): 122 | start_range = clip * self.__per_size 123 | end_range = (clip + 1) * self.__per_size 124 | # logging.info(f'开始上传分片{clip}: {start_range}-{end_range}') 125 | resp = self.session.put(self.__upload_urls[clip], 126 | data=self.sound_bin[start_range:end_range], 127 | ) 128 | resp.raise_for_status() 129 | etag = resp.headers.get('Etag') 130 | self.__etags.append(etag) 131 | # logging.info(f'分片{clip}上传成功: {etag}') 132 | 133 | def __commit_upload(self) -> None: 134 | '提交上传数据' 135 | resp = self.session.post(API_COMMIT_UPLOAD, data={ 136 | 'in_boss_key': self.__in_boss_key, 137 | 'resource_id': self.__resource_id, 138 | 'etags': ','.join(self.__etags), 139 | 'upload_id': self.__upload_id, 140 | 'model_id': 7 141 | }) 142 | resp.raise_for_status() 143 | resp = resp.json() 144 | code = resp['code'] 145 | if code: 146 | raise APIError(code, resp['message']) 147 | resp_data = ResourceCompleteRspSchema.parse_obj(resp['data']) 148 | self.__download_url = resp_data.download_url 149 | # logging.info(f'提交成功') 150 | 151 | def create_task(self) -> str: 152 | '开始创建转换任务' 153 | resp = self.session.post(API_CREATE_TASK, json={ 154 | 'resource': self.__download_url, 155 | 'model_id': '7' 156 | }) 157 | resp.raise_for_status() 158 | resp = resp.json() 159 | code = resp['code'] 160 | if code: 161 | raise APIError(code, resp['message']) 162 | resp_data = TaskCreateRspSchema.parse_obj(resp['data']) 163 | self.task_id = resp_data.task_id 164 | # logging.info(f'任务已创建: {self.task_id}') 165 | return self.task_id 166 | 167 | def result(self, task_id: Optional[str] = None) -> ResultRspSchema: 168 | '查询转换结果' 169 | resp = self.session.get(API_QUERY_RESULT, params={ 170 | 'model_id': 7, 171 | 'task_id': task_id or self.task_id 172 | }) 173 | resp.raise_for_status() 174 | resp = resp.json() 175 | code = resp['code'] 176 | if code: 177 | raise APIError(code, resp['message']) 178 | return ResultRspSchema.parse_obj(resp['data']) 179 | 180 | 181 | def get_audio_text_by_bcut(file_path=None, raw_data=None, data_fmt=None): 182 | assert file_path or (raw_data and data_fmt), '至少提供一个参数' 183 | 184 | asr = BcutASR(file=file_path) 185 | if raw_data: asr.set_data(raw_data=raw_data, data_fmt=data_fmt) 186 | asr.upload() # 上传文件 187 | asr.create_task() # 创建任务 188 | 189 | # 轮询检查结果 190 | while True: 191 | result = asr.result() 192 | # 判断识别成功 193 | if result.state == ResultStateEnum.COMPLETE: 194 | break 195 | 196 | # 解析字幕内容 197 | subtitle = result.parse() 198 | # 判断是否存在字幕 199 | if subtitle.has_data(): 200 | # 输出srt格式 201 | return [s.transcript for s in subtitle.utterances] 202 | return None 203 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | #
Langup 2 |

3 | llm + bot 4 |
5 |
6 | 🚀AGI时代通用机器人🚀 7 |

8 | 9 | ## 安装 10 | 环境:python>=3.8 11 | 12 | - 方式一 13 | ```shell 14 | pip install langup==0.0.10 15 | ``` 16 | - 方式二(建议使用python 虚拟环境) 17 | ```shell 18 | git clone https://github.com/jiran214/langup-ai.git 19 | cd langup-ai/ 20 | python -m pip install –upgrade pip 21 | python -m pip install -r requirements.txt 22 | ``` 23 | 24 | 25 | ## 快速开始 26 | - 安装完成后,新建.py文件参考以下代码(注意:采用方式二安装时,可以在src/下新建) 27 | - 所有代码示例 src/examples可见 28 | 29 |
30 | Bilibili 直播数字人 31 |
32 | 33 | ```python 34 | from langup import config, VtuBer 35 | 36 | # config.proxy = 'http://127.0.0.1:7890' 37 | up = VtuBer( 38 | system="""角色:你现在是一位在哔哩哔哩网站的主播,你很熟悉哔哩哔哩上的网友发言习惯和平台调性,擅长与年轻人打交道。 39 | 背景:通过直播中和用户弹幕的互动,产出有趣的对话,以此吸引更多人来观看直播并关注你。 40 | 任务:你在直播过程中会对每一位直播间用户发的弹幕进行回答,但是要以“杠精”的思维去回答,你会怒怼这些弹幕,不放过每一条弹幕,每次回答字数不能超过100字。""", # 人设 41 | room_id=00000, # Bilibili房间号 42 | openai_api_key="""xxx""", # 同上 43 | is_filter=True, # 是否开启过滤 44 | extra_ban_words=[], # 额外的违禁词 45 | concurrent_num=2 # 控制回复弹幕速度 46 | 47 | # credential 参数说明 48 | # 方式一: credential为空,从工作目录/.env文件读取credential 49 | # 方式二: 直接传入 https://nemo2011.github.io/bilibili-api/#/get-credential 50 | # credential={"sessdata": 'xxx', "buvid3": 'xxx', "bili_jct": 'xxx'} 51 | # 方式三: 从浏览器资源读取 52 | # browser='edge' 53 | ) 54 | up.loop() 55 | ``` 56 | 57 | ```text 58 | """ 59 | bilibili直播数字人参数: 60 | :param room_id: bilibili直播房间号 61 | :param credential: bilibili 账号认证 62 | :param is_filter: 是否开启过滤 63 | :param user_input: 是否开启终端输入 64 | :param extra_ban_words: 额外的违禁词 65 | 66 | ...见更多配置 67 | """ 68 | ``` 69 | 70 |
71 | 72 |
73 | 视频@回复机器人 74 |
75 | 76 | ```python 77 | from langup import config, VideoCommentUP 78 | 79 | # config.proxy = 'http://127.0.0.1:7890' 80 | up = VideoCommentUP( 81 | up_sleep=10, # 生成回复间隔事件 82 | listener_sleep=60 * 2, # 2分钟获取一次@消息 83 | system="你是一个会评论视频B站用户,请根据视频内容做出总结、评论", 84 | signals=['总结一下'], 85 | openai_api_key='xxx', 86 | model_name='gpt-3.5-turbo', 87 | 88 | # credential 参数说明 89 | # 方式一: credential为空,从工作目录/.env文件读取credential 90 | # 方式二: 直接传入 https://nemo2011.github.io/bilibili-api/#/get-credential 91 | # credential={"sessdata": 'xxx', "buvid3": 'xxx', "bili_jct": 'xxx'} 92 | # 方式三: 自动从浏览器资源读取 93 | # browser='edge' 94 | ) 95 | up.loop() 96 | ``` 97 | 98 | ```text 99 | """ 100 | 视频下at信息回复机器人 101 | :param credential: bilibili认证 102 | :param model_name: openai MODEL 103 | :param signals: at暗号列表 (注意:B站会过滤一些词) 104 | :param limit_video_seconds: 过滤视频长度 105 | :param limit_token: 请求GPT token限制(默认为model name) 106 | :param limit_length: 请求GPT 字符串长度限制 107 | :param compress_mode: 请求GPT 压缩过长的视频文字的方式 108 | - random:随机跳跃筛选 109 | - left:从左到右 110 | 111 | :param up_sleep: 每次回复的间隔运行时间(秒) 112 | :param listener_sleep: listener 每次读取@消息的间隔运行时间(秒) 113 | ...见更多配置 114 | """ 115 | ``` 116 |
117 | 118 |
119 | B站私信Bot 120 |
121 | 122 | ```python 123 | from langup import ChatUP, Event 124 | 125 | 126 | # bilibili cookie 通过浏览器edge提取,apikey从.env读取 127 | ChatUP( 128 | system='你是一位聊天AI助手', 129 | # event_name_list 订阅消息列表 130 | event_name_list=[Event.TEXT], 131 | # credential 参数说明 132 | # 方式一: credential为空,从工作目录/.env文件读取credential 133 | # 方式二: 直接传入 https://nemo2011.github.io/bilibili-api/#/get-credential 134 | # credential={"sessdata": 'xxx', "buvid3": 'xxx', "bili_jct": 'xxx'} 135 | # 方式三: 自动从浏览器资源读取 136 | # browser='load' 137 | ).loop() 138 | ``` 139 |
140 | 141 |
142 | 实时语音交互助手 143 |
144 | 145 | ```python 146 | from langup import UserInputReplyUP, config 147 | 148 | config.proxy = 'http://127.0.0.1:7890' 149 | # config.openai_api_key = 'xxx' or 创建.env文件 OPENAI_API_KEY=xxx 150 | 151 | # 语音实时识别回复 152 | # 修改语音识别模块配置 config.convert['speech_rec'] 153 | UserInputReplyUP(system='你是一位AI助手', listen='speech').loop() 154 | ``` 155 |
156 | 157 |
158 | 终端交互助手 159 |
160 | 161 | ```python 162 | from langup import UserInputReplyUP, config 163 | 164 | # config.proxy = 'http://127.0.0.1:7890' 165 | # config.openai_api_key = 'xxx' or 创建.env文件 OPENAI_API_KEY=xxx 166 | 167 | # 终端回复 168 | UserInputReplyUP(system='你是一位AI助手', listen='console').loop() 169 | ``` 170 |
171 | 172 |
173 | 更多配置(可忽略) 174 |
175 | 176 | ```text 177 | """ 178 | Uploader 所有公共参数: 179 | :param listeners: 感知 180 | :param concurrent_num: 并发数 181 | :param up_sleep: uploader 间隔运行时间 182 | :param listener_sleep: listener 间隔运行时间 183 | :param system: 人设 184 | 185 | :param openai_api_key: openai秘钥 186 | :param openai_proxy: http代理 187 | :param openai_api_base: openai endpoint 188 | :param temperature: gpt温度 189 | :param max_tokens: gpt输出长度 190 | :param chat_model_kwargs: langchain chatModel额外配置参数 191 | :param llm_chain_kwargs: langchain chatChain额外配置参数 192 | 193 | :param brain: 含有run方法的类 194 | :param mq: 通信队列 195 | """ 196 | ``` 197 | 198 | 全局配置文件: 199 | ```python 200 | """ 201 | langup/config.py 202 | 修改方式: 203 | form langup import config 204 | config.xxx = xxx 205 | """ 206 | import os 207 | from typing import Union 208 | 209 | credential: Union['Credential', None] = None 210 | work_dir = './' 211 | 212 | tts = { 213 | "voice": "zh-CN-XiaoyiNeural", 214 | "rate": "+0%", 215 | "volume": "+0%", 216 | "voice_path": 'voice/' 217 | } 218 | 219 | log = { 220 | "handlers": ["console"], # console打印, file文件存储 221 | "file_path": "logs/" 222 | } 223 | 224 | convert = { 225 | "audio_path": "audio/" 226 | } 227 | 228 | root = os.path.dirname(__file__) 229 | openai_api_key = None # sk-... 230 | openai_api_base = None # https://{your_domain}/v1 231 | proxy = None # 代理 232 | debug = True 233 | ``` 234 |
235 | 更多机器人开发中... 236 |
237 | 238 | ## 注意事项 239 | - api_key可自动从环境变量获取 240 | - 国内环境需要设置代理或者openai_api_base 推荐config.proxy='xxx'全局设置,避免设置局部代理导致其它服务不可用 241 | - Bilibili UP都需要 认证信息,获取使用方式如下 242 | - 登录Bilibili 从浏览器获取cookie:https://nemo2011.github.io/bilibili-api/#/get-credential 243 | - 作为字典参数"credential"传入,或者api_key和Bilibili cookie等信息可以写到.env文件中,程序会隐式读取,参考src/.env.temple 244 | - 10.26更新,不需要手动获取,只要你浏览器最近登录过,程序会自动读取浏览器数据 245 | (可以优先尝试,注意windows用户需要完全关闭浏览器进程,否则会出现资源占用情况) 246 | 247 | ## 架构设计 248 | 部分模块待实现 249 | 250 | 251 | ## TodoList 252 | - Uploader 253 | - Vtuber 254 | - [X] 基本功能 255 | - [X] 违禁词 256 | - [X] 并发 257 | - VideoCommentUP 258 | - [X] 基本功能 259 | - UserInputUP 260 | - [X] 基本功能 261 | - [X] 语音识别 262 | - Listener 263 | - [X] 语音识别 264 | - [ ] 微信 265 | - [ ] Bilibili 私信 266 | - [ ] QQ 267 | - Reaction 268 | - 其它 269 | - 日志记录 270 | - pydantic重构部分类 271 | - 认证信息自动获取 272 | 273 | ## 提示 274 |
275 | 国内访问ChatGPT方式:Vercel反向代理openai api 276 | 具体见 https://github.com/jiran214/proxy 277 |
278 | Vercel 279 |
280 |
281 |
282 | 283 | ## 最后 284 | - 感谢项目依赖的开源 285 | - langchain https://github.com/langchain-ai/langchain 286 | - Bilibili API https://github.com/nemo2011/bilibili-api 287 | - 必剪API https://github.com/SocialSisterYi/bcut-asr 288 | - 禁止滥用本库,使用本库请遵守各平台安全规范,可通过提示词、过滤输入等方式 289 | - 示例代码仅供参考,尤其是提示词编写没有必要一样 290 | - 代码可能异常,对于改进和报错问题可以在写在issues -------------------------------------------------------------------------------- /src/langup/uploader/bilibili.py: -------------------------------------------------------------------------------- 1 | from typing import Optional, Union, Literal, List, Any 2 | 3 | from bilibili_api import Credential, sync 4 | from bilibili_api.session import Event 5 | from pydantic import Field, BaseModel 6 | 7 | from langup import base, config, listener, BrainType 8 | from langup import reaction 9 | from langup.api.bilibili.video import Video 10 | from langup.base import Reaction, Listener 11 | from langup.listener.bilibili import EventName, ChatEvent 12 | from langup.utils import enums, filters, converts, utils 13 | from langup.utils.utils import Record 14 | 15 | 16 | class Auth(BaseModel): 17 | credential: Optional[dict] = {} 18 | browser: Optional[Literal[ 19 | 'chrome', 'chromium', 'opera', 'opera_gx', 'brave', 20 | 'edge', 'vivaldi', 'firefox', 'librewolf', 'safari', 'load' 21 | ]] = Field(default='load', description='获取cookie的浏览器,默认全部检查一遍,建议手动设置') 22 | 23 | def get_auth(self): 24 | # cookie获取 25 | if not (self.credential or config.credential): 26 | print(f'未发现credential-准备读取浏览器自动获取Cookie...') 27 | cookie_dict = utils.get_cookies(domain_name='bilibili.com', browser=self.browser) 28 | self.credential = cookie_dict 29 | # auth覆盖 30 | attrs = ['sessdata', 'bili_jct', 'buvid3', 'dedeuserid', 'ac_time_value'] 31 | config.credential = Credential(**{attr: self.credential.get(attr, None) for attr in attrs}) 32 | assert config.credential.buvid3, '缺少buvid3,请检查登录状态' 33 | assert config.credential.sessdata, '缺少sessdata,请检查登录状态' 34 | 35 | 36 | class VideoCommentUP(base.Uploader, Auth): 37 | """ 38 | 视频下at信息回复机器人 39 | 监听:@消息 40 | 思考:调用GPT回复消息 41 | 反应:评论视频 42 | 43 | :param credential: bilibili认证 44 | :param model_name: openai MODEL 45 | :param signals: at的暗号 46 | 47 | :param limit_video_seconds: 过滤视频长度 48 | :param limit_token: 请求GPT token限制(可输入model name) 49 | :param limit_length: 请求GPT 字符串长度限制 50 | :param compress_mode: 请求GPT 压缩视频文案方式 51 | - random:随机跳跃筛选 52 | - left:从左到右 53 | 54 | :param listeners: 感知 55 | :param concurrent_num: 并发数 56 | :param up_sleep: uploader 多少时间触发一次 57 | :param listener_sleep: listener 多长时间触发一次 58 | :param system: 人设 59 | 60 | :param openai_api_key: openai秘钥 61 | :param openai_proxy: http代理 62 | :param openai_api_base: openai endpoint 63 | :param temperature: gpt温度 64 | :param max_tokens: gpt输出长度 65 | :param chat_model_kwargs: langchain chatModel额外配置参数 66 | :param llm_chain_kwargs: langchain chatChain额外配置参数 67 | 68 | :param brain: 含有run方法的类 69 | :param mq: 通信队列 70 | """ 71 | up_sleep: int = 5 72 | system: str = "你是一个会评论视频B站用户,请根据视频内容做出总结、评论" 73 | signals: Optional[List[str]] = ['总结一下'] 74 | 75 | limit_video_seconds: Optional[int] = 60 * 60 * 1 76 | limit_token: Union[int, str, None] = None 77 | limit_length: Optional[int] = None 78 | compress_mode: Literal['random', 'left'] = 'random' 79 | 80 | prompt_temple: str = ( 81 | '视频内容如下\n' 82 | '标题:{title}' 83 | '{summary}' 84 | ) 85 | 86 | reply_temple: str = ( 87 | '{answer}' 88 | '本条回复由AI生成,' 89 | '由@{nickname}召唤。' 90 | ) # answer: brain回复;nickname:发消息用户昵称 91 | 92 | summary_generator: Optional[converts.SummaryGenerator] = None 93 | aid_record_map: dict = {} 94 | 95 | def prepare(self): 96 | config.log['handlers'].append('file') 97 | self.signals = self.signals 98 | self.get_auth() 99 | if not (self.limit_token or self.limit_length): 100 | self.limit_token = self.model_name 101 | self.summary_generator = converts.SummaryGenerator( 102 | limit_token=self.limit_token, 103 | limit_length=self.limit_length, 104 | compress_mode=self.compress_mode 105 | ) 106 | self.aid_record_map = { 107 | int(record_dict['listener_kwargs']['aid']): Record(**record_dict) for record_dict in self.query() 108 | } 109 | 110 | def get_listeners(self): 111 | return [listener.SessionAtListener()] 112 | 113 | async def execute_sop(self, schema: listener.SessionSchema) -> Optional[reaction.CommentReaction]: 114 | self.logger.info(f'step0:收到schema:{schema.source_content}') 115 | if not any([ 116 | signal in schema.source_content for signal in self.signals 117 | ]): 118 | self.logger.info(f'过滤,没有出现暗号:{schema.source_content}') 119 | return 120 | if schema.aid in self.aid_record_map: 121 | self.logger.info(f'过滤,aid:{schema.aid}已经回复过') 122 | return 123 | 124 | # 获取summary 125 | video = Video(aid=schema.aid, credential=config.credential) 126 | video_content_list = await converts.Audio2Text.from_bilibili_video(video) 127 | view = video.info 128 | self.logger.info('step1:获取summary') 129 | 130 | # 过滤 131 | self.logger.info('step2:过滤') 132 | if self.limit_video_seconds and view.duration > self.limit_video_seconds: 133 | self.logger.info(f'过滤,视频时长超出限制:{view.duration}') 134 | return 135 | if not video_content_list: 136 | self.logger.error('查找字幕资源失败') 137 | return 138 | summary = self.summary_generator.generate(video_content_list) 139 | 140 | # 请求GPT 141 | prompt = self.prompt_temple.format(summary=summary, title=view.title) 142 | self.logger.info(f'step3:请求GPT-prompt:{prompt[:10]}...{prompt[-10:]}') 143 | answer = await self.brain.arun(prompt) 144 | content = self.reply_temple.format( 145 | answer=answer, 146 | nickname=schema.user_nickname 147 | ) 148 | self.aid_record_map[schema.aid] = None 149 | self.logger.info('end') 150 | return reaction.CommentReaction( 151 | aid=schema.aid, 152 | content=content 153 | ) 154 | 155 | 156 | class VtuBer(base.Uploader, Auth): 157 | """ 158 | bilibili直播数字人 159 | 监听:直播间消息 160 | 思考:过滤、调用GPT生成文本 161 | 反应:语音回复 162 | :param room_id: bilibili直播房间号 163 | :param credential: bilibili 账号认证 164 | :param is_filter: 是否开启过滤 165 | :param user_input: 是否开启终端输入 166 | :param extra_ban_words: 额外的违禁词 167 | 168 | :param listeners: 感知 169 | :param concurrent_num: 并发数 170 | :param up_sleep: uploader 运行间隔时间 171 | :param listener_sleep: listener 运行间隔时间 172 | :param system: 人设 173 | 174 | :param openai_api_key: openai秘钥 175 | :param openai_proxy: http代理 176 | :param openai_api_base: openai endpoint 177 | :param temperature: gpt温度 178 | :param max_tokens: gpt输出长度 179 | :param chat_model_kwargs: langchain chatModel额外配置参数 180 | :param llm_chain_kwargs: langchain chatChain额外配置参数 181 | 182 | :param brain: 含有run方法的类 183 | :param mq: 通信队列 184 | """ 185 | 186 | system: str = '你是一个Bilibili主播' 187 | safe_system: str = """请你遵守中华人民共和国社会主义核心价值观和平台直播规范,不允许在对话中出现政治、色情、暴恐等敏感词。\n""" 188 | room_id: int 189 | is_filter: bool = True 190 | user_input: bool = False 191 | audio_temple: dict = { 192 | enums.LiveInputType.danmu: ( 193 | '{user_name}说:{text}' 194 | '{answer}' 195 | ), 196 | enums.LiveInputType.gift: ( 197 | '感谢!{text}' 198 | ), 199 | enums.LiveInputType.user: ( 200 | '{answer}。' 201 | ) 202 | } 203 | 204 | extra_ban_words: Optional[List[str]] = None 205 | ban_word_filter: Any = None 206 | 207 | def prepare(self): 208 | # auth覆盖 209 | self.get_auth() 210 | # 过滤 211 | if self.is_filter and not self.ban_word_filter: 212 | self.ban_word_filter = filters.BanWordsFilter(extra_ban_words=self.extra_ban_words) 213 | 214 | def get_brain(self): 215 | self.system = self.safe_system + self.system 216 | return super().get_brain() 217 | 218 | def get_listeners(self): 219 | listeners = [listener.LiveListener(room_id=self.room_id)] 220 | if self.user_input: 221 | listeners.append(listener.ConsoleListener()) 222 | return listeners 223 | 224 | def console_2_live(self, schema): 225 | return { 226 | 'text': schema.user_input, 227 | 'type': enums.LiveInputType.user 228 | } 229 | 230 | def execute_sop( 231 | self, 232 | schema: Union[dict, listener.UserSchema] 233 | ) -> Union[None, reaction.TTSSpeakReaction]: 234 | if isinstance(schema, listener.UserSchema): 235 | schema = self.console_2_live(schema) 236 | self.logger.info(f"收到消息,准备回复:{schema.get('text') or str(schema)}") 237 | audio_kwargs = {**schema} 238 | audio_temple = self.audio_temple[schema['type']] 239 | if schema['type'] is not enums.LiveInputType.gift: 240 | prompt = schema['text'] 241 | if self.ban_word_filter and (words := self.ban_word_filter.match(prompt)): 242 | self.logger.warning(f'包含违禁词-{prompt}-{words}') 243 | return 244 | try: 245 | audio_kwargs['answer'] = self.brain.run(prompt) 246 | except Exception as e: 247 | self.logger.error('请求GPT异常') 248 | raise e 249 | audio_txt = audio_temple.format( 250 | **audio_kwargs 251 | ) 252 | self.logger.info(f'生成回复:{audio_txt}') 253 | if self.ban_word_filter and (words := self.ban_word_filter.match(audio_txt)): 254 | self.logger.warning(f'包含违禁词-{audio_txt}-{words}') 255 | return 256 | schema['type'] = schema['type'].value 257 | return reaction.TTSSpeakReaction(audio_txt=audio_txt, block=True) 258 | 259 | 260 | class ChatUP(base.Uploader, Auth): 261 | system: str = '你是一位聊天AI助手' 262 | event_name_list: List[EventName] = [EventName.TEXT] 263 | 264 | def prepare(self): 265 | # auth覆盖 266 | self.get_auth() 267 | 268 | def get_listeners(self) -> List[Listener]: 269 | return [listener.ChatListener(event_name_list=self.event_name_list)] 270 | 271 | def execute_sop(self, schema: ChatEvent) -> Union[Reaction, List[Reaction]]: 272 | answer = self.brain.run(schema.content) 273 | return reaction.ChatReaction(content=answer, uid=schema.uid, sender_uid=schema.sender_uid) -------------------------------------------------------------------------------- /src/langup/data/ban_words.txt: -------------------------------------------------------------------------------- 1 | 拦坦克车 2 | 溜四 3 | 操你 4 | 流血衝突 5 | 流血事件 6 | 六4事件 7 | 六四暴动 8 | 六四被杀 9 | 六四被屠杀 10 | 六四被屠殺 11 | 六四参与者 12 | 六四惨案 13 | 六四曾流血 14 | 六四大屠杀 15 | 六四档案 16 | 六四的动乱 17 | 六四的枪声 18 | 六四的槍聲 19 | 六四的先烈 20 | 六四动乱 21 | 六四风波 22 | 六四风云 23 | 六四感言 24 | 六四戒严 25 | 六四开枪令 26 | 六四流亡美国 27 | 六四流亡者 28 | 六四民运 29 | 六四敏感 30 | 六四男事件 31 | 六四评价 32 | 六四清场 33 | 六四日记 34 | 六四事件 35 | 六四天安门 36 | 六四天安门事件 37 | 六四天网 38 | 六四铁汉 39 | 六四屠城 40 | 六四屠夫 41 | 六四屠杀 42 | 六四屠殺 43 | 六四学潮 44 | 控制天安门 45 | 六四学运 46 | 六四血案 47 | 六四遇难者 48 | 六四运动 49 | 六四真相 50 | 六四镇压 51 | 六四镇压主犯 52 | 六四政治 53 | 六四之魂 54 | 六四中共暴行 55 | 六四壮士 56 | 六肆学子 57 | 六吅四 58 | 六月的坦克 59 | 六月四日的屠杀 60 | 怕坦克碾压 61 | 清洗坦克履带 62 | 四二六社论 63 | 六四学生运动 64 | 天安Men屠夫 65 | 天安门暴动 66 | 天安门暴乱 67 | 天安门大屠杀 68 | 天安门动乱 69 | 天安门流亡 70 | 天安门六四 71 | 天安门母亲 72 | 天安门虐杀 73 | 天安门平反 74 | 天安门事件 75 | 天安门事件是中共的阴谋 76 | 天安门屠杀 77 | 天安门学潮 78 | 天安门血腥屠杀 79 | 天安门一九八九 80 | 天安门镇压 81 | 天安門大屠殺 82 | 天安門事件 83 | 挑六四话题 84 | 五月三十五日事件 85 | 天An门事件 86 | 准备戒严 87 | 引发六四事件 88 | 一九八九年六月四日 89 | 一九八九动乱 90 | 一九八九暴动 91 | 血洗天安门广场 92 | 还李旺阳公道 93 | 還李旺陽公道 94 | 李鹏回忆录 95 | 李鹏六四日记 96 | 刘晓波被抓 97 | 民运人士王丹 98 | 赵紫阳回忆录 99 | 学生领袖王丹 100 | 悼念六四 101 | 澹忘了六四 102 | 反思六四 103 | 飞血六月 104 | 记念六四 105 | 纪念六四 106 | 纪念六四事件 107 | 纪念陆四 108 | 紀念六四 109 | 揭六四27年 110 | 解禁六4 111 | 解禁六四 112 | 柳丝祭奠 113 | 六四27周年 114 | 六四不朽 115 | 六四纪念日 116 | 六四平反 117 | 六四周年 118 | 六四烛光集会 119 | 六四烛光晚会 120 | 六四燭光集會 121 | 六四追思会 122 | 声援八九学潮 123 | 维园六四集会 124 | 无能平六四 125 | 毋忘六四 126 | 勿忘六四 127 | 营救89民运 128 | 昭雪六四冤案 129 | 六四亡灵 130 | 六四亡靈 131 | 六月份禁食 132 | 天安门扫射 133 | 天安门时报 134 | 天安门示威 135 | 天安门示威游行 136 | 天安门双亲 137 | 天安门坦克 138 | 天安门屠夫 139 | 天安门自焚 140 | 天安門廣場 141 | 天安門廣場鬧事 142 | 天安門廣場痛哭 143 | 天安門前開口說 144 | 天安门抗议 145 | 中共血洗 146 | 中共开枪镇压 147 | 中共暴政 148 | 镇压学运 149 | 镇压学生 150 | 镇压天安门 151 | 趙紫陽的發言 152 | 赵支持学潮 153 | 佔領天安門 154 | 占領天安門 155 | 占领天安门 156 | 葬身坦克履带 157 | 游行在天安门 158 | 游行示威 159 | 游行动乱政治 160 | 营救赵紫阳 161 | 壹九八九年 162 | 一九八九天安门 163 | 赵紫阳的秘密 164 | 维园参加晚会 165 | 维园晚会 166 | 维园游行 167 | 维园烛光 168 | 维园烛光晚会 169 | 維園燭光集會 170 | 习大大 171 | 习包子 172 | 刁大大 173 | 30级号 174 | 3 0 级号 175 | 三十级号 176 | 三 十级号 177 | (活动-官方) 178 | ***AV女优名单**** 179 | *系统消息 180 | -胡锦-涛- 181 | .CN 182 | .G.M 183 | .G.M 184 | .cn 185 | .org 186 | .系统信息 187 | /温馨提示2 188 | 08县长 189 | 08县长 190 | 08县长|县 191 | 08宪章 192 | 08宪章 193 | 08宪章|宪 194 | 08憲章 195 | 08憲章 196 | 08憲章|憲 197 | 0八宪政 198 | 0八宪政 199 | 0八宪政|八 200 | 0八宪章 201 | 0八宪章 202 | 0八宪章|八 203 | 0捌宪政 204 | 0捌宪政 205 | 0捌宪政|捌 206 | 0捌宪章 207 | 0捌宪章 208 | 0捌宪章|捌 209 | 1234成人 210 | 1234成人 211 | 15193383486 212 | 16dy-图库 213 | 16dy-图库 214 | 16大 215 | 18大前高层领导群体实证研究 216 | 18歲淫亂 217 | 18禁 218 | 18禁 219 | 1989RecallofMemory 220 | 1989RecallofMemory 221 | 1989_6_4 222 | 1989_6_4 223 | 1989年&6月4日 224 | 1989年&6月4日 225 | 1989年6月3日&中共&镇压&天安门 226 | 1989年6月3日&中共&镇压&天安门 227 | 1989年6月4日 228 | 1989年流血事件 229 | 1989年流血事件 230 | 1989年真相 231 | 1989年真相 232 | 1公测送礼 233 | 2 奸淫电车 234 | 2005年1月17日&病逝的人民领袖 235 | 2005年1月17日&病逝的人民领袖 236 | 2005年月7日&病逝的人民领袖|年 237 | 2008x5qq.cn 238 | 200年中国将会爆发|年 239 | 2010年中国将会爆发 240 | 2010年中国将会爆发 241 | 2012年山东临沂附近 242 | 2012年山东临沂附近 243 | 202年山东临沂附近|年 244 | 20周年网络大会 245 | 20周年网络大会 246 | 20周年网络大会|周 247 | 20年前挡坦克 248 | 20年前挡坦克 249 | 20年前挡坦克|年 250 | 21世纪中国基金会 251 | 222se图片 252 | 222se图片 253 | 222se图片|图 254 | 234成人|成 255 | 2穴中出 256 | 2穴中出 257 | 2穴中出| 258 | 33bbb走光 259 | 33bbb走光 260 | 33bbb走光|走 261 | 360雄起 262 | 360雄起 263 | 365sex 264 | 365sex 265 | 3P 266 | 3P 267 | 3P炮图 268 | 3P炮图 269 | 3xy 270 | 3级片 271 | 4-Jun 272 | 40岁才进机关 273 | 4月24号19 274 | 5-1204 275 | 5-1204 276 | 5000汉人 277 | 5252se 278 | 5252se 279 | 5252播 280 | 5252播 281 | 5252播|播 282 | 52QQJL.TK 283 | 52旅 284 | 52旅 285 | 55sss 286 | 55sss 287 | 55sss偷拍区 288 | 55sss偷拍区 289 | 5P 290 | 5P 291 | 5-1204 292 | 6-4tianwang 293 | 6.4 294 | 6.4 295 | 60办公室|办 296 | 610办公室 297 | 610办公室 298 | 613佛山一号文件 299 | 613佛山一号文件 300 | 613兴平一号文件 301 | 613兴平一号文件 302 | 613新乡一号文件 303 | 613新乡一号文件 304 | 613熊岳一号文件 305 | 613熊岳一号文件 306 | 62ai成人网 307 | 62ai成人网 308 | 63佛山一号文件|佛 309 | 63兴平一号文件|兴 310 | 63新乡一号文件|新 311 | 63熊岳一号文件|熊 312 | 64tianwang 313 | 64tianwang 314 | 64tianwanggmail 315 | 64tianwanggmail 316 | 64事件 317 | 64事件 318 | 64事件|事 319 | 64学潮 320 | 64学潮 321 | 64学潮|学 322 | 64學潮 323 | 64學潮 324 | 64學潮|學 325 | 64式销售QQ 326 | 64式销售QQ 327 | 64式销售QQ|式 328 | 64挡坦克照片曝光腾讯网 329 | 64挡坦克照片曝光腾讯网 330 | 64挡坦克照片曝光腾讯网|挡 331 | 69式 332 | 69式 333 | 69式|式 334 | 6。4 335 | 6合彩 336 | 6合彩 337 | 6合彩|合 338 | 6周刊 339 | 6四事件 340 | 6四事件 341 | 6四事件|四 342 | 6月4日&中共军队血腥镇压&北京天安门 343 | 6月4日&中共军队血腥镇压&北京天安门 344 | 6月4日&中共军队血腥镇压&北京天安门|月 345 | 7.5藏独打砸抢烧,3.14达赖反恐暴力事件》光盘 346 | 715暴行 347 | 715暴行 348 | 731部队 349 | 75事件 350 | 75事件 351 | 75事件|事 352 | 75事件一周年 353 | 75事件一周年 354 | 75事件一周年|事 355 | 75暴行 356 | 75暴行 357 | 75暴行|暴 358 | 75纪念 359 | 75纪念 360 | 75纪念|纪 361 | 77bbb 362 | 77bbb 363 | 7u7 364 | 7u7 365 | 7月5日纪念 366 | 7月5日纪念 367 | 7月5日纪念|月 368 | 8023部队 369 | 8023部队 370 | 8023部队|部 371 | 89-64cdjp 372 | 8964cdjp 373 | 8964cdjp 374 | 89事件 375 | 89事件 376 | 89事件|事 377 | 89学潮 378 | 89学潮 379 | 89学潮|学 380 | 89学运 381 | 89学运 382 | 89学运|学 383 | 89學潮 384 | 89學潮 385 | 89學潮|學 386 | 89學運 387 | 89學運 388 | 89學運|學 389 | 89年&六四&二十周年&纪念 390 | 89年&六四&二十周年&纪念 391 | 89年&六四&二十周年&纪念|年 392 | 89年&六四&天安门&事件 393 | 89年&六四&天安门&事件 394 | 89年&六四&天安门&事件|年 395 | 89民运 396 | 89民运 397 | 89民运|民 398 | 89民運 399 | 89民運 400 | 89民運|民 401 | 8禁|禁 402 | 9.18 403 | 91美女 404 | 91美女 405 | 92式销售QQ 406 | 92式销售QQ 407 | 92式销售QQ|式 408 | 97XXOO 409 | 97XXOO 410 | 97ai 411 | 97ai 412 | 97gan 413 | 97gan 414 | 97sese 415 | 97sese 416 | 97干 417 | 97干 418 | 97干|干 419 | 989RecallofMemory 420 | 989年&6月4日|年 421 | 989年6月3日&中共&镇压&天安门|年 422 | 989年6月4日|年 423 | 989年流血事件|年 424 | 989年真相|年 425 | 999日本妹 426 | 999日本妹 427 | 99BBS 428 | 99BBS 429 | 99bb 430 | 99mmm.com 431 | 99mmm.com 432 | 9mimi 433 | 9mimi 434 | 9nnnn 435 | 9nnnn 436 | 9ping 437 | 9ping 438 | 9爱吧 439 | 9爱吧 440 | 9爱吧|爱 441 | 9美女|美 442 | ?洋屄 443 | @sshole 444 | A U 445 | ADMIN 446 | AU 447 | AV 448 | AV 449 | AV女 450 | AV女 451 | AV女|女 452 | AV片 453 | AV片 454 | AV片|片 455 | Admin 456 | Admin 457 | A型肉毒素 458 | A型肉毒素 459 | A型肉毒素|型 460 | A片 461 | A片 462 | A片|片 463 | A聊电影 464 | A聊电影 465 | A聊电影|聊 466 | Bitch 467 | BlowJobs 468 | BnB 469 | Buddist 470 | B博士 471 | B样 472 | B样 473 | B样|样 474 | C4的制作方法 475 | C4的制作方法 476 | C4的制作方法|的 477 | CCTV 478 | CFX气枪销售 479 | CFX气枪销售 480 | CFX气枪销售|气 481 | CN夫妻交友 482 | CN夫妻交友 483 | CN夫妻交友|夫 484 | CODE_NAME 485 | Chaotic 486 | Charter08 487 | Charter08 488 | Clash 489 | DICK 490 | DICK 491 | DIY原子弹 492 | DIY原子弹 493 | DIY原子弹|原 494 | DNF公告 495 | DNF宠物宣传 496 | DNF宠物派送 497 | DNF运营商 498 | DNF通知 499 | DZS.COM 500 | Dick 501 | Eastern Lightning Cult 502 | Emoticon.064 503 | FHB领取 504 | FLG 505 | FLG 506 | FUCK 507 | Fag 508 | Freenet 509 | Fuck 510 | Fuck 511 | Fuckyou 512 | G M 513 | GAMEMASTER 514 | GCD 515 | GFW 516 | GM 517 | GM 518 | Game Master 519 | GameMaster 520 | Girl5女性贴图网 521 | Girl5女性贴图网 522 | Girl5女性贴图网|女 523 | Gm 524 | Great Firewall 525 | GreatFirewall 526 | G带 527 | HTTP. 528 | HTTP. 529 | Hanzuoltur 530 | Hanzuqana 531 | Hardcore 532 | Hitayoltur 533 | Hitayqana 534 | H动漫 535 | H动漫 536 | H动漫|动 537 | H漫画 538 | H漫画 539 | H漫画|漫 540 | H漫联盟 541 | H漫联盟 542 | H片 543 | H片 544 | H片|片 545 | ISO服务 546 | ISO服务 547 | ISO服务|服 548 | J8 549 | J8 550 | JB 551 | JJ 552 | JJ 553 | JZM 554 | JZM植物人 555 | JZM植物人 556 | Jokhang Monastery 557 | Jokhang Temple 558 | JokhangMonastery 559 | JokhangTemple 560 | JokhangTemple(Monastery) 561 | J派面 562 | Kaferoltur 563 | Kafiroltur 564 | Kaperoltur 565 | Kapiroltur 566 | K他命 567 | K他命 568 | K粉 569 | K粉 570 | K粉|粉 571 | LOL庆典 572 | Lama 573 | Lesbian 574 | Lhasa&fire 575 | Lhasa&smoke 576 | MM公寓 577 | MM公寓 578 | MM公寓|公 579 | MM屄 580 | MM屄 581 | MOODYZ 582 | MOODYZ 583 | Monk 584 | NMB 585 | NMD 586 | Nanyaopoyiz 587 | Nanyaowogzal 588 | Nun 589 | OOXX 590 | Operator 591 | PORN 592 | Peacehall 593 | Ply 594 | Protests spread 595 | Protests spread 596 | Protestsspread 597 | QB自动 598 | QB自动 599 | QQ 600 | QQ1069264160 601 | QQG.M 602 | Qirindixim 603 | Q币 604 | Q币专 605 | Q币专 606 | Q币自动 607 | Q币自动 608 | Q币销售 609 | Q币销售 610 | Q播伦理 611 | Q播伦理 612 | Q播伦理|播 613 | RFA 614 | RSF 615 | Ramoche Monastery 616 | Ramoche Temple 617 | RamocheMonastery 618 | RamocheTemple 619 | RamocheTemple(Monastery) 620 | Rebellion 621 | SB 622 | SE窝窝 623 | SE窝窝 624 | SE窝窝|窝 625 | SF 626 | SGB 627 | SHIT 628 | SM 629 | SM女王 630 | SM女王 631 | SM女王|女 632 | SM援交 633 | SM援交 634 | SM美图 635 | SM美图 636 | SM美图|美 637 | SM舔穴 638 | SM舔穴 639 | SUCK 640 | SexInSex 641 | SexInSex 642 | Slut 643 | Suck 644 | T X 645 | TC 646 | TMD 647 | TNTC4等炸弹制作方法 648 | TNTC4等炸弹制作方法 649 | TNTC4等炸弹制作方法|等 650 | TNT炸弹制作方法 651 | TNT炸弹制作方法 652 | TNT炸弹制作方法|炸 653 | TNT炸药制作方法 654 | Teatbreast 655 | Throwing rocks 656 | Throwingrocks 657 | Tokyo 658 | Tokyo Hot 659 | Tromsikhang Market 660 | TromsikhangMarket 661 | TromsikhangMarket 662 | UU片 663 | UU片 664 | UU片|片 665 | UltraSurf 666 | Urumqidiki 667 | U香阁 668 | U香阁 669 | U香阁|香 670 | VOA 671 | Vagina 672 | Vagina 673 | Vaginitis 674 | Vaginitis 675 | Violent 676 | WG 677 | WG 678 | WJB 679 | WLQ下台 680 | WLQ下台 681 | WLQ下台|下 682 | Webmaster 683 | Xijinping 684 | Xijinping 685 | Xijp 686 | Xijp 687 | X夜激情 688 | X夜激情 689 | X夜激情|夜 690 | [幸运2008] 691 | [幸运活动] 692 | [幸运活动] 693 | [幸运随机] 694 | _global.openURL 695 | `腾讯通知` 696 | a$$hole 697 | a$shole 698 | a4u 699 | a4y 700 | a4y 701 | abiogeny 702 | abiogeny 703 | abnormal 704 | abnormal 705 | abnormality 706 | abnormality 707 | accelerate 708 | accelerate 709 | accelerator 710 | accelerator 711 | adam bomba 712 | adambomba 713 | admin 714 | adosculation 715 | adosculation 716 | adult 717 | adulterine 718 | adulterine 719 | afadizi 720 | afadizi 721 | allaha 722 | amateur 723 | amateur 724 | anal 725 | are?under 726 | as$hole 727 | asian 728 | asian 729 | asiasex 730 | asp 731 | asshole 732 | asshole 733 | av 734 | av小电影 735 | av小电影 736 | av小电影|小 737 | av貼圖 738 | av貼圖 739 | av貼圖|貼 740 | baofa 741 | baofa 742 | bastard 743 | basturux 744 | baziri 745 | beiliwang 746 | benzin 747 | benzinpotolkisi 748 | bhcqq.de.vc 749 | bigbowl 750 | bignews 751 | bitch 752 | bitch 753 | blowjob 754 | bns-vip 755 | bns358.com 756 | bns38.com 757 | bns39.com 758 | bnslove 759 | bnsqq.com.cn 760 | bnsxx.uk.to 761 | bomba 762 | boxun 763 | bsn26.com 764 | bulax 765 | bura 766 | burning cars 767 | burning shops 768 | burningcars 769 | burningcars 770 | burningshops 771 | butthead 772 | butthole 773 | buyitem 774 | buzghunqe 775 | cctv 776 | cdma 777 | chaos in Tibet 778 | chaosinTibet 779 | chaosinTibet 780 | chinaliberal 781 | chinamz 782 | chinesenewsnet 783 | chongtu 784 | chongtu 785 | clit 786 | cnd 787 | creaders 788 | cunt 789 | dafa 790 | dafa 791 | dajiyuan 792 | damm 793 | damn 794 | dd373 795 | demonstrate 796 | demonstration 797 | deng小pin 798 | deng小pin 799 | deng小pin|小 800 | dfdz 801 | dfdz 802 | dick 803 | dildo 804 | dildo 805 | dizi 806 | dizi 807 | dong10 808 | dongfangshandian 809 | dongmeng 810 | dongmeng 811 | dongya 812 | dongya 813 | doumi 814 | dpp 815 | duxman 816 | erdaoqiao 817 | erotic 818 | f.l.g 819 | f.l.g 820 | f6qq.cn 821 | falu 822 | falun 823 | falun 824 | falundafa 825 | falundafa 826 | falungong 827 | falungong 828 | fangong 829 | fanri 830 | fanrilianmeng 831 | fa轮 832 | fa轮 833 | fa轮|轮 834 | fenlie 835 | fenlie 836 | flash88 837 | flash88 838 | flg 839 | floozy 840 | floozy 841 | focus88 842 | focus88 843 | fosaon 844 | fosaonfu( 845 | freechina 846 | freedom 847 | freedom 848 | freenet 849 | fu( 850 | fuck 851 | fuk 852 | fv( 853 | fvck 854 | gamemaster 855 | gamemaster 856 | gaoav 857 | gaoav 858 | gay 859 | gay 860 | gcd 861 | gink 862 | gm 863 | g点 864 | g点 865 | g点|点 866 | g片 867 | g片 868 | g片|片 869 | hacker 870 | hacker 871 | halik maydani 872 | halikmaydani 873 | hanisi 874 | hardcore 875 | hardcore 876 | harkat 877 | heriket 878 | hitay 879 | hokimat 880 | hole 881 | hongzhi 882 | hot 883 | hotsex 884 | hotsex 885 | hrichina 886 | htm 887 | htm 888 | html 889 | http 890 | http 891 | http. 892 | httpbbskoubeicomthread2578421html 893 | httpwwwbleufrancecombbsthread1540611html 894 | httpwwwmfdh8cnqqwebqqhtml 895 | httpwwwmfdh8cnqqwebqqhtml 896 | huanet 897 | huhanpai 898 | hu锦tao 899 | hu锦tao 900 | hypermart.net 901 | incest 902 | incest 903 | islam 904 | itemshow 905 | j8 906 | japansweet 907 | jiangdongriji 908 | jiangyanyong 909 | jiang出院 910 | jiang出院 911 | jiddi 912 | jihadkunmeg 913 | jihadkunmig 914 | jihadpoyiz 915 | jihadwogzal 916 | jihatkunmeg 917 | jihatkunmig 918 | jihatpoyiz 919 | jihatwogzal 920 | jinjing 921 | jundai 922 | kangri 923 | kangri 924 | kangrilianmeng 925 | kanshishi 926 | kao 927 | kapir 928 | katil 929 | kirindixim 930 | kisas 931 | kunmegdaxuyigkoruk 932 | kunmegnikap 933 | kunmegpoyiz 934 | kunmegwogzal 935 | kunmigdaxuyigkoruk 936 | kunmigpoyiz 937 | kunmigwogzal 938 | kunmingnikap 939 | kuruxux 940 | kuydurux 941 | laji 942 | lama 943 | lama 944 | lichangshou 945 | lihongzhi 946 | lihongzhi 947 | linlinjiao 948 | liuhecai 949 | liuhecai 950 | liusi 951 | liusi 952 | lizhidao2008sinacom 953 | lizhidao2008sinacom 954 | lizhidao_2008@sina.com 955 | loli控 956 | loli控 957 | loli控|控 958 | lukchun 959 | lukchun(鲁克沁) 960 | lukqun 961 | lukqun(鲁克沁) 962 | lvkchvn 963 | lvkqvn 964 | lvkqvnbazirihokimat 965 | lvkqvnbazirisahqihansi 966 | lvkqvnsahkqigaujumkilix 967 | lvkqvnsodasanaathanisi 968 | lvkqvntoplang 969 | makelove 970 | makelove 971 | making 972 | mandan 973 | mandan 974 | mashinisini 975 | maxinisini 976 | media5 977 | media5 978 | memoryof1989Tiananmen 979 | memoryof1989Tiananmen 980 | memoryof989Tiananmen 981 | mentuhui 982 | mibb.com 983 | mibb.com 984 | millat 985 | miltik 986 | mimiai 987 | mimiai 988 | mimise 989 | mimise 990 | minghui 991 | minghui 992 | minghuinews 993 | minghuinews 994 | minyun 995 | minyun 996 | mm美图 997 | mm美图 998 | mm美图|美 999 | monk 1000 | mustakil 1001 | mustaqil 1002 | musulman 1003 | mysay 1004 | mysay 1005 | nacb 1006 | nada 1007 | nada 1008 | naive 1009 | namayish 1010 | namayix 1011 | namayix&新疆时间 1012 | namayixa 1013 | nanmen 1014 | neowiz 1015 | neowiz 1016 | newav 1017 | nikappiqakpoyiz 1018 | nikappiqakwogzal 1019 | nikappoyiz 1020 | nikapqanapoyiz 1021 | nikapqanawogzal 1022 | nikapwogzal 1023 | nipple 1024 | nmis 1025 | nnd 1026 | nude 1027 | nvjidujiao 1028 | ocre 1029 | oghre 1030 | onecllckpay 1031 | ons 1032 | ons 1033 | oqughuqi 1034 | oralsex 1035 | org 1036 | orgasmus 1037 | orgysex 1038 | paper64 1039 | papillary 1040 | papillary 1041 | parade 1042 | parade 1043 | peacehall 1044 | peacehall 1045 | penis 1046 | petgirl 1047 | petgirl 1048 | pheasant 1049 | pheasant 1050 | php 1051 | phuc 1052 | pichan(鄯善) 1053 | piqannayasi 1054 | piqannayasilvkqvn 1055 | piqan(鄯善) 1056 | piss 1057 | playboy 1058 | plaza 1059 | ply太子党国家领导人子女猛贱柱温宝宝孟见柱 1060 | ply太子党国家领导人子女猛贱柱温宝宝孟见柱 1061 | porn 1062 | porn 1063 | potolkisi 1064 | prick 1065 | prick 1066 | privacy 1067 | pussy 1068 | qex5.cn 1069 | qhx5.cn 1070 | qilingpai 1071 | qq-vit.cn 1072 | qq.bns99.com 1073 | qq.bnsqq.com 1074 | qq.yuehao.com 1075 | qq08com.cn 1076 | qq2008yw.cn 1077 | qq2008yw.cn 1078 | qq6163.cn 1079 | qq888qq.cn 1080 | qqbnr.de.vc 1081 | qqilj.cn 1082 | qqroe.cn 1083 | qqrqr.CN 1084 | qqsts.cn 1085 | qtx5.cn 1086 | quannegshen 1087 | quanquandezhu 1088 | r w 1089 | r w p d 1090 | r w p d 1091 | rape 1092 | renminbao 1093 | renmingbao 1094 | rfa 1095 | rihuo 1096 | rihuo 1097 | rmb 1098 | rwpd 1099 | safeweb 1100 | sahkqiga 1101 | sahqi 1102 | sahqihansi 1103 | sahqihansi遭袭击 1104 | sahqimashinisinikuydurux 1105 | sahqimaxinisinikuydurux 1106 | sakqi 1107 | salacity 1108 | salacity 1109 | sana 1110 | sb 1111 | screw 1112 | sega 1113 | semen 1114 | sex 1115 | sex 1116 | sexy 1117 | sexy 1118 | sgk 1119 | sgtk 1120 | sgtk 1121 | sh!t 1122 | shaoguan 1123 | shengda 1124 | sheryfaluna 1125 | shijishen 1126 | shit 1127 | shit 1128 | shiwei 1129 | shiwei 1130 | shyt 1131 | signature总理 1132 | signature总理 1133 | signature温 1134 | signature温 1135 | simple 1136 | sixfour 1137 | sm 1138 | sm 1139 | sm调教 1140 | sm调教 1141 | snatch 1142 | soda 1143 | softcore 1144 | striptease 1145 | suck 1146 | support 1147 | support 1148 | svdc 1149 | tachy 1150 | tachy 1151 | taip 1152 | taip 1153 | tapanqa 1154 | taxkilat 1155 | tear gas 1156 | teargas 1157 | teatbreast 1158 | teen sexy 1159 | tencent 1160 | tencent 1161 | tension intensifies in Lhasa 1162 | tensionintensifiesinLhasa 1163 | tensionintensifiesinLhasa 1164 | tera 1165 | tiananmen20gmailcom 1166 | tiananmen20gmailcom 1167 | tiananmenprisonersyahoo 1168 | tiananmenprisonersyahoo 1169 | tibetalk 1170 | tnnd 1171 | tokyo 1172 | toplang 1173 | triangle 1174 | triangleboy 1175 | tuidang 1176 | tuidang 1177 | turpan 1178 | turpanlukchun 1179 | turpanlukqun 1180 | turpanlvkchvn 1181 | turpanlvkqvn 1182 | tw18 1183 | txs5.cn 1184 | txs5.cn 1185 | ujumkilix 1186 | ujumkilixkauqurmak 1187 | unixbox 1188 | uqurmak 1189 | urumqi 1190 | ustibet 1191 | uyghur 1192 | uygur 1193 | uyhur 1194 | v.97xxb 1195 | v.97xxb 1196 | vagina 1197 | vazipa 1198 | vazipa 1199 | vaziyat 1200 | virgin 1201 | virgin 1202 | voa 1203 | voachinese 1204 | voyeur 1205 | waigua 1206 | waigua 1207 | wakit 1208 | wangce 1209 | wangdangmailcom 1210 | wangdangmailcom 1211 | wazipa 1212 | webmaster 1213 | webmaster 1214 | whore 1215 | whore 1216 | wstaiji 1217 | wtf 1218 | www. 1219 | www.5588qa.cn 1220 | www.eastturkistan_gov.org 1221 | www.qq888qq.cn 1222 | www.qq888qq.cn 1223 | www.rfa.org.uyghur 1224 | www.uhrp.org 1225 | www.uighur.org 1226 | www.uyghurcongress.org 1227 | wwweastturkistangovorg 1228 | wwwrfaorguyghur 1229 | wwwuhrporg 1230 | wwwuighurorg 1231 | wwwuyghurcongressorg 1232 | wwwuyghurcongressorg 1233 | www。 1234 | x5.3355.cn 1235 | x581.cn 1236 | x583.cn 1237 | x5kk.cn 1238 | x5qq5.cn 1239 | x5qt.cn 1240 | xaliq meydani 1241 | xaliqmeydani 1242 | xaliqmeydani 1243 | xatarlik 1244 | xianzhang2008xianzahnggmail 1245 | xianzhang2008xianzahnggmail 1246 | xianzhang2008xianzhanginbox 1247 | xianzhang2008xianzhanginbox 1248 | xiao77 1249 | ximingze别叫我影帝 1250 | ximingze别叫我影帝 1251 | xinhuawang 1252 | xinhuawang 1253 | xinjinjihad 1254 | xinjinjihat 1255 | xinjinkafir 1256 | xinjinkapir 1257 | xinsheng 1258 | xinsheng 1259 | xjp 1260 | xjp紧掏总输记 1261 | xjp紧掏总输记 1262 | xtt.336.cn 1263 | xxb5.cn 1264 | xxb51.cn 1265 | xxb51.cn 1266 | x平 1267 | x平 1268 | yicilish 1269 | yicilish 1270 | yighilix 1271 | yongcundegenji 1272 | yongyuanjiaohui 1273 | youxing 1274 | youxing 1275 | yuming 1276 | zahar 1277 | zaher 1278 | zhanqi 1279 | zhanqiTV 1280 | zhaoweishan 1281 | zhengjian 1282 | zhengjianwang 1283 | zhenshanren 1284 | zhenshenjiaohui 1285 | zhenxian 1286 | zhenxian 1287 | zhonghua999 1288 | zhonghua999 1289 | zhuanfalun 1290 | zhushenjiao 1291 | zoogony 1292 | zoogony 1293 | zulum 1294 | zxx88.cn 1295 | {第二章 1296 | “6.4 1989——震惊世界的七周” 1297 | “6.41989——震惊世界的七周” 1298 | “一中一台、回民吃猪肉、习近平、李克强、周永康、周恩来、J8、 1299 | “六四”事件民间白皮书 1300 | “十七大” 1301 | “十七大” 1302 | “宠物宝宝” 1303 | “法轮功”、“藏独”、“台独”、“东突” \'习主席\' 1304 | 。cn 1305 | 。com 1306 | 。net 1307 | 。org 1308 | 。cn 1309 | 。cn 1310 | 。com 1311 | 。net 1312 | 。org 1313 | 「活动通知」 1314 | 『系统通知 1315 | 『系统通知 1316 | 【DNF宠物已:正式上线】 1317 | 【宠物】 1318 | 【幸运提示】 1319 | 【礼品宣传】 1320 | 【腾讯消息12:00】 1321 | ゆま 1322 | ゆま 1323 | エロ 1324 | エロ 1325 | ダ 1326 | ㄇㄞ 1327 | ㄐ八 1328 | ㄐ巴 1329 | ㄐ掰 1330 | ㄙㄞ你公 1331 | ㄙㄞ你妈 1332 | ㄙㄞ你娘 1333 | ㄙㄞ你母 1334 | ㄙㄞ你爸 1335 | ㄙㄞ你爸 1336 | ㄙㄞ你老师 1337 | ㄙㄞ你老母 1338 | 一ye情 1339 | 一万封信 1340 | 一丝不挂 1341 | 一个孤僻的人 1342 | 一个提着人造革皮包的人 1343 | 一个解放军的1989戒严部队怎样对待军中反叛者 1344 | 一个解放军的1989戒严部队怎样对待军中反叛者 1345 | 一个解放军的989戒严部队怎样对待军中反叛者|一 1346 | 一个解放军的一九八九 1347 | 一个身份 1348 | 一个身份 1349 | 一中一台 1350 | 一中一台 1351 | 一中一台|一 1352 | 一位老同志的谈话 1353 | 一党 1354 | 一党专制 1355 | 一党专制 1356 | 一党专制|一 1357 | 一党专政 1358 | 一党执政 1359 | 一党独裁 1360 | 一军两策 1361 | 一军两策 1362 | 一军两策|一 1363 | 一切证件 1364 | 一国两制 1365 | 一国两制 1366 | 一夜性网 1367 | 一夜性网 1368 | 一夜性网|一 1369 | 一夜情 1370 | 一夜情 1371 | 一夜情|一 1372 | 一夜欢 1373 | 一夜欢 1374 | 一夜欢|一 1375 | 一字解特码 1376 | 一字解特码 1377 | 一字解特码|一 1378 | 一寸山河一寸血 1379 | 一山村过年吃人肉 1380 | 一山村过年吃人肉 1381 | 一山村过年吃人肉|一 1382 | 一平 1383 | 一折起 1384 | 一期 1385 | 一本道 1386 | 一本道 1387 | 一本道|一 1388 | 一条龙 1389 | 一条龙 1390 | 一梯两户 1391 | 一王两奴 1392 | 一王两奴 1393 | 一王两奴|一 1394 | 一码 1395 | 一线B 1396 | 一线B 1397 | 一线B|一 1398 | 一肖中特 1399 | 一肖中特 1400 | 一般炸药制作 1401 | 一般炸药制作 1402 | 一般炸药制作|一 1403 | 一贯道 1404 | 一贯道 1405 | 一起操 1406 | 一起操 1407 | 一起操|一 1408 | 一边一国、两国论、習近平、王岐山、张高丽 1409 | 一部分人因年龄或健康原因将不得不退下去 1410 | 一陀糞 1411 | 一黨專制 1412 | 一黨專制 1413 | 一黨專制|一 1414 | 丁一平 1415 | 丁元 1416 | 丁元 1417 | 丁关根 1418 | 丁关根 1419 | 丁子霖 1420 | 丁子霖 1421 | 丁子霖&母亲&天安门 1422 | 丁子霖&母亲&天安门 1423 | 丁子霖&母亲&天安门|丁 1424 | 丁子霖|丁 1425 | 丁字裤翘臀 1426 | 丁字裤翘臀 1427 | 丁字裤翘臀|丁 1428 | 丁關根 1429 | 丁香社区 1430 | 丁香社区 1431 | 丁香社区|丁 1432 | 七七 1433 | 七万言书 1434 | 七万言书 1435 | 七万言书|七 1436 | 七五事件 1437 | 七五事件 1438 | 七五事件|七 1439 | 七五事件一周年 1440 | 七五事件一周年 1441 | 七五事件一周年|七 1442 | 七五暴行图片 1443 | 七五暴行图片 1444 | 七五暴行图片|七 1445 | 七五期间&虐杀 1446 | 七五期间虐杀 1447 | 七五纪念 1448 | 七五纪念 1449 | 七五纪念|七 1450 | 七件工具 1451 | 七件工具 1452 | 七号已经吹响 1453 | 七大军区 1454 | 七月七日 1455 | 七月七日 1456 | 七灵派 1457 | 七贤帮 1458 | 七贤帮 1459 | 七问温家宝 1460 | 七问温家宝 1461 | 七问温家宝|七 1462 | 七零 1463 | 万三退 1464 | 万三退 1465 | 万三退|万 1466 | 万人大签名 1467 | 万人骚动 1468 | 万利大造林 1469 | 万利大造林 1470 | 万寿路朱各庄26号 1471 | 万晓东 1472 | 万晓东 1473 | 万润南 1474 | 万润南 1475 | 万淫堂 1476 | 万淫堂 1477 | 万淫堂|万 1478 | 万税 1479 | 万维读者论坛 1480 | 万维读者论坛 1481 | 万能钥匙 1482 | 万里大造林 1483 | 万里大造林 1484 | 三K黨 1485 | 三P 1486 | 三P 1487 | 三P|三 1488 | 三个代婊 1489 | 三个代表 1490 | 三个代表 1491 | 三个代表|三 1492 | 三个呆婊 1493 | 三中二 1494 | 三中二 1495 | 三中二|三 1496 | 三個代表 1497 | 三八 1498 | 三八淫 1499 | 三八淫 1500 | 三八淫|三 1501 | 三公 1502 | 三公 1503 | 三公|三 1504 | 三去車侖工力 1505 | 三去车仑 1506 | 三去车仑 1507 | 三唑仑 1508 | 三唑仑 1509 | 三峡大坝地震 1510 | 三年困难时期 1511 | 三年困难时期 1512 | 三年经济困难时期 1513 | 三年自然灾害 1514 | 三挫仑 1515 | 三挫仑 1516 | 三挫仑|三 1517 | 三晋大地谣言足 1518 | 三晋大地谣言足 1519 | 三晋大地谣言足|三 1520 | 三民主义 1521 | 三民主义 1522 | 三水法轮 1523 | 三点 1524 | 三班仆人派 1525 | 三班仆人派 1526 | 三硝基甲苯 1527 | 三級片 1528 | 三级 1529 | 三级片 1530 | 三级片 1531 | 三级片|三 1532 | 三股势力 1533 | 三菱 1534 | 三退 1535 | 三陪 1536 | 三陪 1537 | 三陪|三 1538 | 三陪先生 1539 | 三陪先生 1540 | 三陪女 1541 | 三陪小姐 1542 | 三陪小姐 1543 | 上中央 1544 | 上交所 1545 | 上千亿国家领导人 1546 | 上千亿国家领导人 1547 | 上千亿末世拍案惊奇强强上台习倒霉 1548 | 上千亿末世拍案惊奇强强上台习倒霉 1549 | 上原多香子 1550 | 上原多香子 1551 | 上原多香子|上 1552 | 上妳 1553 | 上妳 1554 | 上山下乡猛奸猪 1555 | 上山下乡猛奸猪 1556 | 上杉美香子 1557 | 上杉美香子 1558 | 上杉美香子|上 1559 | 上海垮台 1560 | 上海孤儿院 1561 | 上海孤儿院 1562 | 上海孤兒院 1563 | 上海市劳动和社会保障局违规使用社保资金 1564 | 上海帮 1565 | 上海帮 1566 | 上海幫 1567 | 上演温州大款 1568 | 上演温州大款 1569 | 上演郭嘉主人曹廷传高干子弟新四人帮切尼 1570 | 上演郭嘉主人曹廷传高干子弟新四人帮切尼 1571 | 上訪 1572 | 上访 1573 | 上访 1574 | 上访|上 1575 | 上门服务 1576 | 上门服务 1577 | 上门服务|上 1578 | 下三流 1579 | 下三滥 1580 | 下体 1581 | 下体 1582 | 下法轮 1583 | 下流地带 1584 | 下流地带 1585 | 下流地带|下 1586 | 下賤 1587 | 下贱 1588 | 下载速度 1589 | 下面的唇 1590 | 下面的唇 1591 | 下面的嘴 1592 | 下面的嘴 1593 | 下體 1594 | 不同政见 1595 | 不得不内 1596 | 不明身份 1597 | 不明身份的 1598 | 不来提不都热西提 1599 | 不滅帝王 1600 | 不爽不要錢 1601 | 不穿 1602 | 不良少女日记 1603 | 不良少女日记 1604 | 不要奥运要人权 1605 | 不要奥运要人权 1606 | 不要沉默 1607 | 不雅照 1608 | 不雅照 1609 | 不雅照|不 1610 | 与我爽 1611 | 与我爽 1612 | 与我爽|与 1613 | 与我视频 1614 | 与我视频 1615 | 与我视频|与 1616 | 丑b 1617 | 丑逼 1618 | 专 卖 1619 | 专 卖 1620 | 专业代 1621 | 玳 1622 | 王者代练 1623 | 王代 1624 | 专业代写 1625 | 专业代炼 1626 | 专业代炼 1627 | 专业代理 1628 | 专业代练 1629 | 专业代练 1630 | 专业代销 1631 | 专业代销 1632 | 专业办理 1633 | 专业助 1634 | 专业团队 1635 | 专业调查 1636 | 专制 1637 | 专制 1638 | 专制|专 1639 | 专制政权 1640 | 专卖 1641 | 专政 1642 | 专政 1643 | 专政机器 1644 | 专枪销售气枪 1645 | 专枪销售气枪 1646 | 专枪销售气枪|专 1647 | 世华商务 1648 | 世界之门 1649 | 世界以利亚福音宣教会 1650 | 世界日报 1651 | 世界日报 1652 | 世界經濟導報 1653 | 世界经济导报 1654 | 世界经济导报 1655 | 世界维吾尔代表大会 1656 | 世界维吾尔代表大会 1657 | 世界维吾尔大会 1658 | 世界通 1659 | 世界通 1660 | 世纪中国基金会 1661 | 世纪中国网 1662 | 世纪佳缘 1663 | 世纪国网 1664 | 世纪国网 1665 | 世维会 1666 | 世维会 1667 | 丘垂貞 1668 | 丘小雄 1669 | 业主示威 1670 | 业主维权 1671 | 业主请愿 1672 | 业务 1673 | 东亚|东 1674 | 东亚病夫 1675 | 东亚病夫 1676 | 东伊运 1677 | 东伊运 1678 | 东伊运|东 1679 | 东北XX 1680 | 东北XX 1681 | 东北XX|东 1682 | 东北xx网 1683 | 东北xx网 1684 | 东北成人 1685 | 东北成人 1686 | 东北成人|东 1687 | 东北独立 1688 | 东北独立 1689 | 东北风情熟女之惑 1690 | 东北风情熟女之惑 1691 | 东南西北论谈 1692 | 东南西北论谈 1693 | 东土耳其斯坦 1694 | 东土耳其斯坦 1695 | 东土耳其斯坦信息中心 1696 | 东土耳其斯坦信息中心 1697 | 东土耳其斯坦信息中心|东 1698 | 东方发出的闪电 1699 | 东方微点 1700 | 东方时空 1701 | 东方时空 1702 | 东方红时空 1703 | 东方红时空 1704 | 东方闪电 1705 | 东方闪电摸底铺路细则 1706 | 东条英机 1707 | 东条英机 1708 | 东森新闻网 1709 | 东森电视 1710 | 东正教 1711 | 东海拔棒 1712 | 东海拔棒 1713 | 东海拔棒|东 1714 | 东瀛绳艺 1715 | 东瀛绳艺 1716 | 东瀛绳艺|东 1717 | 东热空姐 1718 | 东热空姐 1719 | 东热空姐|东 1720 | 东社 1721 | 东社 1722 | 东突 1723 | 东突 1724 | 东突&镇压 1725 | 东突|东 1726 | 东突厥斯坦 1727 | 东突厥斯坦 1728 | 东突厥斯坦伊斯兰 1729 | 东突厥斯坦伊斯兰运动 1730 | 东突厥斯坦是我的祖国 1731 | 东突厥斯坦解放组织 1732 | 东突同胞解放 1733 | 东突暴动和独立 1734 | 东突组织 1735 | 东突解放组织 1736 | 东突镇压 1737 | 东西南北论坛 1738 | 东西南北论坛 1739 | 丝荡袜 1740 | 丝荡袜 1741 | 丝荡袜|丝 1742 | 丝袜 1743 | 丝袜 1744 | 丝袜mm 1745 | 丝袜mm 1746 | 丝袜mm|丝 1747 | 丝袜写真 1748 | 丝袜写真 1749 | 丝袜淫妇 1750 | 丝袜淫妇 1751 | 丝袜聊天室 1752 | 丝袜聊天室 1753 | 丝袜聊天室|丝 1754 | 丝袜足交 1755 | 丝袜足交 1756 | 丝袜高跟 1757 | 丝袜高跟 1758 | 丝袜高跟|丝 1759 | 丝诱 1760 | 丝诱 1761 | 丝诱|丝 1762 | 两个中国 1763 | 两个中国 1764 | 两个待遇 1765 | 两会 1766 | 两会 1767 | 两会报道 1768 | 两会报道 1769 | 两会新闻 1770 | 两会新闻 1771 | 两岸三地论坛 1772 | 两岸三地论坛 1773 | 两岸关系 1774 | 两岸关系 1775 | 两岸战争 1776 | 两岸边才子对话 1777 | 两岸边才子对话 1778 | 两性狂情 1779 | 两性狂情 1780 | 两性狂情|两 1781 | 两腿之间 1782 | 两限房 1783 | 严厉打击国产老河蟹 1784 | 严厉打击国产老河蟹 1785 | 严家其 1786 | 严家其 1787 | 严家祺 1788 | 严家祺 1789 | 严方军 1790 | 丧权辱国齐桥桥温 1791 | 丧权辱国齐桥桥温 1792 | 个qb 1793 | 个人崇拜 1794 | 个人崇拜 1795 | 丫头养的 1796 | 丫的 1797 | 丫的 1798 | 丬 1799 | 中gong 1800 | 中介 1801 | 中俄密约 1802 | 中俄边界 1803 | 中俄边界 1804 | 中俄边界新约 1805 | 中俄邊界 1806 | 中共 1807 | 中共 1808 | 中共|中 1809 | 中共一党专制 1810 | 中共一党专制 1811 | 中共一黨專制 1812 | 中共一黨專制 1813 | 中共专制 1814 | 中共专制 1815 | 中共专制|中 1816 | 中共严密封锁消息 1817 | 中共严密封锁消息 1818 | 中共严密封锁消息|中 1819 | 中共中南海高层内幕 1820 | 中共中南海高层内幕 1821 | 中共中央 1822 | 中共中央中国 1823 | 中共中央黑幕 1824 | 中共中央黑幕 1825 | 中共任用政治血緣 1826 | 中共任用政治血緣 1827 | 中共任用政治血緣|中 1828 | 中共任用政治血缘 1829 | 中共任用政治血缘 1830 | 中共任用政治血缘|中 1831 | 中共伪政权 1832 | 中共伪政权 1833 | 中共伪政权|中 1834 | 中共偽政權 1835 | 中共偽政權 1836 | 中共偽政權|中 1837 | 中共军队血腥镇压 1838 | 中共军队血腥镇压 1839 | 中共军队血腥镇压|中 1840 | 中共军队黑幕 1841 | 中共军队黑幕 1842 | 中共军队黑幕|中 1843 | 中共十七大前明争暗斗 1844 | 中共十七大前明争暗斗 1845 | 中共十七大前明争暗斗|中 1846 | 中共十七大前明爭暗鬥 1847 | 中共十七大前明爭暗鬥 1848 | 中共十七大前明爭暗鬥|中 1849 | 中共十八人事 1850 | 中共十八人事变动 1851 | 中共十八人选 1852 | 中共十八大前夕 1853 | 中共十八大前夕人事布局出手既稳又重 1854 | 中共十八大热门人选 1855 | 中共十八大的基层选举 1856 | 中共十八布局 1857 | 中共十八热门人选 1858 | 中共反腐风暴大背景揭秘 1859 | 中共嚴密封鎖消息 1860 | 中共嚴密封鎖消息 1861 | 中共嚴密封鎖消息|中 1862 | 中共垮台 1863 | 中共垮台 1864 | 中共垮台|中 1865 | 中共垮臺 1866 | 中共垮臺 1867 | 中共垮臺|中 1868 | 中共小丑 1869 | 中共帮凶 1870 | 中共帮凶 1871 | 中共帮凶|中 1872 | 中共幫兇 1873 | 中共幫兇 1874 | 中共幫兇|中 1875 | 中共当局 1876 | 中共当局 1877 | 中共心中最大的恐惧 1878 | 中共心中最大的恐惧 1879 | 中共恶霸 1880 | 中共恶霸 1881 | 中共恶霸|中 1882 | 中共政坛腐败内幕 1883 | 中共政坛腐败内幕 1884 | 中共政权 1885 | 中共政治课 1886 | 中共政治课 1887 | 中共政治课|中 1888 | 中共暴政 1889 | 中共暴政 1890 | 中共暴政|中 1891 | 中共权利斗争 1892 | 中共权斗 1893 | 中共查禁 1894 | 中共查禁 1895 | 中共查禁|中 1896 | 中共治下情色乱象 1897 | 中共派系力量再达成妥协 1898 | 中共海外渗透 1899 | 中共海外渗透 1900 | 中共海外渗透|中 1901 | 中共海外滲透 1902 | 中共海外滲透 1903 | 中共海外滲透|中 1904 | 中共激烈內鬥 1905 | 中共激烈內鬥 1906 | 中共激烈內鬥|中 1907 | 中共激烈内斗 1908 | 中共激烈内斗 1909 | 中共激烈内斗|中 1910 | 中共独枭 1911 | 中共独枭 1912 | 中共独枭|中 1913 | 中共独裁 1914 | 中共独裁 1915 | 中共独裁|中 1916 | 中共独裁制度 1917 | 中共独裁制度必将灭亡 1918 | 中共独裁制度必将灭亡 1919 | 中共独裁暴政 1920 | 中共独裁暴政 1921 | 中共獨裁 1922 | 中共獨裁 1923 | 中共獨裁|中 1924 | 中共獨裁制度必將滅亡 1925 | 中共獨裁制度必將滅亡 1926 | 中共獨裁暴政 1927 | 中共獨裁暴政 1928 | 中共的侵略及维吾尔族的现状 1929 | 中共的暴政 1930 | 中共的暴政 1931 | 中共的暴政|中 1932 | 中共的死穴 1933 | 中共的死穴 1934 | 中共的死穴|中 1935 | 中共监狱 1936 | 中共监狱 1937 | 中共监狱|中 1938 | 中共第五代 1939 | 中共粉飾太平 1940 | 中共粉飾太平 1941 | 中共粉飾太平|中 1942 | 中共粉饰太平 1943 | 中共粉饰太平 1944 | 中共粉饰太平|中 1945 | 中共統治危機 1946 | 中共統治危機 1947 | 中共統治危機|中 1948 | 中共统治危机 1949 | 中共统治危机 1950 | 中共统治危机|中 1951 | 中共血腥鎮壓 1952 | 中共血腥鎮壓 1953 | 中共血腥鎮壓|中 1954 | 中共血腥镇压 1955 | 中共血腥镇压 1956 | 中共血腥镇压|中 1957 | 中共警察 1958 | 中共警察 1959 | 中共警察|中 1960 | 中共走狗 1961 | 中共走狗 1962 | 中共走狗|中 1963 | 中共軍隊血腥鎮壓 1964 | 中共軍隊血腥鎮壓 1965 | 中共軍隊血腥鎮壓|中 1966 | 中共軍隊黑幕 1967 | 中共軍隊黑幕 1968 | 中共軍隊黑幕|中 1969 | 中共近期权力斗争 1970 | 中共近期权力斗争 1971 | 中共近期权力斗争|中 1972 | 中共近期權力鬥爭 1973 | 中共近期權力鬥爭 1974 | 中共近期權力鬥爭|中 1975 | 中共还在祖国横行 1976 | 中共还在祖国横行 1977 | 中共还在祖国横行|中 1978 | 中共迫害 1979 | 中共迫害 1980 | 中共迫害|中 1981 | 中共還在祖國橫行 1982 | 中共還在祖國橫行 1983 | 中共還在祖國橫行|中 1984 | 中共邪党 1985 | 中共邪党 1986 | 中共邪恶 1987 | 中共邪恶 1988 | 中共邪恶|中 1989 | 中共邪惡 1990 | 中共邪惡 1991 | 中共邪惡|中 1992 | 中共邪黨 1993 | 中共邪黨 1994 | 中共陷內鬥 1995 | 中共陷內鬥 1996 | 中共陷內鬥|中 1997 | 中共陷内斗 1998 | 中共陷内斗 1999 | 中共陷内斗|中 2000 | 中共領導人黑幕 2001 | 中共領導人黑幕 2002 | 中共領導人黑幕|中 2003 | 中共领导人黑幕 2004 | 中共领导人黑幕 2005 | 中共领导人黑幕|中 2006 | 中共高层内幕 2007 | 中共高层内幕 2008 | 中共高层军权争 2009 | 中共高层军权斗争 2010 | 中共高层军权斗争 2011 | 中共高层军权斗争|中 2012 | 中共高层变动:王兆国将任常委或取代贾庆龄 2013 | 中共高层斗争 2014 | 中共高层斗争 2015 | 中共高层权力斗争 2016 | 中共高层权力斗争 2017 | 中共高层权贵内幕 2018 | 中共高层权贵内幕 2019 | 中共高层黑幕 2020 | 中共高层黑幕 2021 | 中共高層軍權鬥爭 2022 | 中共高層軍權鬥爭 2023 | 中共高層軍權鬥爭|中 2024 | 中共黑 2025 | 中共黑匣子 2026 | 中共黑匣子 2027 | 中共黑匣子|中 2028 | 中共黑帮 2029 | 中共黑帮 2030 | 中共黑幕 2031 | 中共黑幕 2032 | 中出解禁 2033 | 中出解禁 2034 | 中出解禁|中 2035 | 中办发 2036 | 中功 2037 | 中功 2038 | 中医药局 2039 | 中医药局 2040 | 中华人民共和国 2041 | 中华人民共和国 2042 | 中华人民实话实说 2043 | 中华人民实话实说 2044 | 中华人民实话实说|中 2045 | 中华人民正邪 2046 | 中华人民正邪 2047 | 中华人民正邪|中 2048 | 中华养生益智功 2049 | 中华养生益智功 2050 | 中华大众 2051 | 中华大众 2052 | 中华局域网 2053 | 中华帝国 2054 | 中华抗日同盟 2055 | 中华抗日同盟 2056 | 中华时事 2057 | 中华时事 2058 | 中华民国 2059 | 中华民国 2060 | 中华真实报 2061 | 中华真实报道 2062 | 中华真实报道 2063 | 中华联邦 2064 | 中华联邦政府 2065 | 中华联邦政府 2066 | 中华联邦政府|中 2067 | 中华讲清 2068 | 中华讲清 2069 | 中南海 2070 | 中南海 2071 | 中南海|中 2072 | 中南海厚黑学 2073 | 中南海厚黑学 2074 | 中南海厚黑学|中 2075 | 中南海惊现东宫小朝廷 2076 | 中南海惊现东宫小朝廷 2077 | 中南海斗争 2078 | 中南海权力斗争 2079 | 中南海波澜起伏 2080 | 中南海秘闻 2081 | 中南海高层权利斗争 2082 | 中南海高层权力斗争 2083 | 中南海高层权力斗争 2084 | 中印边界谈判结果 2085 | 中国.*禁闻 2086 | 中国zf 2087 | 中国のチベット自治区 2088 | 中国のチベット自治区 2089 | 中国のチベット自治区|中 2090 | 中国不强 2091 | 中国之春 2092 | 中国之春 2093 | 中国事务 2094 | 中国人权 2095 | 中国侵略东突和维吾尔现状 2096 | 中国六四真相 2097 | 中国共产党 2098 | 中国共产党 2099 | 中国共产党亡 2100 | 中国共产党亡 2101 | 中国共产党亡|中 2102 | 中国共产党操纵股市 2103 | 中国共产党操纵股市 2104 | 中国劳工观察 2105 | 中国和平 2106 | 中国和平 2107 | 中国国情咨询网 2108 | 中国国情咨询网 2109 | 中国在世界的不光彩排名 2110 | 中国在世界的不光彩排名 2111 | 中国在统一问题上的投降主义 2112 | 中国复兴党 2113 | 中国复兴论坛 2114 | 中国复兴论坛 2115 | 中国大呼吸——十大学者论国家战略与民族使命 2116 | 中国太子 2117 | 中国太子党名单 2118 | 中国太子党名单 2119 | 中国威胁论 2120 | 中国威胁论 2121 | 中国媒体十大事件 2122 | 中国孤儿院 2123 | 中国孤儿院 2124 | 中国就无法摆脱黑暗&革命恐怖 2125 | 中国当局 2126 | 中国影帝温家宝 2127 | 中国影帝温家宝 2128 | 中国影帝温家宝|中 2129 | 中国性爱城 2130 | 中国性爱城 2131 | 中国恐怖组织 2132 | 中国成人论坛 2133 | 中国成人论坛 2134 | 中国改革年代政治斗争 2135 | 中国政坛“清华帮”盛极而衰 2136 | 中国政坛新星中的四大天王 2137 | 中国政坛清华帮盛极而衰 2138 | 中国政坛清华帮盛极而衰 2139 | 中国政府被质疑隐瞒死亡人数 2140 | 中国政府被质疑隐瞒死亡人数 2141 | 中国政府被质疑隐瞒死亡人数|中 2142 | 中国政治体制改革总方向——新宪法(2008)版本 2143 | 中国政治新星 2144 | 中国教徒 2145 | 中国数字时代 2146 | 中国新民党 2147 | 中国时报 2148 | 中国是全球唯一绝对不能惹 2149 | 中国是全球唯一绝对不能惹 2150 | 中国是全球唯一绝对不能惹|中 2151 | 中国最具争议的人温家宝全传 2152 | 中国最具争议的人温家宝全传 2153 | 中国最具争议的人温家宝全传|中 2154 | 中国民主党 2155 | 中国民主党联合总部 2156 | 中国民主同盟 2157 | 中国民主正义党 2158 | 中国民主正义党 2159 | 中国民主转型纵横谈 2160 | 中国民主转型纵横谈 2161 | 中国民主运动 2162 | 中国民众赴日本大使馆 2163 | 中国民众赴日本大使馆 2164 | 中国民众赴日本大使馆|中 2165 | 中国民间保钓联合会 2166 | 中国民间保钓联合会 2167 | 中国泛蓝联盟 2168 | 中国猪 2169 | 中国猪 2170 | 中国珠宝理事会 2171 | 中国珠宝理事会 2172 | 中国的人权 2173 | 中国的陷阱 2174 | 中国真实内容 2175 | 中国真实内容 2176 | 中国真实内容|中 2177 | 中国社会的艾滋病 2178 | 中国社会论坛 2179 | 中国社会论坛 2180 | 中国社会进步党 2181 | 中国社会进步党 2182 | 中国社会进步党|中 2183 | 中国移动 2184 | 中国移动通信 2185 | 中国移动通信 2186 | 中国纳粹胡锦涛 2187 | 中国网通 2188 | 中国联通 2189 | 中国论坛 2190 | 中国论坛 2191 | 中国酷刑&新疆 2192 | 中国酷刑新疆 2193 | 中国银联 2194 | 中国问题论坛 2195 | 中国问题论坛 2196 | 中国难以避免陷入内乱 2197 | 中国难以避免陷入内乱 2198 | 中国难以避免陷入内乱|中 2199 | 中国领导人最强阵容 2200 | 中国领导人最强阵容 2201 | 中国领导人最强阵容|中 2202 | 中国高层人事变动解读 2203 | 中国高层权力斗争 2204 | 中国高层领导的子女现状 2205 | 中国高层领导的子女现状 2206 | 中国高层领导的子女现状|中 2207 | 中国高干子女名单 2208 | 中国高干子女名单 2209 | 中国高干子女名单|中 2210 | 中國之春 2211 | 中國共產黨亡 2212 | 中國共產黨亡 2213 | 中國共產黨亡|中 2214 | 中國共産黨 2215 | 中國和平 2216 | 中國問題論壇 2217 | 中國威脅論 2218 | 中國孤兒院 2219 | 中國復興論壇 2220 | 中國猪 2221 | 中國當局 2222 | 中國真實內容 2223 | 中國社會論壇 2224 | 中國社會進步黨 2225 | 中國移動通信 2226 | 中國論壇 2227 | 中央 2228 | 中央 2229 | 中央&君主专制&民主政治体制 2230 | 中央zf 2231 | 中央军委 2232 | 中央军委 2233 | 中央召开北戴河会议决定十八大高层人事 2234 | 中央团系 2235 | 中央政治局 2236 | 中央政治局 2237 | 中央日报 2238 | 中央权力被架空 2239 | 中央权力被架空 2240 | 中央派系斗争 2241 | 中央派系斗争 2242 | 中央电视台 2243 | 中央社 2244 | 中央社 2245 | 中央警卫局大换血 2246 | 中央警卫局大换血 2247 | 中央警卫局大换血|中 2248 | 中央電視臺 2249 | 中央领导 2250 | 中央高干子弟名单 2251 | 中央高干子弟名单 2252 | 中央高干子弟名单|中 2253 | 中奖 2254 | 中奖 2255 | 中奖提醒 2256 | 中宣 2257 | 中宣部 2258 | 中宣部 2259 | 中山领导流浪汉 2260 | 中山领导流浪汉 2261 | 中山领导流浪汉|中 2262 | 中年美妇 2263 | 中年美妇 2264 | 中年美妇|中 2265 | 中心广场 2266 | 中文搜性网 2267 | 中文搜性网 2268 | 中文搜性网|中 2269 | 中日没有不友好的 2270 | 中时电子报 2271 | 中朝 2272 | 中毒圖騰 2273 | 中毒的圖騰 2274 | 中港色性 2275 | 中特 2276 | 中特 2277 | 中特|中 2278 | 中獎 2279 | 中珙 2280 | 中电信 2281 | 中的班禅 2282 | 中石化说亏损 2283 | 中科院 2284 | 中纪委 2285 | 中華人民實話實說 2286 | 中華人民正邪 2287 | 中華大地 2288 | 中華大衆 2289 | 中華時事 2290 | 中華民國 2291 | 中華真實報道 2292 | 中華講清 2293 | 中華養生益智功 2294 | 中谷香子 2295 | 中谷香子 2296 | 中谷香子|中 2297 | 中越自卫反击战 2298 | 中越自卫反击战 2299 | 中越自卫反击战|中 2300 | 中革中央 2301 | 中顧委委員 2302 | 中顧委委員中顾委委员 2303 | 中顾委委员 2304 | 丰乳美臀 2305 | 丰乳美臀 2306 | 丰乳美臀|丰 2307 | 丰唇艳姬 2308 | 丰唇艳姬 2309 | 丰唇艳姬|丰 2310 | 丰田 2311 | 丹增嘉措 2312 | 丹增嘉措 2313 | 为东突的解放事业做出贡献 2314 | 为了中国的明天--生者与死者 2315 | 为了忘却的纪念 2316 | 主义 2317 | 主席 2318 | 主席 2319 | 主席像 2320 | 主席忏 2321 | 主席李世民 2322 | 主席画像 2323 | 主攻指揮官 2324 | 主权 2325 | 主神 2326 | 主神教 2327 | 主神教 2328 | 主義 2329 | 丽媛 2330 | 丽春苑 2331 | 丽春苑 2332 | 丽春苑|丽 2333 | 举报 2334 | 举报系统 2335 | 举报系统 2336 | 久久宝贝-清纯美女图片站 2337 | 久久宝贝-清纯美女图片站 2338 | 久久宝贝-清纯美女图片站|久 2339 | 义解 2340 | 义解 2341 | 乌-鲁-木-齐& 暴-动 2342 | 乌-鲁-木-齐&暴-动 2343 | 乌光枪 2344 | 乌光枪 2345 | 乌光枪|乌 2346 | 乌尔凯西 2347 | 乌鲁木齐 2348 | 乌鲁木齐&7月5日晚上 2349 | 乌鲁木齐&人民广场 2350 | 乌鲁木齐&人民广场 2351 | 乌鲁木齐&暴乱 2352 | 乌鲁木齐&暴动 2353 | 乌鲁木齐&游行 2354 | 乌鲁木齐&闹事 2355 | 乌鲁木齐扎针 2356 | 乌鲁木齐扎针 2357 | 乌鲁木齐扎针|乌 2358 | 乌鲁木齐毒针 2359 | 乌鲁木齐毒针 2360 | 乌鲁木齐毒针|乌 2361 | 乏仑 2362 | 乏伦 2363 | 乏囵 2364 | 乏抡 2365 | 乏沦 2366 | 乏纶 2367 | 乏论 2368 | 乏轮 2369 | 乔石 2370 | 乔石 2371 | 乖乖粉 2372 | 乙肝战友 2373 | 乙肝战友 2374 | 乙肝携带者 2375 | 乙肝携带者 2376 | 乙肝检测 2377 | 乙肝检测 2378 | 乙肝歧视 2379 | 乙肝歧视 2380 | 乙肝筛选 2381 | 乙肝筛选 2382 | 乙肝维权 2383 | 乙肝维权 2384 | 九-评 2385 | 九.评 2386 | 九ping 2387 | 九ping 2388 | 九ping|九 2389 | 九—评 2390 | 九、评 2391 | 九一八 2392 | 九一八 2393 | 九一評 2394 | 九一評 2395 | 九一評|九 2396 | 九一评 2397 | 九一评 2398 | 九一评|九 2399 | 九九情色 2400 | 九九情色 2401 | 九十三运动 2402 | 九十三运动 2403 | 九十三运动|九 2404 | 九学 2405 | 九常委 2406 | 九成 2407 | 九成新 2408 | 九月十八日 2409 | 九月十八日 2410 | 九码 2411 | 九評 2412 | 九評 2413 | 九評|九 2414 | 九评 2415 | 九评 2416 | 九评|九 2417 | 九评共产党 2418 | 九评共产党 2419 | 九长老 2420 | 九阴争茎 2421 | 九风 2422 | 习_近平 2423 | 习_近平 2424 | 习jinping 2425 | 习jinping 2426 | 习jp 2427 | 习jp 2428 | 习主席 2429 | 习书记 2430 | 习仲勋 2431 | 习倒霉 2432 | 习太子 2433 | 习平平 2434 | 习平平 2435 | 习建平 2436 | 习建平 2437 | 习效仿太祖起事 2438 | 习效仿太祖起事 2439 | 习明泽 2440 | 习明泽(女儿)团派 2441 | 习明泽(女儿)团派 2442 | 习明瘟假宝彭丽媛温 2443 | 习明瘟假宝彭丽媛温 2444 | 习李十八大 2445 | 习李十八大 2446 | 习李十八大|习 2447 | 习李十八大攻略 2448 | 习猛奸猪 2449 | 习猛奸猪 2450 | 习禁评 2451 | 习近平 2452 | 习近平 2453 | 习近平&假博士 2454 | 习近平&假博士 2455 | 习近平&假博士|习 2456 | 习近平&假学历 2457 | 习近平&假学历 2458 | 习近平&假学历|习 2459 | 习近平&假文凭 2460 | 习近平&假文凭 2461 | 习近平&假文凭|习 2462 | 习近平|习 2463 | 习近平你的诉求格杀 2464 | 习近平当场格杀谈判并妥协 2465 | 习近影帝 2466 | 习近影帝 2467 | 习进平 2468 | 习进平 2469 | 习远平 2470 | 习远平(哥) 2471 | 习远平(哥) 2472 | 习金瓶 2473 | 习黄袍加身习效仿太祖起事 2474 | 习黄袍加身习效仿太祖起事 2475 | 乡巴佬 2476 | 乡巴佬 2477 | 买B 2478 | 买G 2479 | 买QB 2480 | 买卖枪支 2481 | 买卖盐酸羟亚胺 2482 | 买卖盐酸羟亚胺 2483 | 买卖盐酸羟亚胺|买 2484 | 买卖羟亚胺 2485 | 买卖羟亚胺 2486 | 买卖羟亚胺|买 2487 | 买卖钢珠枪 2488 | 买卖钢珠枪 2489 | 买卖钢珠枪|买 2490 | 买断工龄 2491 | 买断工龄 2492 | 买断职工 2493 | 买断职工 2494 | 买春 2495 | 买春 2496 | 买春|买 2497 | 买春军团 2498 | 买春军团 2499 | 买春堂 2500 | 买春堂 2501 | 买财富 2502 | 乱LUN 2503 | 乱交 2504 | 乱伦 2505 | 乱伦 2506 | 乱伦|乱 2507 | 乱伦小说 2508 | 乱伦小说 2509 | 乱伦熟女网 2510 | 乱伦熟女网 2511 | 乱性 2512 | 乱性 2513 | 乱搞 2514 | 乱淫 2515 | 乱轮 2516 | 乳交 2517 | 乳交 2518 | 乳交|乳 2519 | 乳头 2520 | 乳头 2521 | 乳头|乳 2522 | 乳射 2523 | 乳射 2524 | 乳射|乳 2525 | 乳尻 2526 | 乳尻 2527 | 乳尻|乳 2528 | 乳尻美脚 2529 | 乳尻美脚 2530 | 乳峰 2531 | 乳房 2532 | 乳房 2533 | 乳房|乳 2534 | 乳晕 2535 | 乳暈 2536 | 乳来伸掌 2537 | 乳林大会 2538 | 乳林大会 2539 | 乳林大会|乳 2540 | 乳此丝袜 2541 | 乳此丝袜 2542 | 乳此丝袜|乳 2543 | 乳此丰满 2544 | 乳此丰满 2545 | 乳此丰满|乳 2546 | 乳此动人 2547 | 乳此动人 2548 | 乳此动人|乳 2549 | 乳此多娇 2550 | 乳此多娇 2551 | 乳此多娇|乳 2552 | 乳沟 2553 | 乳沟 2554 | 乳沟|乳 2555 | 乳波臀浪 2556 | 乳爆 2557 | 乳爆 2558 | 乳爆|乳 2559 | 乳霸 2560 | 乳霸 2561 | 乳霸|乳 2562 | 乳頭 2563 | 亂交 2564 | 亂倫 2565 | 亂倫 2566 | 亂倫|亂 2567 | 亂輪 2568 | 争鸣论坛 2569 | 争鸣论坛 2570 | 事件真相 2571 | 事件真相 2572 | 事件真相|事 2573 | 事变 2574 | 事实独立 2575 | 事实独立 2576 | 事實獨立 2577 | 二B 2578 | 二b 2579 | 二中二 2580 | 二中二 2581 | 二中二|二 2582 | 二乙基酰胺 2583 | 二乙基酰胺 2584 | 二乙基酰胺发抡 2585 | 二二八事件 2586 | 二二八事件 2587 | 二二八事件|二 2588 | 二劳改和女人们——一个右派分子的见闻回忆录 2589 | 二十年前挡坦克 2590 | 二十年前挡坦克 2591 | 二十年前挡坦克|二 2592 | 二奶 2593 | 二屄 2594 | 二屄 2595 | 二当家稀烂 2596 | 二当家稀烂 2597 | 二当家稀烂球鞋 2598 | 二当家稀烂球鞋 2599 | 二穴中出 2600 | 二穴中出 2601 | 二穴中出|二 2602 | 二逼 2603 | 二逼 2604 | 二道桥 2605 | 于剑鸣 2606 | 于大海 2607 | 于大海 2608 | 于幼军 2609 | 于幼軍 2610 | 于浩成 2611 | 于浩成 2612 | 于起龙 2613 | 云山 2614 | 云雨 2615 | 互淫 2616 | 互淫 2617 | 互淫|互 2618 | 互联网审查 2619 | 互舔淫穴 2620 | 互舔淫穴 2621 | 五一活动 2622 | 五一活动 2623 | 五不争鸣论坛 2624 | 五二八 2625 | 五出三进 2626 | 五十二旅 2627 | 五十二旅 2628 | 五套功法 2629 | 五套功法 2630 | 五星红旗 2631 | 五月天|五 2632 | 五月花广场 2633 | 五毛们 2634 | 五毛党 2635 | 亚历山大 2636 | 亚女|亚 2637 | 亚情 2638 | 亚情 2639 | 亚情|亚 2640 | 亚洲周刊 2641 | 亚洲幼图 2642 | 亚洲幼图 2643 | 亚洲幼图|亚 2644 | 亚洲性虐 2645 | 亚洲性虐 2646 | 亚洲性虐|亚 2647 | 亚洲情色网 2648 | 亚洲情色网 2649 | 亚洲成人密码 2650 | 亚洲成人密码 2651 | 亚洲成人密码|亚 2652 | 亚洲有码 2653 | 亚洲有码 2654 | 亚洲有码|亚 2655 | 亚洲淫娃 2656 | 亚洲淫娃 2657 | 亚洲第一天团平近习江一 2658 | 亚洲第一天团平近习江一 2659 | 亚洲自由之声 2660 | 亚洲色 2661 | 亚洲色 2662 | 亚洲色|亚 2663 | 亚洲骚妹 2664 | 亚洲骚妹 2665 | 亚热 2666 | 亚热 2667 | 亡党 2668 | 亡党亡国 2669 | 亡共者胡 2670 | 亡共者胡 2671 | 亡共者胡|亡 2672 | 亡秦者胡 2673 | 亡秦者胡 2674 | 亡秦者胡|亡 2675 | 亢议 2676 | 交媾 2677 | 交媾 2678 | 交媾|交 2679 | 交媾,CAO,K粉,J8,小姐兼职,交媾,西藏314事件,新疆7.5事件,乱伦,毛片,黄片,交配,群交,小姐兼职,茉莉花革命,操你八辈祖宗 2680 | 交换夫妻 2681 | 交换夫妻 2682 | 交换夫妻| 2683 | 交通部 2684 | 交通部 2685 | 亦凡 2686 | 产党共 2687 | 产权局 2688 | 产权局 2689 | 亮b 2690 | 亮b 2691 | 亮b|亮 2692 | 亮屄 2693 | 亮屄 2694 | 亮穴 2695 | 亮穴 2696 | 亮穴|亮 2697 | 亮逼 2698 | 亮逼 2699 | 亮逼|亮 2700 | 亲共行动 2701 | 亲共行动 2702 | 亲共行动|亲 2703 | 亲日 2704 | 亲日 2705 | 亲民党 2706 | 亲民党 2707 | 亲美 2708 | 亲美 2709 | 人quan 2710 | 人之初神秘 2711 | 人之初神秘 2712 | 人之初神秘|人 2713 | 人事变动 2714 | 人事布局出手既稳又重 2715 | 人事接班 2716 | 人事部 2717 | 人事部 2718 | 人代会 2719 | 人代会 2720 | 人体摄影 2721 | 人体摄影 2722 | 人体炸弹 2723 | 人体炸弹 2724 | 人体盛 2725 | 人体盛 2726 | 人兽 2727 | 人员变动 2728 | 人员安排 2729 | 人大 2730 | 人大 2731 | 人大代表 2732 | 人大代表 2733 | 人大法学院 2734 | 人妻 2735 | 人妻 2736 | 人妻|人 2737 | 人妻交换 2738 | 人妻交换 2739 | 人妻做爱 2740 | 人妻做爱 2741 | 人妻小说 2742 | 人妻小说 2743 | 人妻榨乳 2744 | 人妻榨乳 2745 | 人妻熟女 2746 | 人妻熟女 2747 | 人妻自拍 2748 | 人妻自拍 2749 | 人妻色诱 2750 | 人妻色诱 2751 | 人小奶大 2752 | 人小奶大 2753 | 人小奶大|人 2754 | 人工少女 2755 | 人弹 2756 | 人弹 2757 | 人心如秤 2758 | 人性本色 2759 | 人性本色 2760 | 人性本色|人 2761 | 人拳 2762 | 人木又 2763 | 人权 2764 | 人权 2765 | 人权|人 2766 | 人權 2767 | 人民之声 2768 | 人民之声论坛 2769 | 人民之声论坛 2770 | 人民之聲論壇 2771 | 人民代表大会 2772 | 人民代表大会 2773 | 人民內情真相 2774 | 人民公园 2775 | 人民内情真相 2776 | 人民内情真相 2777 | 人民報 2778 | 人民大众 2779 | 人民大众时事参考 2780 | 人民大会堂 2781 | 人民大会堂 2782 | 人民大會堂 2783 | 人民币 2784 | 人民广场 2785 | 人民广场 2786 | 人民报 2787 | 人民报 2788 | 人民报讯 2789 | 人民日报 2790 | 人民日报 2791 | 人民真实 2792 | 人民真实 2793 | 人民真实报告 2794 | 人民真实报道 2795 | 人民真實 2796 | 人民路 2797 | 人民银行 2798 | 人民银行 2799 | 人浪逼美 2800 | 人浪逼美 2801 | 人浪逼美|人 2802 | 人类灭亡进程表 2803 | 人肉炸弹 2804 | 人质 2805 | 人间便器 2806 | 人间便器 2807 | 人间便器|人 2808 | 仁-唯色 2809 | 仁?唯色 2810 | 仁?唯色 2811 | 仁吉旺姆 2812 | 仁唯色 2813 | 仁波切 2814 | 仁波切 2815 | 仁青加 2816 | 仆街 2817 | 仆街 2818 | 仇保兴 2819 | 仇共 2820 | 今日山西3000万人早起 2821 | 今日山西3000万人早起 2822 | 今日山西3000万人早起|今 2823 | 今晨6点27人死亡 2824 | 今晨6点骚乱 2825 | 从延安一路走来的反思——何方自述 2826 | 从柏林墙到天安门 2827 | 从柏林墙到天安门 2828 | 从柏林墙到天安门|从 2829 | 从温家宝内阁到李克强内阁 2830 | 从王立军的24小时看中国 2831 | 从陈良宇倒台看中国政局走势 2832 | 仓井空 2833 | 仓库密码 2834 | 他 妈 2835 | 他tm 2836 | 他ㄇㄞ 2837 | 他ㄇ的 2838 | 他他妈 2839 | 他们嫌我挡了城市的道路 2840 | 他嗎的 2841 | 他奶奶的 2842 | 他妈 2843 | 他妈 2844 | 他妈的 2845 | 他妈的 2846 | 他娘 2847 | 他媽 2848 | 他媽的 2849 | 他母亲 2850 | 他母亲 2851 | 他母親 2852 | 他爹 2853 | 他祖宗 2854 | 他马的 2855 | 他马的 2856 | 付申奇 2857 | 付申奇 2858 | 代 刷 2859 | 代 开 2860 | 代 挂 2861 | 代 练 2862 | 代刷 2863 | 代刷 2864 | 代刷7钻 2865 | 代刷七钻 2866 | 代办员 2867 | 代办员 2868 | 代办证件 2869 | 代办证件 2870 | 代办证件|代 2871 | 代孕妈妈 2872 | 代开 2873 | 代开 2874 | 代开&发票 2875 | 代开&发票 2876 | 代开&发票|代 2877 | 代开发票 2878 | 代开发票 2879 | 代开发票|代 2880 | 代开商品发票 2881 | 代开商品发票 2882 | 代开商品发票|代 2883 | 代开国税发票 2884 | 代开国税发票 2885 | 代开国税发票|代 2886 | 代开地税发票 2887 | 代开地税发票 2888 | 代开地税发票|代 2889 | 代开安装发票 2890 | 代开安装发票 2891 | 代开安装发票|代 2892 | 代开广告发票 2893 | 代开广告发票 2894 | 代开广告发票|代 2895 | 代开建筑发票 2896 | 代开建筑发票 2897 | 代开建筑发票|代 2898 | 代开普通发票 2899 | 代开普通发票 2900 | 代开普通发票|代 2901 | 代开服务发票 2902 | 代开服务发票 2903 | 代开服务发票|代 2904 | 代开租赁发票 2905 | 代开租赁发票 2906 | 代开租赁发票|代 2907 | 代开维修发票 2908 | 代开维修发票 2909 | 代开维修发票|代 2910 | 代开运输发票 2911 | 代开运输发票 2912 | 代开运输发票|代 2913 | 代开餐饮发票 2914 | 代开餐饮发票 2915 | 代开餐饮发票|代 2916 | 代挂 2917 | 代炼 2918 | 代理开发票 2919 | 代理开发票 2920 | 代理开发票|代 2921 | 代生孩子 2922 | 代练 2923 | 代练 2924 | 代考 2925 | 代考 2926 | 代考|代 2927 | 卖30号 2928 | 代打排位 2929 | 代 打排位 2930 | 待打排位 2931 | 带打排位 2932 | 玳打排位 2933 | 帮打排位 2934 | 正规淘 2935 | 正规淘宝 2936 | 加微信号 2937 | 代药物毒品类:血浆 2938 | 代血浆 2939 | 代表大会 2940 | 代表大会 2941 | 代销 2942 | 令狐安 2943 | 令狐计划 2944 | 令计划 2945 | 以色列 2946 | 以茎制洞 2947 | 以茎至洞 2948 | 以茎至洞 2949 | 任亚平 2950 | 仿制枪 2951 | 仿制枪 2952 | 仿制枪|仿 2953 | 仿真假钞 2954 | 仿真枪 2955 | 仿缅 2956 | 仿缅 2957 | 伊东怜 2958 | 伊东怜 2959 | 伊东怜|伊 2960 | 伊力哈木 2961 | 伊古莱提感想 2962 | 伊古莱提感想 2963 | 伊古莱提感想|伊 2964 | 伊吉拉特&安拉 2965 | 伊吉拉特安拉 2966 | 伊吉莱提感想 2967 | 伊吉莱提感想 2968 | 伊吉莱提感想|伊 2969 | 伊扎布特&安拉 2970 | 伊扎布特安拉 2971 | 伊拉克 2972 | 伊拉克 2973 | 伊拉克伊斯兰国 2974 | 伊拉克伊斯兰国 2975 | 伊斯兰 2976 | 伊斯兰 2977 | 伊斯兰军 2978 | 伊斯兰军 2979 | 伊斯兰团 2980 | 伊斯兰团 2981 | 伊斯兰教是邪教 2982 | 伊斯兰解放组织 2983 | 伊斯兰解放组织 2984 | 伊斯兰运动 2985 | 伊斯兰运动 2986 | 伊斯兰马格里布基地组织 2987 | 伊斯兰马格里布基地组织 2988 | 伊斯蘭 2989 | 伊斯蘭亞格林尼斯 2990 | 伊朗 2991 | 伊朗 2992 | 伊莎貝爾 2993 | 伍凡 2994 | 伍凡 2995 | 伐仑 2996 | 伐伦 2997 | 伐囵 2998 | 伐抡 2999 | 伐沦 3000 | 伐论 3001 | 伐轮 3002 | 众像羔 3003 | 优化官员 3004 | 优博讯 3005 | 伟哥 3006 | 伟哥 3007 | 传:单 3008 | 传中共中央关于18大的人事安排意见 3009 | 传九促三 3010 | 传播专业开锁技巧 3011 | 传播专业开锁技巧 3012 | 传播专业开锁技巧|传 3013 | 传说的胡曾联手是一种假象 3014 | 传说的胡曾联手是一种假象 3015 | 传说的胡曾联手是一种假象|传 3016 | 伦功 3017 | 伦功 3018 | 伦功|伦 3019 | 伪火 3020 | 伱妈 3021 | 位的qq 3022 | 低价出售 3023 | 低制 3024 | 住宅 3025 | 住英国房 3026 | 体位 3027 | 体健貌端 3028 | 体制改革 3029 | 体制改革 3030 | 体制改革|体 3031 | 体奸 3032 | 体奸 3033 | 体奸|体 3034 | 体射 3035 | 体射 3036 | 体射|体 3037 | 体育总局 3038 | 何候华 3039 | 何勇 3040 | 何勇 3041 | 何家栋 3042 | 何峰 3043 | 何平 3044 | 何德普 3045 | 何德普 3046 | 何清涟 3047 | 何祚庥 3048 | 余杰 3049 | 余欣荣 3050 | 余洁麟 3051 | 余洁麟 3052 | 余英时 3053 | 余英时 3054 | 余英時 3055 | 余远辉 3056 | 佛展千手法 3057 | 佛展千手法 3058 | 佛教 3059 | 佛教 3060 | 佛教徒 3061 | 佛教徒 3062 | 佛祖 3063 | 佛祖 3064 | 作各种证 3065 | 作弊器 3066 | 作弊器 3067 | 作愛 3068 | 作爱 3069 | 作爱 3070 | 作爱|作 3071 | 作硝化甘 3072 | 作秀 3073 | 作秀 3074 | 作秀习jin平胡温无能 3075 | 作秀习jin平胡温无能 3076 | 你tm 3077 | 你丫 3078 | 你丫 3079 | 你二大爷 3080 | 你今天三退了 3081 | 你今天三退了 3082 | 你今天三退了|你 3083 | 你他妈 3084 | 你以为你装屄就能骗我 3085 | 你以为你装逼就能骗我 3086 | 你办事我放心 3087 | 你吗b 3088 | 你听见神的声音了吗 3089 | 你呀的鸡巴长歪了吧 3090 | 你呀的鸡巴长歪了吧 3091 | 你大爷 3092 | 你妈 3093 | 你妈 3094 | 你妈B 3095 | 你妈B 3096 | 你妈bi 3097 | 你妈了妹 3098 | 你妈比 3099 | 你妈的 3100 | 你妈的 3101 | 你妈逼 3102 | 你妈逼 3103 | 你姥 3104 | 你姥 3105 | 你姥姥的 3106 | 你姥姥的 3107 | 你娘 3108 | 你娘 3109 | 你媽 3110 | 你媽B 3111 | 你媽了妹 3112 | 你媽比 3113 | 你媽的 3114 | 你媽逼 3115 | 你爷爷的 3116 | 你爸 3117 | 你爸 3118 | 你爺 3119 | 你的西域&我的东突 3120 | 你的西域我的东突 3121 | 你的话刺痛了我的心 3122 | 你的话刺痛了我的心 3123 | 你老味 3124 | 你老母 3125 | 你色吗 3126 | 你色吗 3127 | 你色吗|你 3128 | 你說我說論壇 3129 | 你说我说论坛 3130 | 你说我说论坛 3131 | 你马的 3132 | 你麻痹 3133 | 佰渡查 3134 | 佳静安定片 3135 | 使馆 3136 | 侍從倫斯韋 3137 | 侍從貝赫爾特 3138 | 供产 3139 | 供应盐酸羟亚胺 3140 | 供应盐酸羟亚胺 3141 | 供应盐酸羟亚胺|供 3142 | 供应羟亚胺 3143 | 供应羟亚胺 3144 | 供应羟亚胺|供 3145 | 供铲党 3146 | 供铲党 3147 | 供铲党|供 3148 | 供铲裆 3149 | 供铲谠 3150 | 侦探设备 3151 | 侧那 3152 | 侨办 3153 | 侨办 3154 | 侯德健 3155 | 侵害业主正当权益 3156 | 侵害业主正当权益 3157 | 侵害业主正当权益|侵 3158 | 促性腺激素 3159 | 促成政治改革&国家的前途和历史&废除劳教制度 3160 | 促成政治改革&国家的前途和历史&废除劳教制度 3161 | 促成政治改革&国家的前途和历史&废除劳教制度|促 3162 | 促红细胞生成素 3163 | 俄國 3164 | 俄罗斯 3165 | 俄罗斯人体 3166 | 俄罗斯人体 3167 | 俄罗斯人体|俄 3168 | 俏臀摄魄 3169 | 俏臀摄魄 3170 | 俏臀摄魄|俏 3171 | 保卫钓鱼岛 3172 | 保卫钓鱼岛 3173 | 保卫钓鱼岛的爱国游行 3174 | 保卫钓鱼岛的爱国游行 3175 | 保卫钓鱼岛的爱国游行|保 3176 | 保密室 3177 | 保密局 3178 | 保密局 3179 | 保护维吾尔语 3180 | 保监会 3181 | 保监会 3182 | 保釣 3183 | 保钓 3184 | 保钓 3185 | 保钓|保 3186 | 保钓协会温州分会 3187 | 保钓协会温州分会 3188 | 保钓协会温州分会|保 3189 | 保钓和平游行总章 3190 | 保钓和平游行总章 3191 | 保钓和平游行总章|保 3192 | 保钓湘军公告 3193 | 保钓湘军公告 3194 | 保钓湘军公告|保 3195 | 保钓组织 3196 | 俞杰 3197 | 俞正 3198 | 俞正声 3199 | 俞正声 3200 | 信众 3201 | 信众 3202 | 信众|信 3203 | 信使 3204 | 信号 3205 | 信号枪 3206 | 信息产业部 3207 | 信息产业部 3208 | 信息提示 3209 | 信用卡 3210 | 信用卡提现 3211 | 信用卡空卡 3212 | 信用危机 3213 | 信用危机 3214 | 信用危機 3215 | 信誉久久网游 3216 | 信誉久久网游 3217 | 信访 3218 | 信访 3219 | 信访|信 3220 | 信访局 3221 | 信访局 3222 | 俪影蝎心 3223 | 俪影蝎心 3224 | 修炼 3225 | 修炼之歌 3226 | 修炼之歌 3227 | 修煉 3228 | 俺去也QVOD伦理资源站 3229 | 俺去也QVOD伦理资源站 3230 | 俺去也QVOD伦理资源站|俺 3231 | 倒扁 3232 | 倒挂金钩 3233 | 倒挂金钩 3234 | 倒陈运动的最大受益人 3235 | 倖田梨纱 3236 | 倖田梨纱 3237 | 倖田梨纱|倖 3238 | 倚天屠龙别记 3239 | 倚天屠龙别记 3240 | 借腹生子 3241 | 倪拆声 3242 | 倪拆声 3243 | 倪育賢 3244 | 倪育贤 3245 | 倪育贤 3246 | 倫功 3247 | 倬 3248 | 倭国 3249 | 倭国 3250 | 倭寇 3251 | 倭寇 3252 | 假发票 3253 | 假币 3254 | 假币 3255 | 假庆林 3256 | 假庆淋 3257 | 假证 3258 | 假钞 3259 | 假阳具插穴 3260 | 假阳具插穴 3261 | 假青林 3262 | 做人不能太cctv了 3263 | 做原子弹 3264 | 做原子弹 3265 | 做嗳 3266 | 做愛 3267 | 做液体炸药 3268 | 做液体炸药 3269 | 做液体炸药|做 3270 | 做爱 3271 | 做爱 3272 | 做爱|做 3273 | 做爱图片 3274 | 做爱图片 3275 | 做爱小 3276 | 做爱电影 3277 | 做爱电影 3278 | 做爱自拍 3279 | 做爱自拍 3280 | 做牌 3281 | 做证件 3282 | 做鸡 3283 | 偬 3284 | 偷情 3285 | 偷情 3286 | 偷情俏寡妇 3287 | 偷情俏寡妇 3288 | 偷情俏寡妇|偷 3289 | 偷拍|偷 3290 | 偷拍幼幼 3291 | 偷拍幼幼 3292 | 偷拍美穴 3293 | 偷拍美穴 3294 | 偷摄 3295 | 偷欢 3296 | 偷欢 3297 | 偷欢|偷 3298 | 偷渡 3299 | 偷渡 3300 | 偷窥 3301 | 偷窥 3302 | 偷窥|偷 3303 | 偷窥图片 3304 | 偷窥图片 3305 | 傅作义 3306 | 傅作義 3307 | 傅志寰 3308 | 傅志寰 3309 | 傅怡彬 3310 | 傅成玉 3311 | 傅申奇 3312 | 傅申奇 3313 | 傅锐 3314 | 傅雯娟 3315 | 傅鹏 3316 | 催情 3317 | 催情 3318 | 催情药 3319 | 催情药 3320 | 催泪 3321 | 催泪 3322 | 催泪弹 3323 | 催泪弹 3324 | 傳染性病 3325 | 傳說的胡曾聯手是一種假像 3326 | 傳說的胡曾聯手是一種假像 3327 | 傳說的胡曾聯手是一種假像|傳 3328 | 傴 3329 | 傻B 3330 | 傻B 3331 | 傻x 3332 | 傻卵 3333 | 傻吊 3334 | 傻子 3335 | 傻子 3336 | 傻屄 3337 | 傻屄 3338 | 傻比 3339 | 傻比 3340 | 傻逼 3341 | 傻逼 3342 | 傻鳥 3343 | 僉 3344 | 僧侣 3345 | 僧侣 3346 | 僧侣|僧 3347 | 僵泽民 3348 | 僵泽民 3349 | 僵泽民|僵 3350 | 僵賊 3351 | 僵賊民 3352 | 僵贼 3353 | 僵贼 3354 | 僵贼民 3355 | 僵贼民 3356 | 僵贼民|僵 3357 | 儂著卵拋 3358 | 儂著岡巒 3359 | 儺 3360 | 儿子干妈妈 3361 | 儿子干妈妈 3362 | 元老蘭提(沃德) 3363 | 充当涉毒场所保护伞 3364 | 充当涉毒场所保护伞 3365 | 充B 3366 | 先天健康法 3367 | 先奸后杀 3368 | 先烈对话 3369 | 先烈对话 3370 | 先皇 3371 | 光复广州 3372 | 光复广州 3373 | 光复广州|光 3374 | 光复民国 3375 | 光復廣州 3376 | 光復廣州 3377 | 光復廣州|光 3378 | 光明日报 3379 | 光明网 3380 | 光明网 3381 | 光明网|光 3382 | 光环背后的周恩来 3383 | 光环背后的周恩来 3384 | 光环背后的周恩来|光 3385 | 光祖 3386 | 光诚 3387 | 克劳塞维茨 3388 | 克勞森 3389 | 克林顿 3390 | 克林顿 3391 | 克萊恩 3392 | 克萊特 3393 | 免客端 3394 | 宋弼天测试屏蔽词版本1 3395 | 免费A片 3396 | 免费A片 3397 | 免费二级域名 3398 | 免费体验 3399 | 免费使用 3400 | 免费偷窥网 3401 | 免费偷窥网 3402 | 免费成人网站 3403 | 免费成人网站 3404 | 免费索取 3405 | 免费订购热线 3406 | 免费领取 3407 | 兑奖中心 3408 | 党 3409 | 党中央 3410 | 党主席 3411 | 党主席 3412 | 党产共 3413 | 党内分裂 3414 | 党政一把手 3415 | 党校安插亲信 3416 | 党的喉舌 3417 | 党禁 3418 | 党禁 3419 | 党禁|党 3420 | 党章 3421 | 党章 3422 | 党退 3423 | 党鞭 3424 | 党风日下 3425 | 党魁 3426 | 入穴一游 3427 | 入穴一游 3428 | 入穴一游|入 3429 | 入耳关 3430 | 入联 3431 | 入联 3432 | 全1球通 3433 | 全包服务 3434 | 全包服务 3435 | 全哲洙 3436 | 全国两会 3437 | 全国两会 3438 | 全国人大 3439 | 全国看守所死法分布图&躲猫猫死&做梦死 3440 | 全国看守所死法分布图&躲猫猫死&做梦死 3441 | 全国看守所死法分布图&躲猫猫死&做梦死|全 3442 | 全国退党 3443 | 全國人大 3444 | 全國兩會 3445 | 全套|全 3446 | 全套服务 3447 | 全套服务 3448 | 全家不得好死 3449 | 全家死光 3450 | 全家死绝 3451 | 全户型 3452 | 全新假钞 3453 | 全权的主 3454 | 全球公审 3455 | 全职业觉醒 3456 | 全职业觉醒 3457 | 全能神 3458 | 全能神 3459 | 全能神,你真好 3460 | 全范围教会 3461 | 全裸 3462 | 全裸 3463 | 全裸|全 3464 | 兩個中國 3465 | 兩岸三地論壇 3466 | 兩岸關係 3467 | 兩會 3468 | 兩會報道 3469 | 兩會新聞 3470 | 八一 3471 | 八一五 3472 | 八九 3473 | 八九 3474 | 八九|八 3475 | 八九事件 3476 | 八九事件 3477 | 八九事件|八 3478 | 八九学潮 3479 | 八九学潮 3480 | 八九学潮|八 3481 | 八九学运 3482 | 八九学运 3483 | 八九学运|八 3484 | 八九學潮 3485 | 八九學潮 3486 | 八九學潮|八 3487 | 八九學運 3488 | 八九學運 3489 | 八九學運|八 3490 | 八九年 3491 | 八九年&血腥镇压 3492 | 八九年&血腥镇压 3493 | 八九年&血腥镇压|八 3494 | 八九民运 3495 | 八九民运 3496 | 八九民运|八 3497 | 八九民運 3498 | 八九民運 3499 | 八九民運|八 3500 | 八九风波 3501 | 八宪章 3502 | 八级地震毫无预报 3503 | 八老 3504 | 八老 3505 | 八角街 3506 | 八角街 3507 | 八道娱乐网 3508 | 八道娱乐网 3509 | 八道娱乐网|八 3510 | 八零二三部队 3511 | 八零二三部队 3512 | 八零二三部队|八 3513 | 公产党 3514 | 公仆们大大的红包是少 3515 | 公仆们大大的红包是少 3516 | 公仆们大大的红包是少|公 3517 | 公关 3518 | 公关 3519 | 公务员 3520 | 公务员考前答案 3521 | 公务员考前答案 3522 | 公务员考前答案|公 3523 | 公告3点双倍经验+三倍经验 3524 | 公告653 3525 | 公告员 3526 | 公告通知 3527 | 公头 3528 | 公媳乱 3529 | 公媳乱 3530 | 公媳乱|公 3531 | 公安 3532 | 公安 3533 | 公安局 3534 | 公安局 3535 | 公安把秩序搞乱 3536 | 公安部 3537 | 公安部 3538 | 公开信 3539 | 公开信 3540 | 公开信|公 3541 | 公开信胡 3542 | 公开信胡书记空中民主墙 3543 | 公开批评中央高层领导人 3544 | 公投 3545 | 公投 3546 | 公投|公 3547 | 公检法是流氓 3548 | 公测-送大礼 3549 | 公测嘉奖 3550 | 公测嘉奖 3551 | 公测送礼 3552 | 公证处 3553 | 公诉 3554 | 六 四 3555 | 六-四 3556 | 六.四 3557 | 六4事件 3558 | 六4事件 3559 | 六4事件|六 3560 | 六?四 3561 | 六?四 3562 | 六·四 3563 | 六?四 3564 | 六。四 3565 | 六。四 3566 | 六位qq 3567 | 六合彩 3568 | 六合彩 3569 | 六合彩券 3570 | 六合彩券 3571 | 六合彩券|六 3572 | 六合彩美女图库 3573 | 六合彩美女图库 3574 | 六合彩美女图库|六 3575 | 六合菜 3576 | 六合菜 3577 | 六合采 3578 | 六合采 3579 | 六合采|六 3580 | 六和谐四 3581 | 六和采 3582 | 六和采 3583 | 六四 3584 | 六四 3585 | 六四&勿忘 3586 | 六四&勿忘 3587 | 六四&勿忘|六 3588 | 六四&历史 3589 | 六四&历史 3590 | 六四&历史|六 3591 | 六四&平反 3592 | 六四&平反 3593 | 六四&平反|六 3594 | 六四&敏感词 3595 | 六四&敏感词 3596 | 六四&敏感词|六 3597 | 六四&暴力镇压 3598 | 六四&暴力镇压 3599 | 六四&暴力镇压|六 3600 | 六四&纪念 3601 | 六四&纪念 3602 | 六四&纪念|六 3603 | 六四&纪念日 3604 | 六四&纪念日 3605 | 六四&纪念日|六 3606 | 六四|六 3607 | 六四事件 3608 | 六四事件 3609 | 六四事件|六 3610 | 六四事件中的戒严部队 3611 | 六四学潮 3612 | 六四学潮 3613 | 六四学潮|六 3614 | 六四学生运动 3615 | 六四学生领袖 3616 | 六四学生领袖 3617 | 六四学生领袖|六 3618 | 六四學潮 3619 | 六四學潮 3620 | 六四學潮|六 3621 | 六四學生愛國運動 3622 | 六四學生愛國運動 3623 | 六四屠夫 3624 | 六四屠夫 3625 | 六四屠夫|六 3626 | 六四录音记录 3627 | 六四录音记录 3628 | 六四录音记录|六 3629 | 六四挡坦克照片曝光腾讯网 3630 | 六四挡坦克照片曝光腾讯网 3631 | 六四挡坦克照片曝光腾讯网|六 3632 | 六四日记 3633 | 六四日记——广场上的共和国 3634 | 六四民主运动 3635 | 六四白皮书 3636 | 六四白皮书 3637 | 六四白皮書 3638 | 六四真相 3639 | 六四真相 3640 | 六四記錄片 3641 | 六四记录片 3642 | 六四运动 3643 | 六四难属 3644 | 六四難屬 3645 | 六星合彩 3646 | 六星合彩 3647 | 六星合彩|六 3648 | 六星合彩公司 3649 | 六星合彩公司 3650 | 六月联盟 3651 | 六月联盟 3652 | 六月飞雪 3653 | 六氟化铀 3654 | 六河蟹四 3655 | 六百度四 3656 | 六.四 3657 | 兰大一家人 3658 | 兰州军区 3659 | 共c党 3660 | 共x党 3661 | 共一产一党 3662 | 共产 3663 | 共产 3664 | 共产专制 3665 | 共产专制 3666 | 共产专制|共 3667 | 共产主义 3668 | 共产主义 3669 | 共产主义的幽灵 3670 | 共产党 3671 | 共产党 3672 | 共产党受难者援助 3673 | 共产党受难者援助 3674 | 共产党受难者援助|共 3675 | 共产党对新疆&大屠杀 3676 | 共产党对新疆大屠杀 3677 | 共产无赖 3678 | 共产无赖 3679 | 共产无赖|共 3680 | 共产极权 3681 | 共产极权 3682 | 共产极权|共 3683 | 共产王朝 3684 | 共产王朝 3685 | 共产王朝|共 3686 | 共产邪党 3687 | 共产邪党 3688 | 共产邪灵 3689 | 共产邪灵 3690 | 共产邪灵|共 3691 | 共党 3692 | 共党 3693 | 共军 3694 | 共军 3695 | 共匪 3696 | 共匪 3697 | 共匪|共 3698 | 共和 3699 | 共奴 3700 | 共惨 3701 | 共惨党 3702 | 共惨党 3703 | 共惨党|共 3704 | 共惨档 3705 | 共惨档 3706 | 共惨档|共 3707 | 共惨胆 3708 | 共慘檔 3709 | 共慘檔 3710 | 共慘檔|共 3711 | 共抢党 3712 | 共榮圈 3713 | 共残主义 3714 | 共残党 3715 | 共残党 3716 | 共残党|共 3717 | 共残挡 3718 | 共残挡 3719 | 共残挡|共 3720 | 共残裆 3721 | 共殘擋 3722 | 共殘擋 3723 | 共殘擋|共 3724 | 共狗 3725 | 共狗 3726 | 共產邪靈 3727 | 共產邪靈 3728 | 共產邪靈|共 3729 | 共產邪黨 3730 | 共產邪黨 3731 | 共產黨 3732 | 共產黨 3733 | 共産 3734 | 共産主義 3735 | 共産黨 3736 | 共産黨 3737 | 共用的墓碑——一个中国人的家庭纪事 3738 | 共用的墓碑一个中国人的家庭纪事 3739 | 共用的墓碑一个中国人的家庭纪事 3740 | 共用的墓碑一个中国人的家庭纪事|共 3741 | 共贪党 3742 | 共軍 3743 | 共铲 3744 | 共铲党 3745 | 共铲党 3746 | 共铲党|共 3747 | 共铲裆 3748 | 共青团背景 3749 | 共黨 3750 | 兲朝 3751 | 关于劳教请全国人大释宪之公民要求书 3752 | 关于劳教请全国人大释宪之公民要求书 3753 | 关于劳教请全国人大释宪之公民要求书|关 3754 | 关于实行真理的交通与问题解答 3755 | 关卓中 3756 | 关卓中 3757 | 关键时刻 3758 | 关闭所有论坛 3759 | 兴奋剂 3760 | 兴奋剂 3761 | 兴纩繿聏继 3762 | 兴纩繿聏继 3763 | 兴纩繿聏继|兴 3764 | 兵力部署 3765 | 其它次要的适合于后台审核的敏感词: 3766 | 其它: 3767 | 其美仁增 3768 | 其美仁增 3769 | 其美仁增|其 3770 | 养蚂蚁 3771 | 养蚂蚁 3772 | 兼职 3773 | 兼职 3774 | 兼职MM 3775 | 兼职MM 3776 | 兼职MM|兼 3777 | 兼职处女 3778 | 兼职处女 3779 | 兼职处女|兼 3780 | 兼职女 3781 | 兼职女 3782 | 兼职女|兼 3783 | 兼职妹妹 3784 | 兼职妹妹 3785 | 兼职妹妹|兼 3786 | 兼职漂亮妹妹 3787 | 兼职漂亮妹妹 3788 | 兼职漂亮妹妹|兼 3789 | 兽交 3790 | 兽交 3791 | 兽交|兽 3792 | 兽兽门 3793 | 兽兽门 3794 | 兽兽门|兽 3795 | 兽奸 3796 | 兽奸 3797 | 兽奸|兽 3798 | 兽性 3799 | 兽欲 3800 | 兽欲 3801 | 兽欲|兽 3802 | 内射 3803 | 内射 3804 | 内射|内 3805 | 内射美妇 3806 | 内射美妇 3807 | 内幕 3808 | 内挂 3809 | 内挂 3810 | 内斗 3811 | 内斗 3812 | 内斗|内 3813 | 内斗退党 3814 | 内斗退党 3815 | 内蒙古 3816 | 内蒙古挖肃灾难实录 3817 | 内裤 3818 | 冈山空军官学校 3819 | 冈山空军官学校 3820 | 冈山空军官学校|冈 3821 | 冈村宁次 3822 | 冈村秀树 3823 | 册那 3824 | 册那娘餓比 3825 | 再奸 3826 | 再续签缘 3827 | 再转轮 3828 | 再转轮 3829 | 再转轮|再 3830 | 冒白浆 3831 | 冒白浆 3832 | 冒白浆|冒 3833 | 写字楼 3834 | 写真 3835 | 写真 3836 | 军事委员会 3837 | 军事委员会 3838 | 军事社 3839 | 军国主义 3840 | 军国主义 3841 | 军妓 3842 | 军妓 3843 | 军委 3844 | 军委 3845 | 军委主席 3846 | 军用品 3847 | 军用手枪出售 3848 | 军用手枪出售 3849 | 军用手枪出售|军 3850 | 军转 3851 | 军转 3852 | 军转安置 3853 | 军转干 3854 | 军转干 3855 | 军转干|军 3856 | 军转干部 3857 | 军长发威 3858 | 军队 3859 | 农业部 3860 | 农业部 3861 | 冠希 3862 | 冠希 3863 | 冠西 3864 | 冠西 3865 | 冠西&艳照 3866 | 冠西&艳照 3867 | 冤民大同盟 3868 | 冯东海 3869 | 冯东海 3870 | 冯寿淼 3871 | 冯敏刚 3872 | 冯正虎 3873 | 冯珏 3874 | 冯素英 3875 | 冯素英 3876 | 冯锦华 3877 | 冯锦华 3878 | 冯锦华|冯 3879 | 冰後 3880 | 冰毒 3881 | 冰毒 3882 | 冰毒|冰 3883 | 冰火 3884 | 冰火 3885 | 冰火|冰 3886 | 冰火九重天 3887 | 冰火九重天 3888 | 冲击 3889 | 冲击 3890 | 冲浪赚 3891 | 冲突 3892 | 冲突 3893 | 冲赛康 3894 | 冲赛康 3895 | 冲锋枪 3896 | 决战九常委 3897 | 准现房 3898 | 凉木桃香 3899 | 凉木桃香 3900 | 凉木桃香|凉 3901 | 凌辱 3902 | 凌辱 3903 | 凌锋 3904 | 凌锋 3905 | 几吧 3906 | 凡20级以上的玩家领取 3907 | 凤凰 3908 | 凤翔合碧 3909 | 凤翔合碧 3910 | 凤翔合碧|凤 3911 | 凯他敏 3912 | 凯旋 3913 | 凱奧勒尼什 3914 | 凱爾本 3915 | 凱爾雷斯 3916 | 凱特切爾 3917 | 凸肉优 3918 | 凸肉优 3919 | 凸肉优|凸 3920 | 凹晕 3921 | 出台 3922 | 出售54式 3923 | 出售54式 3924 | 出售54式|出 3925 | 出售56军刺 3926 | 出售56军刺 3927 | 出售56军刺|出 3928 | 出售56式半刺刀 3929 | 出售56式半刺刀 3930 | 出售56式半刺刀|出 3931 | 出售G 3932 | 出售三唑仑 3933 | 出售三唑仑 3934 | 出售三棱刀 3935 | 出售三棱刀 3936 | 出售三棱刀|出 3937 | 出售仿真手狗 3938 | 出售仿真手狗 3939 | 出售仿真手狗|出 3940 | 出售假币 3941 | 出售假钞 3942 | 出售假钞 3943 | 出售假钞|出 3944 | 出售健卫小口径步枪 3945 | 出售健卫小口径步枪 3946 | 出售健卫小口径步枪|出 3947 | 出售兽用麻醉枪 3948 | 出售兽用麻醉枪 3949 | 出售兽用麻醉枪|出 3950 | 出售军刀 3951 | 出售军刀 3952 | 出售军刀|出 3953 | 出售军刺 3954 | 出售军刺 3955 | 出售军刺|出 3956 | 出售军用五连发手枪 3957 | 出售军用五连发手枪 3958 | 出售军用五连发手枪|出 3959 | 出售军用手狗 3960 | 出售军用手狗 3961 | 出售军用手狗|出 3962 | 出售圣甲虫跳刀 3963 | 出售圣甲虫跳刀 3964 | 出售圣甲虫跳刀|出 3965 | 出售左轮手枪 3966 | 出售左轮手枪 3967 | 出售左轮手枪|出 3968 | 出售广州三箭气枪 3969 | 出售广州三箭气枪 3970 | 出售广州三箭气枪|出 3971 | 出售弹簧刀 3972 | 出售弹簧刀 3973 | 出售弹簧刀|出 3974 | 出售手 3975 | 出售手 3976 | 出售手qiang 3977 | 出售手qiang 3978 | 出售手qiang|出 3979 | 出售手|出 3980 | 出售手拉鸡 3981 | 出售手拉鸡 3982 | 出售手拉鸡|出 3983 | 出售手枪 3984 | 出售手枪 3985 | 出售手枪|出 3986 | 出售枪 3987 | 出售枪 3988 | 出售枪|出 3989 | 出售枪支 3990 | 出售枪支 3991 | 出售此号 3992 | 出售海洛因 3993 | 出售海洛因 3994 | 出售火药动力钢珠枪 3995 | 出售火药动力钢珠枪 3996 | 出售火药动力钢珠枪|出 3997 | 出售猎枪 3998 | 出售猎枪 3999 | 出售瓦斯手狗 4000 | 出售瓦斯手狗 4001 | 出售瓦斯手狗|出 4002 | 出售电狗 4003 | 出售电狗 4004 | 出售电狗|出 4005 | 出售盐酸羟亚胺 4006 | 出售盐酸羟亚胺 4007 | 出售盐酸羟亚胺|出 4008 | 出售神符 4009 | 出售答案 4010 | 出售羟亚胺 4011 | 出售羟亚胺 4012 | 出售羟亚胺|出 4013 | 出售自制手枪 4014 | 出售自制手枪 4015 | 出售自制手枪|出 4016 | 出售虎头双管 4017 | 出售虎头双管 4018 | 出售虎头双管|出 4019 | 出售账号 4020 | 出售跳刀 4021 | 出售跳刀 4022 | 出售跳刀|出 4023 | 出售金币 4024 | 出售金币 4025 | 出售金钟气枪 4026 | 出售金钟气枪 4027 | 出售金钟气枪|出 4028 | 出售铅弹气枪 4029 | 出售铅弹气枪 4030 | 出售铅弹气枪|出 4031 | 出售雷管炸药自制炸弹 4032 | 出售雷管炸药自制炸弹 4033 | 出售雷管炸药自制炸弹|出 4034 | 出海志愿者报名电话 4035 | 出海志愿者报名电话 4036 | 出海志愿者报名电话|出 4037 | 出现暴动 4038 | 刀林荫 4039 | 分家在 4040 | 分家在 4041 | 分裂 4042 | 分裂 4043 | 分裂|分 4044 | 分裂中华人民共和国 4045 | 分裂中国 4046 | 分裂祖国 4047 | 分隊長施蒂文 4048 | 切七 4049 | 切糕党开始公然拉人 4050 | 刑警 4051 | 列宁 4052 | 列宁 4053 | 列确 4054 | 刘 淇 4055 | 刘云山 4056 | 刘云山 4057 | 刘云山|刘 4058 | 刘亚洲 4059 | 刘京 4060 | 刘伟平 4061 | 刘伯承 4062 | 刘俊国 4063 | 刘俊国 4064 | 刘冬冬 4065 | 刘凯中 4066 | 刘凯中 4067 | 刘千石 4068 | 刘千石 4069 | 刘华清 4070 | 刘华清 4071 | 刘国凯 4072 | 刘国凯 4073 | 刘士贤 4074 | 刘士贤 4075 | 刘士贤司马晋 4076 | 刘奇葆 4077 | 刘奇葆热门人选 4078 | 刘学普 4079 | 刘家义 4080 | 刘宾深 4081 | 刘宾深 4082 | 刘宾雁 4083 | 刘宾雁 4084 | 刘少奇 4085 | 朱德 4086 | 彭德怀 4087 | 林彪 4088 | 刘伯承 4089 | 陈毅 4090 | 贺龙 4091 | 聂荣臻 4092 | 刘少奇专案内幕 4093 | 刘山青 4094 | 刘山青 4095 | 刘延东 4096 | 刘建华 4097 | 刘德 4098 | 刘德华和胡主席 4099 | 刘德华和胡主席 4100 | 刘志军 4101 | 刘慧 4102 | 刘成军 4103 | 刘振亚 4104 | 刘振来 4105 | 刘振起 4106 | 刘文瑜 4107 | 刘文胜 4108 | 刘文胜 4109 | 刘明康 4110 | 刘春良 4111 | 刘晓凯 4112 | 刘晓榕 4113 | 刘晓江 4114 | 刘晓波 4115 | 刘晓波 4116 | 刘晓波|刘 4117 | 刘晓波获奖 4118 | 刘晓波获奖 4119 | 刘晓波获奖|刘 4120 | 刘晓竹 4121 | 刘晓竹 4122 | 刘永川 4123 | 刘永川 4124 | 刘永治 4125 | 刘永清 4126 | 刘淇 4127 | 刘淇 4128 | 刘源 4129 | 刘炽平 4130 | 刘炽平 4131 | 刘玉亭 4132 | 刘玉浦 4133 | 刘石泉 4134 | 刘粤军 4135 | 刘金国 4136 | 刘金国 4137 | 刘青 4138 | 刘青 4139 | 刘鹏 4140 | 则民 4141 | 则民 4142 | 创世之子猎艳之旅 4143 | 创世之子猎艳之旅 4144 | 别他吗 4145 | 别他妈的装 4146 | 别以为你是太监我就怕你 4147 | 别梦成灰 4148 | 制作原子弹 4149 | 制作原子弹 4150 | 制作原子弹|制 4151 | 制作工艺 4152 | 制作工艺 4153 | 制作炸弹首先要制作炸药 4154 | 制作炸药 4155 | 制作炸药 4156 | 制作炸药|制 4157 | 制作盐酸羟亚胺 4158 | 制作盐酸羟亚胺 4159 | 制作盐酸羟亚胺|制 4160 | 制作羟亚胺 4161 | 制作羟亚胺 4162 | 制作羟亚胺|制 4163 | 制作证件 4164 | 制手枪 4165 | 制服狩 4166 | 制服狩 4167 | 制服狩|制 4168 | 制服美妇 4169 | 制服美妇 4170 | 制服美妇|制 4171 | 制服誘惑 4172 | 制服誘惑 4173 | 制服誘惑|制 4174 | 制服诱 4175 | 制服诱惑 4176 | 制服诱惑 4177 | 制服诱惑|制 4178 | 制证定金 4179 | 制造 4180 | 刷 分 4181 | 刷 级 4182 | 刷分 4183 | 刷分 4184 | 刷卡 4185 | 刷卡消费 4186 | 刷屏 4187 | 刷级 4188 | 刷装备 4189 | 刷装备 4190 | 刷金币 4191 | 刷钱 4192 | 刷钱 4193 | 刹笔 4194 | 刻章 4195 | 刻章 4196 | 刻章办 4197 | 則民 4198 | 前凸后翘 4199 | 前凸后翘 4200 | 前凸后翘|前 4201 | 前明争暗斗 4202 | 剖腹一刀五千几 4203 | 剖腹一刀五千几 4204 | 剖腹一刀五千几|剖 4205 | 剛比 4206 | 剛比樣子 4207 | 劉俊國 4208 | 劉凱中 4209 | 劉剛 4210 | 劉千石 4211 | 劉國凱 4212 | 劉士賢 4213 | 劉山青 4214 | 劉文勝 4215 | 劉文雄 4216 | 劉曉波 4217 | 劉曉竹 4218 | 劉永川 4219 | 劉華清 4220 | 劉賓深 4221 | 劉賓雁 4222 | 劉青 4223 | 劌 4224 | 力挺360 4225 | 力挺360 4226 | 办公厅 4227 | 办理文凭 4228 | 办理证件 4229 | 办证 4230 | 功友 4231 | 功法 4232 | 功法 4233 | 功轮法 4234 | 功轮法 4235 | 功轮法|功 4236 | 加了服 4237 | 加央多吉 4238 | 加央多吉 4239 | 加央多吉|加 4240 | 加拿大皇家骑警 4241 | 加盟连锁 4242 | 加速补丁 4243 | 劣等民族 4244 | 动5感地带 4245 | 动乱 4246 | 动乱 4247 | 动乱|动 4248 | 动态网 4249 | 动态网 4250 | 动态网|动 4251 | 动漫色图 4252 | 动漫色图 4253 | 动车西南王汪 4254 | 动车西南王汪 4255 | 助手威爾特 4256 | 助考 4257 | 助考网 4258 | 努尔白克力 4259 | 劲 舞 4260 | 劲舞 4261 | 劲舞团 4262 | 劳+教+所 4263 | 劳动保障局 4264 | 劳动保障部 4265 | 劳动教养所 4266 | 劳动教养所 4267 | 劳拉 4268 | 劳改 4269 | 劳教 4270 | 劳教信息公开申请书 4271 | 劳教信息公开申请书 4272 | 劳教信息公开申请书|劳 4273 | 勒索 4274 | 動亂 4275 | 勞動教養所 4276 | 勞改 4277 | 勞教 4278 | 勞資 4279 | 勤司领部 4280 | 勱 4281 | 勾引 4282 | 勾结奸商 4283 | 勾结奸商 4284 | 勾魂少妇 4285 | 勾魂少妇 4286 | 勾魂少妇|勾 4287 | 包二奶 4288 | 包二奶 4289 | 包二奶| 4290 | 包月 4291 | 包皮 4292 | 包皮 4293 | 包皮|包 4294 | 匕首 4295 | 化工厂爆炸 4296 | 北京xx网 4297 | 北京xx网 4298 | 北京xx网|北 4299 | 北京之春 4300 | 北京之春 4301 | 北京之春民主论坛 4302 | 北京事件 4303 | 北京军区 4304 | 北京和新疆打内战 4305 | 北京市亿霖 4306 | 北京帮 4307 | 北京帮 4308 | 北京帮|北 4309 | 北京当局 4310 | 北京当局 4311 | 北京怎么了 4312 | 北京政权 4313 | 北京政权 4314 | 北京植物人 4315 | 北京當局 4316 | 北京风波 4317 | 北原梨奈 4318 | 北原梨奈 4319 | 北原梨奈|北 4320 | 北国之春 4321 | 北大三角 4322 | 北大三角地論壇 4323 | 北大三角地论坛 4324 | 北大三角地论坛 4325 | 北岛优 4326 | 北岛优 4327 | 北岛优|北 4328 | 北戴河眼泪帝温爷贪 4329 | 北戴河眼泪帝温爷贪 4330 | 北戴河胡了锦涛 4331 | 北戴河胡了锦涛 4332 | 北美情趣 4333 | 北美情趣 4334 | 北美情趣|北 4335 | 北美自由論壇 4336 | 北美自由论坛 4337 | 北美自由论坛 4338 | 北美讲坛 4339 | 北美论坛 4340 | 北高联 4341 | 区域服务器 4342 | 十7大 4343 | 十七大 4344 | 十七大 4345 | 十七大人大代表一封信 4346 | 十七大人大代表一封信 4347 | 十七大人大代表一封信|十 4348 | 十七大权斗 4349 | 十七大权斗 4350 | 十七大的一封信 4351 | 十七大的一封信 4352 | 十七条 4353 | 十七条 4354 | 十三兄弟帮 4355 | 十三兄弟帮 4356 | 十二煞星帮 4357 | 十二煞星帮 4358 | 十八大 4359 | 十八大&中国政局 4360 | 十八大&中国政局 4361 | 十八大&中国政局|十 4362 | 十八大&争权 4363 | 十八大&争权 4364 | 十八大&争权|十 4365 | 十八大&江派 4366 | 十八大&江派 4367 | 十八大&江派|十 4368 | 十八大&诸侯进京 4369 | 十八大&诸侯进京 4370 | 十八大&诸侯进京|十 4371 | 十八大与习近平时代 4372 | 十八大与习近平时代 4373 | 十八大与习近平时代|十 4374 | 十八大人事 4375 | 十八大人事安排意见 4376 | 十八大人事调整 4377 | 十八大人员安排 4378 | 十八大人员安排 4379 | 十八大人员安排|十 4380 | 十八大军委席位争夺战 4381 | 十八大前的浑水 4382 | 十八大布局 4383 | 十八大布局 4384 | 十八大布局|十 4385 | 十八大总理争夺战 4386 | 十八大接班 4387 | 十八大接班 4388 | 十八大接班|十 4389 | 十八大政治局 4390 | 十八大未来 4391 | 十八大权力变更 4392 | 十八大预测 4393 | 十八子克弓虽 4394 | 十八子克弓虽 4395 | 十八子克弓虽蛤M 4396 | 十八子克弓虽蛤M 4397 | 十八届 4398 | 十八年 4399 | 十八庆红 4400 | 十八换血 4401 | 十八摸 4402 | 十八摸 4403 | 十八摸|十 4404 | 十六大 4405 | 十六大 4406 | 十大穷人 4407 | 十字军 4408 | 十字军 4409 | 十字军|十 4410 | 十字口温 4411 | 十字口温 4412 | 十字扣总理 4413 | 十字扣总理 4414 | 十年动乱石进 4415 | 十指弹琴 4416 | 十指弹琴 4417 | 十景缎 4418 | 十景缎 4419 | 千涩 4420 | 千涩 4421 | 千涩|千 4422 | 半夜鸡不叫 4423 | 半羽孟见柱 4424 | 半羽孟见柱 4425 | 华主席 4426 | 华人媒体 4427 | 华国 4428 | 华国锋 4429 | 华国锋 4430 | 华夏文摘 4431 | 华夏文摘 4432 | 华夏文摘快递 4433 | 华夏论坛 4434 | 华如秀 4435 | 华宇网络 4436 | 华宇网络 4437 | 华岳 4438 | 华岳时事论坛 4439 | 华岳时事论坛 4440 | 华建敏 4441 | 华建敏 4442 | 华彩好礼 4443 | 华惠棋 4444 | 华盛顿 4445 | 华盛顿邮报 4446 | 华莱士 4447 | 华语世界论坛 4448 | 华语世界论坛 4449 | 华过锋 4450 | 华通时事 4451 | 华通时事论坛 4452 | 华通时事论坛 4453 | 协警 4454 | 卑猥 4455 | 卑猥 4456 | 卑猥|卑 4457 | 卓伯源 4458 | 卓玛嘉 4459 | 卓玛嘉 4460 | 卖.国 4461 | 卖B 4462 | 卖B 4463 | 卖G 4464 | 卖ID 4465 | 卖QB 4466 | 卖QQ 4467 | 卖二手车 4468 | 卖党求荣 4469 | 卖卡 4470 | 卖号 4471 | 卖国 4472 | 卖国 4473 | 卖国唐捷 4474 | 卖国求荣 4475 | 卖外挂 4476 | 卖房 4477 | 卖春 4478 | 卖比 4479 | 卖比 4480 | 卖比|卖 4481 | 卖淫 4482 | 卖淫 4483 | 卖淫|卖 4484 | 卖淫嫖娼 4485 | 卖淫嫖娼 4486 | 卖游戏币 4487 | 卖财富 4488 | 卖软件 4489 | 卖逼 4490 | 卖逼 4491 | 卖逼|卖 4492 | 南京军区 4493 | 南华早报 4494 | 南坝立交桥维吾尔族暴乱 4495 | 南大自由論壇 4496 | 南大自由论坛 4497 | 南大自由论坛 4498 | 南大论坛 4499 | 南波杏 4500 | 南波杏 4501 | 南波杏|南 4502 | 南港&警察&垃圾站&老奶奶 4503 | 南港&警察&垃圾站&老奶奶 4504 | 南港&警察&垃圾站&老奶奶|南 4505 | 南联盟 4506 | 南联盟 4507 | 南蛮 4508 | 南蛮子 4509 | 南蛮子 4510 | 南蠻子 4511 | 南街村 4512 | 博彩 4513 | 博彩 4514 | 博彩|博 4515 | 博訊 4516 | 博讯 4517 | 博讯 4518 | 博讯|博 4519 | 占领台湾 4520 | 卡宾枪 4521 | 卡斯特罗 4522 | 卡通美女淫乱 4523 | 卡通美女淫乱 4524 | 卡通色图 4525 | 卡通色图 4526 | 卢展工 4527 | 卢沟桥 4528 | 卢沟桥 4529 | 卢越刚 4530 | 卧槽 4531 | 卧艹 4532 | 卫生巾 4533 | 卫生部 4534 | 卫生部 4535 | 卫留成 4536 | 卫藏 4537 | 卫藏 4538 | 印尼事件 4539 | 印尼伊斯兰祈祷团 4540 | 印尼屠华 4541 | 印度佛学院 4542 | 印度佛学院 4543 | 印度佛学院|印 4544 | 印度神油 4545 | 印章 4546 | 卵 4547 | 卵子 4548 | 历史不会忘记 4549 | 历史不会忘记 4550 | 历史不会忘记|历 4551 | 历史的伤口 4552 | 历史的大爆炸——“六四”事件全景实录 4553 | 历史的沉思 4554 | 历史的爆炸 4555 | 历史的爆炸 4556 | 历史的震撼 4557 | 压迫 4558 | 厕奴 4559 | 厕奴 4560 | 厕奴|厕 4561 | 厕所偷拍 4562 | 厕所偷拍 4563 | 厕所盗摄 4564 | 厕所盗摄 4565 | 厕所盗摄|厕 4566 | 厙 4567 | 原味丝袜 4568 | 原味丝袜 4569 | 原味丝袜|原 4570 | 原味内衣 4571 | 原子弹 4572 | 原子弹 4573 | 原子弹|原 4574 | 原子弹制作方法 4575 | 原子弹制作方法 4576 | 原子弹制作方法|原 4577 | 原子弹的DIY制作 4578 | 原子弹的DIY制作 4579 | 原子弹的DIY制作|原 4580 | 原子弹的简易制法 4581 | 原子弹的简易制法 4582 | 原子弹的简易制法|原 4583 | 原子能机构 4584 | 原子能机构 4585 | 原教旨主义 4586 | 原教旨主义 4587 | 原教旨主义|原 4588 | 原音铃声 4589 | 去中央 4590 | 去他妈 4591 | 去你妈 4592 | 去你妈的 4593 | 去你妈的 4594 | 去你媽的 4595 | 去你的 4596 | 去她妈 4597 | 去妳妈 4598 | 去妳的 4599 | 去屎 4600 | 去死 4601 | 去死 4602 | 去车仑工力 4603 | 去车仑工力 4604 | 去车仑工力|去 4605 | 参事室 4606 | 参事室 4607 | 参加者回忆录 4608 | 参加齐撑粤语大行动 4609 | 参加齐撑粤语大行动 4610 | 参加齐撑粤语大行动|参 4611 | 参谋本部 4612 | 参谋本部 4613 | 参谋本部|参 4614 | 參加齊撐粵語大行動 4615 | 參加齊撐粵語大行動 4616 | 參加齊撐粵語大行動|參 4617 | 叉叉的 4618 | 友好的魯德 4619 | 友情告示 4620 | 双倍奖励 4621 | 双倍经验 4622 | 双十节 4623 | 双十节 4624 | 双峰微颤 4625 | 双掌进洞 4626 | 双掌进洞 4627 | 双掌进洞|双 4628 | 双插多P 4629 | 双插多P 4630 | 双插多P|双 4631 | 双洞齐插 4632 | 双洞齐插 4633 | 双洞齐插|双 4634 | 双穴齐插 4635 | 双穴齐插 4636 | 双穴齐插|双 4637 | 双腿间的禁地 4638 | 双腿间的禁地 4639 | 双腿间的禁地|双 4640 | 双臀 4641 | 双规 4642 | 双飞 4643 | 双飞 4644 | 双马尾 4645 | 双龙入洞 4646 | 双龙入洞 4647 | 双龙入洞|双 4648 | 反party 4649 | 反人类 4650 | 反人类 4651 | 反人類 4652 | 反党 4653 | 反党 4654 | 反党|反 4655 | 反共 4656 | 反共 4657 | 反共|反 4658 | 反分裂 4659 | 反动 4660 | 反华 4661 | 反华 4662 | 反华|反 4663 | 反右运动 4664 | 反右运动 4665 | 反右运动|反 4666 | 反国家 4667 | 反奥 4668 | 反官倒 4669 | 反富士康同盟联合会 4670 | 反富士康同盟联合会 4671 | 反富士康同盟联合会|反 4672 | 反对磁悬浮 4673 | 反对磁腰浮 4674 | 反封鎖 4675 | 反封鎖技術 4676 | 反封锁 4677 | 反封锁 4678 | 反封锁技术 4679 | 反封锁技术 4680 | 反恐委员会 4681 | 反恐委员会 4682 | 反抗中共暴政 4683 | 反攻大陆 4684 | 反政府 4685 | 反政府 4686 | 反日 4687 | 反日 4688 | 反日联盟 4689 | 反日联盟 4690 | 反社会 4691 | 反社会 4692 | 反社會 4693 | 反腐敗論壇 4694 | 反腐败 4695 | 反腐败论坛 4696 | 反腐败论坛 4697 | 反華 4698 | 反華 4699 | 反華|反 4700 | 反雷达测速 4701 | 反革命 4702 | 反革命乱 4703 | 反革命乱 4704 | 反革命暴乱 4705 | 反革命暴乱 4706 | 反革命暴乱|反 4707 | 反革命暴亂 4708 | 反革命暴亂 4709 | 反革命暴亂|反 4710 | 反黨 4711 | 反黨 4712 | 反黨|反 4713 | 发~票 4714 | 发仑 4715 | 发伦 4716 | 发伦 4717 | 发伦|发 4718 | 发伦功 4719 | 发伦功 4720 | 发售 4721 | 发囵 4722 | 发国难财 4723 | 发展研究中心 4724 | 发情 4725 | 发愣 4726 | 发愣 4727 | 发抡 4728 | 发抡 4729 | 发抡功 4730 | 发抡功 4731 | 发改委 4732 | 发改委 4733 | 发正念 4734 | 发正念 4735 | 发沦 4736 | 发浪 4737 | 发浪 4738 | 发浪|发 4739 | 发生关系 4740 | 发生暴动 4741 | 发瞟 4742 | 发票,冰粉,性奴,反共 4743 | 发纶 4744 | 发论 4745 | 发论 4746 | 发论|发 4747 | 发论公 4748 | 发论公 4749 | 发论功 4750 | 发论功 4751 | 发论工 4752 | 发课 4753 | 发财诗 4754 | 发轮 4755 | 发轮 4756 | 发轮|发 4757 | 发骚 4758 | 发骚 4759 | 叔嫂肉欲 4760 | 叔嫂肉欲 4761 | 受虐狂 4762 | 变态 4763 | 叙利亚 4764 | 叛逃&美领馆 4765 | 口 交 4766 | 口交 4767 | 口交 4768 | 口交|口 4769 | 口交放尿 4770 | 口交放尿 4771 | 口内爆射 4772 | 口内爆射 4773 | 口内爆射|口 4774 | 口射 4775 | 口射 4776 | 口射|口 4777 | 口暴 4778 | 口暴 4779 | 口暴|口 4780 | 口活 4781 | 口活 4782 | 口活|口 4783 | 口淫 4784 | 口淫 4785 | 口淫|口 4786 | 口爆 4787 | 口爆 4788 | 口爆|口 4789 | 口爆吞精 4790 | 口爆吞精 4791 | 口蹄疫 4792 | 古兰经 4793 | 古怪歌 4794 | 古月动车 4795 | 古月动车 4796 | 古月北戴河股东大会十八大 4797 | 古月北戴河股东大会十八大 4798 | 古都光 4799 | 古都光 4800 | 古都光|古 4801 | 古龍祭壇 4802 | 另类淫乱 4803 | 另类淫乱 4804 | 叫小姐 4805 | 叫床 4806 | 叫床 4807 | 叫床|叫 4808 | 叫我35号投手 4809 | 叫我35号投手 4810 | 叫我35号投手江一 4811 | 叫春 4812 | 叫春 4813 | 叫春|叫 4814 | 叫晶晶的女孩 4815 | 叫鸡 4816 | 叫鸡 4817 | 叫鸡|叫 4818 | 召会 4819 | 召奸 4820 | 召奸 4821 | 召奸|召 4822 | 可卡 4823 | 可卡 4824 | 可卡|可 4825 | 可卡叶 4826 | 可卡叶 4827 | 可卡因 4828 | 可卡因 4829 | 可口可乐 4830 | 可待因 4831 | 可待因 4832 | 可怜的维吾尔人 4833 | 可怜的维吾尔人 4834 | 可怜的维吾尔人|可 4835 | 可燃物 4836 | 台*湾 4837 | 台du 4838 | 台wan 4839 | 台中 4840 | 台军 4841 | 台军 4842 | 台军|台 4843 | 台办 4844 | 台办 4845 | 台北 4846 | 台南 4847 | 台商 4848 | 台完 4849 | 台弯 4850 | 台毒 4851 | 台海 4852 | 台海 4853 | 台海危机 4854 | 台海危机 4855 | 台海危机|台 4856 | 台海大战 4857 | 台海局势 4858 | 台海战争 4859 | 台海统一 4860 | 台海问题 4861 | 台湾 4862 | 台湾 4863 | 台湾18DY电影 4864 | 台湾18DY电影 4865 | 台湾8DY电影|台 4866 | 台湾党 4867 | 台湾公投 4868 | 台湾公投 4869 | 台湾共产党 4870 | 台湾共合国 4871 | 台湾共和国 4872 | 台湾国 4873 | 台湾图博之友会 4874 | 台湾图博之友会 4875 | 台湾图博之友会|台 4876 | 台湾岛 4877 | 台湾岛万岁 4878 | 台湾岛国 4879 | 台湾帝国 4880 | 台湾建国 4881 | 台湾建国运动组织 4882 | 台湾建国运动组织 4883 | 台湾建国运动组织|台 4884 | 台湾政论区 4885 | 台湾政论区 4886 | 台湾民国 4887 | 台湾狗 4888 | 台湾狗 4889 | 台湾独 4890 | 台湾独 4891 | 台湾独|台 4892 | 台湾独立 4893 | 台湾独立 4894 | 台湾猪 4895 | 台湾联盟 4896 | 台湾自由 4897 | 台湾自由联盟 4898 | 台湾自由联盟 4899 | 台湾自由联盟|台 4900 | 台湾问题 4901 | 台湾间谍 4902 | 台湾间谍 4903 | 台湾间谍|台 4904 | 台湾青年独立联盟 4905 | 台湾青年独立联盟 4906 | 台湾青年独立联盟|台 4907 | 台独 4908 | 台独 4909 | 台独|台 4910 | 台独万岁 4911 | 台独党 4912 | 台独党 4913 | 台独党纲 4914 | 台独党纲 4915 | 台独分子 4916 | 台獨 4917 | 台獨 4918 | 台百度湾 4919 | 台盟 4920 | 台盟 4921 | 台联 4922 | 台联 4923 | 史莲喜 4924 | 史萊姆 4925 | 史萊姆王 4926 | 右派 4927 | 右派 4928 | 右派|右 4929 | 叶兵 4930 | 叶冬松 4931 | 叶剑英 4932 | 叶剑英 4933 | 叶城 4934 | 叶山丽子 4935 | 叶山丽子 4936 | 叶山丽子|叶 4937 | 叶青纯 4938 | 号码百事通 4939 | 司徒华 4940 | 司徒华 4941 | 司徒華 4942 | 司法部 4943 | 司法部 4944 | 司法院 4945 | 司法院 4946 | 司法院|司 4947 | 司馬晋 4948 | 司馬璐 4949 | 司马义·铁力瓦尔地 4950 | 司马晋 4951 | 司马晋 4952 | 司马璐 4953 | 司马璐 4954 | 叼你 4955 | 叼你妈 4956 | 叼你媽 4957 | 叼妈B 4958 | 吃大便 4959 | 吃女婴 4960 | 吃女婴 4961 | 吃女婴|吃 4962 | 吃屎 4963 | 吃精 4964 | 吃精 4965 | 吃精|吃 4966 | 吃鸡巴 4967 | 吃鸡巴 4968 | 各个银行全称 4969 | 各种发票 4970 | 合法财产 4971 | 吉沢明步 4972 | 吉沢明步 4973 | 吉沢明步|吉 4974 | 吉泽明步 4975 | 吉泽明步 4976 | 吉泽明步|吉 4977 | 吉田美香子 4978 | 吉田美香子 4979 | 吉田美香子|吉 4980 | 吉跋猫 4981 | 同一教 4982 | 同修 4983 | 同修 4984 | 同土延寿李KQ康师傅北戴河会议德江 4985 | 同土延寿李KQ康师傅北戴河会议德江 4986 | 同性恋 4987 | 同性恋 4988 | 同性恋|同 4989 | 同房 4990 | 同胞书 4991 | 名单18大 4992 | 名单18大 4993 | 名单政治大戏 4994 | 名单政治大戏 4995 | 名宅 4996 | 名山县 4997 | 名师 4998 | 名穴 4999 | 名穴 5000 | 名穴|名 5001 | 后勤集团 5002 | 后台颁奖员 5003 | 后庭 5004 | 后庭 5005 | 后庭|后 5006 | 后穴 5007 | 吐鲁番鲁克沁 5008 | 向巴平措 5009 | 向巴平措 5010 | 吕京花 5011 | 吕京花 5012 | 吕祖善 5013 | 吕秀莲 5014 | 吕秀莲 5015 | 吕迎春 5016 | 吗哪 5017 | 吗啡 5018 | 吗啡 5019 | 吗啡|吗 5020 | 吗啡片 5021 | 吗啡片 5022 | 吗啡碱 5023 | 吗啡碱 5024 | 吗的 5025 | 吞精 5026 | 吞精 5027 | 吞精|吞 5028 | 吞精骚妹 5029 | 吞精骚妹 5030 | 吟稻雁 5031 | 含屌 5032 | 含屌 5033 | 含屌|含 5034 | 含捻 5035 | 听说西藏 5036 | 吮吸 5037 | 吮吸 5038 | 吮屌 5039 | 吮屌 5040 | 吮屌|吮 5041 | 启程大礼 5042 | 启蒙派 5043 | 吳仁華 5044 | 吳學燦 5045 | 吳學璨 5046 | 吳宏達 5047 | 吳弘達 5048 | 吳志芳 5049 | 吳敦義 5050 | 吳方城 5051 | 吳淑珍 5052 | 吳百益 5053 | 吳育升 5054 | 吴 仪 5055 | 吴 仪 5056 | 吴仁华 5057 | 吴仁华 5058 | 吴仪 5059 | 吴仪 5060 | 吴双战 5061 | 吴学灿 5062 | 吴学灿 5063 | 吴学璨 5064 | 吴学璨 5065 | 吴宏达 5066 | 吴宏达 5067 | 吴官正 5068 | 吴官正 5069 | 吴官正|吴 5070 | 吴定富 5071 | 吴帮国 5072 | 吴弘达 5073 | 吴弘达 5074 | 吴新雄 5075 | 吴方城 5076 | 吴方城 5077 | 吴毓萍 5078 | 吴爱 5079 | 吴玉良 5080 | 吴百益 5081 | 吴百益 5082 | 吴胜利 5083 | 吴邦国 5084 | 吴邦国 5085 | 吴邦国|吴 5086 | 吴镇南 5087 | 吸收的圖騰 5088 | 吸毒 5089 | 吸毒 5090 | 吸精 5091 | 吸精 5092 | 吸精|吸 5093 | 吸精少女 5094 | 吸精少女 5095 | 吸血獸 5096 | 吸血莱恩 5097 | 吸金瓶国母 5098 | 吸金瓶国母 5099 | 吸鸟 5100 | 吸鸟 5101 | 吸鸟|吸 5102 | 吹喇叭 5103 | 吹喇叭 5104 | 吹气娃娃 5105 | 吹气娃娃 5106 | 吹气娃娃|吹 5107 | 吹箫 5108 | 吹箫美女 5109 | 吹箫美女 5110 | 吹箫美女|吹 5111 | 吹箫自拍 5112 | 吹箫自拍 5113 | 吹箫自拍|吹 5114 | 吹簫 5115 | 吹萧 5116 | 吹萧 5117 | 吹萧|吹 5118 | 吾吉买买提 5119 | 吾吉买买提 5120 | 吾尔 5121 | 吾尔凯希 5122 | 吾尔凯希 5123 | 吾尔凯希|吾 5124 | 吾尔凯西 5125 | 吾尔凯西 5126 | 吾尔凯西|吾 5127 | 吾尔开希 5128 | 吾尔开希 5129 | 吾尔开希|吾 5130 | 吾尔开西 5131 | 吾爾凱希 5132 | 吾爾凱希 5133 | 吾爾凱希|吾 5134 | 吾爾開希 5135 | 吾爾開希 5136 | 吾爾開希|吾 5137 | 吾紧套 5138 | 呂京花 5139 | 呂秀蓮 5140 | 呂秀蓮 5141 | 呆 子 5142 | 呆卵 5143 | 呆子 5144 | 告中国人民解放军广大官兵书 5145 | 告全体网民书 5146 | 告全国公民书&支持政改 5147 | 告全国同胞书 5148 | 告全国网友书 5149 | 告全国网友书 5150 | 告全国网友书|告 5151 | 告全国网民书 5152 | 告全国网民书 5153 | 告全国网民书|告 5154 | 告全国股民同胞书 5155 | 告示 5156 | 告示 5157 | 告示消息 5158 | 告西藏同胞 5159 | 呋塞米 5160 | 周健康 5161 | 周六性吧 5162 | 周六性吧 5163 | 周刊纪事 5164 | 周司麻 5165 | 周司麻 5166 | 周天法 5167 | 周天法 5168 | 周守 5169 | 操你 5170 | 呆逼 5171 | 蠢逼 5172 | SB 5173 | 干你 5174 | 你大爷 5175 | 中国 5176 | 美国 5177 | 共产党 5178 | 台湾 5179 | 政治 5180 | 乌克兰 5181 | 俄罗斯 5182 | 伊朗 5183 | 巴勒斯坦 5184 | 以色列 --------------------------------------------------------------------------------