# Codemao Lang
### 当前版本列表:
v1.0.0
v1.1.0
v1.1.1
### 更新日志:
```
v1.0.0:
(1).正式发布
v1.1.0:
(1).user类新增发帖、回帖、回复等论坛功能
(2).修改user类messages方法
(3).新增post、workshop类
v1.1.1:
(1).修复了低版本Python无法运行的问题
```
## 下载 Codemao Lang
### 1.直接下载文件(推荐)
[下载 codemaoLang.py](http://tobtq.top/file/codemaoLang.py)
### 2.使用 [pip](https://pypi.org/project/codemaoLang/) 下载
`python -m pip install codemaoLang`
### 3.使用 [Github](https://github.com/MinesomeBTQ/CodemaoLang) 下载
## 使用文档 (v1.1.1)
### 1. user 类
用于通过账号和密码登录用户并获取和修改信息
#### (1) 参数
`identity: str` - 账户 手机号/用户名/邮箱
`password: str` - 账户 密码
示例:
```python
from codemaoLang import *
usr = user('账号', '密码')
```
#### 注意:以下文档中的 usr 均代表一个已经登录的 user() 实例
#### (2) 变量
| 变量名 | 类型 | 解释 |
|-----------------|------|-------------|
| usr.identity | str | 账号 |
| usr.password | str | 密码 |
| usr.ifLogon | bool | 是否登录 |
| usr.id | int | ID |
| usr.nickname | str | 昵称 |
| usr.avatar_url | str | 头像链接 |
| usr.fullname | str | 真实姓名 |
| usr.birthday | int | 生日时间戳 |
| usr.sex | int | 性别(0为女,1为男) |
| usr.qq | str | QQ 号码 |
| usr.description | str | 自我描述 |
#### (3) 集合
##### auth(认证):
| 变量名 | 类型 | 解释 |
|---------------------------|------|--------------------|
| usr.auth.data | dict | 所有信息组成的字典 |
| usr.auth.token | str | token |
| usr.auth.phone_number | str | 手机号(如:123****4567) |
| usr.auth.has_password | bool | 是否设置密码 |
| usr.auth.is_weak_password | bool | 是否为弱密码 |
##### info(信息):
| 变量名 | 类型 | 解释 |
|----------------------|------|-------------|
| usr.info.data | dict | 所有信息组成的字典 |
| usr.info.id | int | ID |
| usr.info.nickname | str | 昵称 |
| usr.info.avatar | str | 头像链接 |
| usr.info.email | bool | 邮箱(空) |
| usr.info.gold | str | 金币数 |
| usr.info.qq | str | QQ号码(空) |
| usr.info.real_name | str | 真实姓名 |
| usr.info.sex | str | 性别(M为男,F为女) |
| usr.info.description | str | 自我描述 |
| usr.info.level | int | 用户等级 |
#### (4)方法
##### 修改用户信息
| 方法名 | 用法 |
|--------------------------------|---------------|
| usr.setNickname(value: str) | 设置昵称 |
| usr.setFullname(value: str) | 设置全名 |
| usr.setDescription(value: str) | 设置自我描述 |
| usr.setSex(value: int) | 设置性别(1为男,0为女) |
| usr.setBirthday(value: int) | 设置生日时间戳 |
| usr.setAvatar_url(value: str) | 设置用户头像URL |
##### 修改用户密码
`usr.setPassword(password: str)`
示例:
```python
from codemaoLang import *
usr = user('账号', '当前密码')
usr.setPassword('新密码')
```
##### 退出登录
`usr.logout()`
PS:建议退出后删除此对象
示例:
```python
from codemaoLang import *
usr = user('账号', '密码')
usr.logout()
del usr
```
##### 刷新信息
`usr.reload()` - 用于重新刷新信息,以同步用户在其他地方修改信息
##### 获取消息
`usr.messages()`
返回一个item对象,包含以下值
| 变量名 | 类型 | 解释 |
|------------------------------|------|-----------|
| usr.messages().data | dict | 所有信息组成的字典 |
| usr.messages().comment_reply | int | 评论与回复 |
| usr.messages().like_fork | int | 赞与被购买 |
| usr.messages().system | int | 系统消息 |
示例:
```python
from codemaoLang import *
usr = user('账号', '密码')
print(usr.messages().data)
# 若无消息,则输出为 {'comment_reply': 0, 'like_fork': 0, 'system': 0}
```
##### 论坛发帖
`usr.post(title: str, content: str, board_name: str, studio_id: str = None)`
###### 参数说明
title: 帖子标题 _(长度必须在5-50字之间)_
content: 帖子内容 _(应为HTML格式,长度必须不小于10字)_
board_name: 要将帖子发布到的板块 _(热门活动,积木编程乐园,工作室&师徒,你问我答,神奇代码岛,图书馆,CoCo,Python乐园,源码精灵,NOC编程猫比赛,灌水池塘,通天塔,训练师小课堂等)_
studio_id(可选): 活动 ID _(当且仅当board_name为热门活动时,此信息有效,帖子会发布在相应活动的讨论区)_
###### 返回值
若发帖成功,则返回帖子id,类型为 str
##### 删除帖子
`usr.del_post(post_id: str | int)`
###### 参数说明
post_id: 要删除的帖子的id _(可以在帖子链接尾部数字获取)_
##### 回帖
`usr.reply_post(post_id: str | int, content: str)`
###### 参数说明
post_id: 要回复的帖子的id _(可以在帖子链接尾部数字获取)_
content: 回帖内容 _(应为HTML格式)_
###### 返回值
若发帖成功,则返回回帖id,类型为 str
##### 回复
`usr.reply_reply(reply_id: str | int, content: str, parent_id: int = 0)`
###### 参数说明
reply_id: 要回复的回帖的id _(可以在帖子链接尾部数字获取)_
content: 回帖内容 _(应为HTML格式)_
parent_id(可选):回复的其他回复id _(默认为 0,即直接回复回帖,否则应设置为已有回复的id,显示为:“xxx 回复 xxx”)_
示例:
```python
from codemaoLang import *
import time
usr = user('账号', '密码') # 登录
post_id = usr.post('标题(Title)', '内容(Content)', '灌水池塘') # 发布帖子
reply_id = usr.reply_post(post_id, '回帖')
usr.reply_reply(reply_id, '回复')
time.sleep(60) # 等待60秒
usr.del_post(post_id) # 删除帖子
```
###### 返回值
若发帖成功,则返回回复id,类型为 str
### 2. another 类
用于通过id获取用户信息(包括公开信息、代表作信息、荣誉信息、作品列表、收藏作品列表、关注列表、粉丝列表)
#### (1) 参数
`user_id: str | int` - 账户 id
示例:
```python
from codemaoLang import *
usr = another(6595064) # 作者的编程猫id,可替换为任意有效的编程猫id
```
#### 注意:以下文档中的 usr 均代表一个有效的 another() 实例
#### (2) 变量
| 变量名 | 类型 | 解释 |
|-------------|-----|------|
| usr.user_id | str | 用户ID |
#### (3) 集合
##### info(信息)
| 变量名 | 类型 | 解释 |
|--------------------------|------|-------------|
| usr.info.data | dict | 所有信息组成的字典 |
| usr.info.id | int | ID |
| usr.info.nickname | str | 昵称 |
| usr.info.avatar | str | 头像链接 |
| usr.info.sex | int | 性别(1为男,0为女) |
| usr.info.description | str | 自我描述 |
| usr.info.doing | str | 正在做的事 |
| usr.info.preview_work_id | int | 代表作id |
| usr.info.level | int | 等级 |
##### work(代表作)
| 变量名 | 类型 | 解释 |
|------------------|------|-----------|
| usr.work.data | dict | 所有信息组成的字典 |
| usr.work.id | int | 作品ID |
| usr.work.name | str | 作品名 |
| usr.work.preview | str | 作品图片链接 |
##### honor(荣誉信息)
| 变量名 | 类型 | 解释 |
|-------------------------------------|------|------------------|
| usr.honor.data | dict | 所有信息组成的字典 |
| usr.honor.attention_status | bool | 是否关注该用户 |
| usr.honor.block_total | int | nemo 作品积木总数 |
| usr.honor.re_created_total | int | 作品被再创作总数 |
| usr.honor.attention_total | int | 该用户关注的人总数 |
| usr.honor.fans_total | int | 该用户的粉丝总数 |
| usr.honor.collected_total | int | 作品被收藏总数 |
| usr.honor.liked_total | int | 作品被点赞总数 |
| usr.honor.view_times | int | 作品被浏览总数 |
| usr.honor.author_level | int | 该用户等级 |
| usr.honor.is_official_certification | int | 是否为官方帐户(0为否,1为是) |
| usr.honor.subject_id | int | 用户工作室 ID |
| usr.honor.work_shop_name | str | 用户工作室名 |
| usr.honor.work_shop_level | int | 用户工作室等级 |
| usr.honor.like_score | int | 用户点赞分 |
| usr.honor.collect_score | int | 用户收藏分 |
| usr.honor.fork_score | int | 用户再创作分 |
#### (4) 类
##### works(作品列表)
-- `data` 所有数据组成的字典
-- `items` 所有作品对象组成的列表, 每一项都为 item 对象
-- `getItem(number: int)` 获取作品列表里的第几项
-- `item`对象:
-- 包含以下值:
| 变量名 | 类型 | 解释 |
|---------------|------|----------------------|
| data | dict | 所有信息组成的字典 |
| id | int | 作品ID |
| type | int | 类型(1为Kitten, 8为Nemo) |
| work_name | str | 作品名 |
| preview | str | 封面图片链接 |
| view_times | int | 被浏览次数 |
| collect_times | int | 被收藏次数 |
| liked_times | int | 被点赞次数 |
| parent_id | int | 原创:0;再创作:原作品 ID |
| fork_enable | bool | 是否允许再创作 |
| fork_times | int | 被再创作次数 |
| publish_time | int | 作品发布时间戳 |
| description | str | 作品介绍 |
##### collections(收藏列表)
-- `data` 所有数据组成的字典
-- `items` 所有收藏作品对象组成的列表, 每一项都为 item 对象
-- `getItem(number: int)` 获取收藏作品列表里的第几项
-- `item`对象:
-- 包含以下值:
| 变量名 | 类型 | 解释 |
|-------------------|------|------------------------|
| data | dict | 所有信息组成的字典 |
| id | int | 作品ID |
| name | str | 作品名 |
| preview | str | 作品封面图片链接 |
| user_id | int | 作者ID |
| nickname | str | 作者昵称 |
| avatar_url | str | 作者头像链接 |
| views_count | int | 作品被浏览次数 |
| collections_count | int | 作品被收藏次数 |
| likes_count | int | 作品被点赞次数 |
| is_deleted | bool | 是否被删除 |
| publish_time | int | 作品发布时间戳 |
| work_type | int | 作品类型(1为Kitten, 8为Nemo) |
| description | str | 作品介绍 |
##### followers(关注列表)
-- `data` 所有数据组成的字典
-- `items` 所有关注对象组成的列表, 每一项都为 item 对象
-- `getItem(number: int)` 获取关注列表里的第几项
-- `item`对象:
-- 包含以下值:
| 变量名 | 类型 | 解释 |
|-------------|------|-----------|
| data | dict | 所有信息组成的字典 |
| id | int | 用户ID |
| nickname | str | 用户昵称 |
| avatar_url | str | 用户头像链接 |
| n_works | int | 用户作品总数 |
| total_likes | int | 用户被点赞总数 |
| is_followed | bool | 是否关注该用户 |
| description | str | 用户自我描述 |
##### fans(粉丝列表)
-- 与 followers 用法完全一样
#### (5) 方法
##### 刷新信息
`usr.reload()` - 用于重新刷新信息,以同步用户在其他地方修改信息
### 3.board类
用于获取论坛所有面板的信息
#### (1) boards
类型:list
包含所有论坛板块的item对象
item对象包含以下值
| 变量名 | 类型 | 解释 |
|----------|------|-----------|
| data | dict | 所有信息组成的字典 |
| id | str | 板块id |
| is_hot | bool | 是否为热门板块 |
| icon_url | str | 板块图标 URL |
| name | str | 板块名称 |
#### (2) getBoardId(board_id: str | int)
用于通过id获取指定板块信息
###### 参数:
board_id:板块id
###### 返回值:
一个集合,包含以下值
| 变量名 | 类型 | 解释 |
|---------------|------|-----------|
| id | str | 板块 ID |
| name | str | 板块名称 |
| description | str | 板块描述 |
| icon_url | str | 板块图标 URL |
| is_hot | bool | 是否为热门板块 |
| n_posts | int | 板块中帖子总数 |
| n_discussions | int | 板块中帖子回复总数 |
#### (3) getBoardName(board_id: str | int)
用于通过板块名获取指定板块信息
###### 参数:
board_id:板块名 _(热门活动,积木编程乐园,工作室&师徒,你问我答,神奇代码岛,图书馆,CoCo,Python乐园,源码精灵,NOC编程猫比赛,灌水池塘,通天塔,训练师小课堂等)_
###### 返回值:
一个集合,包含以下值
| 变量名 | 类型 | 解释 |
|---------------|------|-----------|
| id | str | 板块 ID |
| name | str | 板块名称 |
| description | str | 板块描述 |
| icon_url | str | 板块图标 URL |
| is_hot | bool | 是否为热门板块 |
| n_posts | int | 板块中帖子总数 |
| n_discussions | int | 板块中帖子回复总数 |
### 4. post 类
用于通过id获取指定论坛帖子信息
#### (1) 参数
`post_id: str | int` - 帖子 id(可以在帖子链接尾部的数字获得)
#### 注意:以下文档中的 post 均代表一个有效的 post() 实例
#### (2) 变量
| 变量名 | 类型 | 解释 |
|--------------------|-------|--------------|
| post.data | dict | 所有信息组成的字典 |
| post.ask_help_flag | int | 是否为求助帖 |
| post.board_id | str | 帖子所在板块 ID |
| post.board_name | str | 帖子所在板块名称 |
| post.content | str | 帖子内容 |
| post.created_at | int | 发布时间戳 |
| post.id | str | 帖子 ID |
| post.is_authorized | bool | 是否为官方贴 |
| post.is_featured | bool | 是否为精选贴 |
| post.is_hotted | bool | 是否为热门贴 |
| post.is_pinned | bool | 是否为置顶帖 |
| post.n_comments | int | (每个回帖下的)评论数量 |
| post.n_replies | int | 回帖数量 |
| post.n_views | int | 浏览次数 |
| post.title | str | 帖子标题 |
| post.tutorial_flag | int | 是否为教程帖 |
| post.updated_at | int | 更新时间戳 |
| post.user | class | _见下文_ |
#### (3) 内置 user 类
内涵帖子发布者消息,包含以下值
| 变量名 | 类型 | 解释 |
|----------------------|------|-----------|
| post.data | dict | 所有信息组成的字典 |
| post.id | str | 用户 ID |
| post.nickname | str | 用户昵称 |
| post.avatar_url | str | 用户头像 URL |
| post.subject_id | int | 用户工作室 ID |
| post.work_shop_name | str | 用户工作室名 |
| post.work_shop_level | str | 用户工作室等级 |
| post.wuhan_medal | bool | 是否有武汉勋章 |
| post.has_signed | bool | 是否签订友好协议 |
### 5. workshop 类
用于通过id获取指定工作室信息
#### (1) 参数
`workshop_id: str | int` - 工作室 id(可以在工作室链接尾部的数字获得)
```python
from codemaoLang import *
ws = workshop(813) # LXYZ工作室的id,可替换为任意有效的工作室id
```
#### 注意:以下文档中的 ws 均代表一个有效的 workshop() 实例
#### (2) 变量
| 变量名 | 类型 | 解释 |
|---------------------|------|----------------|
| ws.data | dict | 所有信息组成的字典 |
| ws.id | int | 工作室id |
| ws.shop_id | int | 工作室识别码 |
| ws.name | str | 工作室名称 |
| ws.total_score | int | 工作室总分 |
| ws.preview_url | str | 工作室图片 URL |
| ws.description | str | 工作室介绍 |
| ws.n_works | int | 工作室作品数量 |
| ws.n_views | int | 工作室被浏览次数 |
| ws.level | int | 工作室等级 |
| ws.status | int | 工作室状态 |
| ws.latest_joined_at | int | 最后有人加入的时间戳 |
| ws.created_at | int | 工作室创建时间戳 |
| ws.updated_at | int | 工作室主页最后被访问的时间戳 |
### 6. random_nickname 函数
用于生成一个随机昵称
示例:
```python
from codemaoLang import *
print(random_nickname()) # 如:浪漫的飞电鼠ZRA5 务实的潘达熊9xKs
```
##### - BT.Q 2022.3.15