Giter Site home page Giter Site logo

twikoojs / twikoo Goto Github PK

View Code? Open in Web Editor NEW
1.3K 6.0 254.0 3.42 MB

💬 一个简洁、安全、免费的静态网站评论系统 | A simple, safe, free comment system.

Home Page: http://twikoo.js.org

License: MIT License

JavaScript 77.65% CSS 0.74% Vue 21.53% Dockerfile 0.08%
cloudbase hexo comment-system vue twikoojs comment vercel

twikoo's Introduction

Twikoo


一个简洁安全免费的静态网站评论系统。
A simple, safe, free comment system.
简体中文 | English

特色 | Features

点击展开

简单

  • 免费搭建(使用云开发 / Vercel / 私有部署评论后台)
  • 简单部署(支持云开发 / Vercel 一键部署)

易用

  • 支持回复、点赞
  • 无需额外适配,支持搭配浅色主题与深色主题使用
  • 支持 API 调用,批量获取文章评论数、最新评论
  • 访客在昵称栏输入 QQ 号,会自动补全 QQ 昵称和 QQ 邮箱
  • 访客填写数字 QQ 邮箱,会使用 QQ 头像作为评论头像
  • 支持评论框粘贴图片(可禁用)
  • 支持插入图片(可禁用)
  • 支持去不图床、云开发图床
  • 支持插入表情(可禁用)
  • 支持 Ctrl + Enter 快捷回复
  • 评论框内容实时保存草稿,刷新不会丢失
  • 支持 Katex 公式
  • 支持按语言的代码高亮

安全

  • 隐私信息安全(通过云函数控制敏感字段(邮箱、IP、环境配置等)不会泄露)
  • 支持 Akismet 垃圾评论检测(需自行注册 akismet.com
  • 支持腾讯云内容安全垃圾评论检测(需自行注册 腾讯云内容安全
  • 支持人工审核模式
  • 防 XSS 注入
  • 支持限制每个 IP 每 10 分钟最多发表多少条评论

即时

  • 支持邮件提醒(访客和博主)
  • 支持微信提醒(仅针对博主,基于 Server酱,需自行注册)
  • 支持 QQ 提醒(仅针对博主,基于 Qmsg酱,需自行注册)

个性

  • 支持自定义评论框背景图片
  • 支持自定义“博主”标识文字
  • 支持自定义通知邮件模板
  • 支持自定义评论框提示信息(placeholder)
  • 支持自定义表情列表(兼容 OwO 的数据格式
  • 支持自定义【昵称】【邮箱】【网址】必填 / 选填
  • 支持自定义代码高亮主题

便捷管理

  • 内嵌式管理面板,通过密码登录,可方便地查看评论、隐藏评论、删除评论、修改配置
  • 支持隐藏管理入口,通过输入暗号显示
  • 支持从 Valine、Artalk、Disqus 导入评论

缺点

  • 不支持 IE

预览 | Preview

点击展开

评论

评论

评论管理

评论管理

推送通知

推送通知

快速上手 | Quick Start

有关详细教程,请查看快速上手

如果你想获取更新动态、建言献策、参与测试,欢迎加入讨论群:1080829142 1080829142

特别感谢 | Special Thanks

图标设计:Maemo Lee

开发 | Development

如果您想在本地二次开发,可以参考以下命令:

yarn dev # 开发 (http://localhost:9820/demo.html)
yarn lint # 代码检查
yarn build # 编译 (dist/twikoo.all.min.js)

如果您的改动能够帮助到更多人,欢迎提交 Pull Request!

国际化 | I18N

支持简体中文、繁体中文、English。欢迎提交翻译 PR

许可 | License

MIT License

FOSSA Status

twikoo's People

Contributors

0x-matt avatar android-kitkat avatar barry-flynn avatar digitaltwinz avatar eallion avatar efuo avatar emptydreams avatar fossabot avatar gahotx avatar heige-pcloud avatar hoshino-yumetsuki avatar imaegoo avatar jerryc127 avatar kongxiangyiren avatar kuole-o avatar laomaiorg avatar lete114 avatar loohalh avatar luminousdream avatar mercury233 avatar pai233 avatar peter-jxl avatar revincx avatar tianli0 avatar w4j1e avatar weltolk avatar wmz1024 avatar xpoet avatar yumexupanic avatar zyeoman avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

twikoo's Issues

一些问题咨询

  1. 评论框提示的换行好像不能用
    73A2970D-4F3D-414C-8FB9-9CF49FC59CFA
    504F5BE5-1F01-4A49-8A6E-9BBC2AA78E23

  2. 开启图片上传以后,图片会被上传到哪里,在哪里进行管理

管理面板现在操作体验很差

很容易误操作滚动到页面然后管理面和整个网页错位。

建议参考disqus整体侧边弹出,或者整个网页弹出蒙版,这样操作撕裂感会少一些。

npm run deploy 失败

npm run login可以正常运行,也成功授权,但是在运行npm run deploy时失败 ,提示报错为

[counter-get] 部署失败,Environment
??t w i k o o - 0 g k y c w z n 5 b 2 d f 5
not found

在这之前我确信是使用echo 正确写入envId的,全程没有使用过终端以外的内容,更没有用记事本打开过txt文件。
但是等到读取的时候envId却变成了乱码,而且提示找不到相关环境。

想问是否是我 应用部署使用的是 空模板 的关系。

当前文章评论数调用

希望增加「文章评论数」调用html,如当前文章访客数 <span id="twikoo_visitors">0</span> 一样。

另外,可以脑洞打开,当年Wordpress标配的:最新最热随机等文章(显示标题、阅读数、评论数),最热最新随机评论等

关于检测到QQ邮箱时,用来显示QQ头像的相关接口。

通过QQ获取

获取QQ号10001的头像。

https://thirdqq.qlogo.cn/g?b=sdk&nk=10001&s=640

但这样会暴露QQ号。

生成Key链接

获取QQ号10001的Key链接。

暂未找到QQ号直接转Key的算法,只能先通过此链接生成。
也许没有算法才是好事,纯数字一会就算出来字典了。

https://ptlogin2.qq.com/getface?imgtype=4&uin=10001

从返回结果中获得类似以下链接。

https://thirdqq.qlogo.cn/g?b=sdk&k=Vjic48anMfN6ovAxw4eN94w&s=140&t=1555323598

头像大小

使用imgtype=4参数获取到的头像大小为140*140,但可以获取到的头像最大大小为640*640。

可将返回链接中的s=140参数改为s=640实现。

不过评论需要640*640的头像吗……

代码高亮与无刷新加载的兼容问题

描述

无刷新加载是指网页使用了 AjaxPjax 之类的技术。

例如我目前使用的 Butterfly 主题,就内置了对 Pjax 的支持。

代码高亮在这些网页上会有一点小问题。

表现

初次加载 Twikoo,一切正常没有问题。

但前往其他页面后,再次加载 Twikoo

就会发现代码高亮的样式并没有插入到网页中。

导致代码高亮失效。

分析

https://github.com/imaegoo/twikoo/blob/60d0da7998898fe522b6385d387f7008b2786a46/src/js/utils/highlight.js#L15

经过排查,应该是这句判断导致的。

为什么会这样倒是不难想到,是因为 cssEl 这个变量。

代码中判断如果这个变量被赋值,便不再继续运行。

使用无刷新加载的话,在页面内容改变后,样式自然还没有插入到网页中。

但变量在内容改变后依然存在,从而导致不再插入代码高亮样式。

烦请适配ayer

不一定要去github提交PR,我不想随便更新主题,因为随便更新主题容易折腾崩溃,所以能适配当前主题,或者能提供老版本主题添加评论代码,这样更好。谢谢
https://github.com/Shen-Yu/hexo-theme-ayer

————————
2020-12-24更新:后经过思考,如果为了平滑升级主题,那自己修改主题不是一个好办法,所以还是去主题作者的github那边提ISSUES了。

Icarus 博客配置 Twikoo 失败

你好,我参考基于腾讯云,给你的 Icarus 博客配上 Twikoo 评论系统配置好后并没能实现评论显示,评论面板为空白:

Details

image

我注意到最新的云函数是0.5.0,所以相应地将教程中的 https://cdn.jsdelivr.net/npm/[email protected]/dist/twikoo.all.min.js 修改为了 https://cdn.jsdelivr.net/npm/[email protected]/dist/twikoo.all.min.js,但没有效果,然后我将 node_modules 删除并重新安装依赖,也依旧不能解决问题。

F12 显示为请求出错:

twikoo.all.min.js:29 Uncaught (in promise) Error: network request error
    at e.<anonymous> (twikoo.all.min.js:29)
    at twikoo.all.min.js:29
    at Object.next (twikoo.all.min.js:29)
    at a (twikoo.all.min.js:29)

请问下一步我该如何做?(我是从 GitHub 上直接克隆得到的 Icarus 主题)

评论头像问题

自动拉取qq头像应该是为了方便没有在gravatar设置头像的访客
这导致了:我想显示gravatar头像,但是现在却显示qq头像

建议加一个博主专属头像

报错:找不到对应的 FunctionName

你好,我发现评论偶尔会出现报错 {"code":"OPERATION_FAIL","msg":"[FUNCTION_NOT_FOUND] 的情况:

Image

image

F12 信息
Failed to load resource: net::ERR_EMPTY_RESPONSE
twikoo.all.min.js:29 Uncaught (in promise) Error: {"code":"OPERATION_FAIL","msg":"[FUNCTION_NOT_FOUND] 找不到对应的FunctionName."}
    at e.<anonymous> (twikoo.all.min.js:29)
    at twikoo.all.min.js:29
    at Object.next (twikoo.all.min.js:29)
    at a (twikoo.all.min.js:29)

云函数日志
START RequestId:xxx

2021-01-04T08:33:52.200Z 900dbcda-4e67-11eb-8449-5254008bf868 请求方法: COMMENT_GET

2021-01-04T08:33:52.202Z 900dbcda-4e67-11eb-8449-5254008bf868 请求参数: { event: 'COMMENT_GET', url: '/hello-world/' }

2021-01-04T08:33:52.380Z 900dbcda-4e67-11eb-8449-5254008bf868 读取配置失败: { Error: [ResourceNotFound] Db or Table not exist. Please check your request, but if the problem cannot be solved, contact us.

    at Object.exports.E (/var/user/node_modules/@cloudbase/node-sdk/lib/utils/utils.js:24:12)

    at processReturn (/var/user/node_modules/@cloudbase/node-sdk/lib/utils/utils.js:43:19)

    at Object.exports.default (/var/user/node_modules/@cloudbase/node-sdk/lib/utils/httpRequest.js:378:20)

    at process._tickCallback (internal/process/next_tick.js:68:7)

  code: 'DATABASE_COLLECTION_NOT_EXIST',

  requestId: 'xxx' } 

ERROR RequestId:xxx Result:{"errorCode":1,"errorMessage":"user code exception caught","stackTrace":"Error: [ResourceUnavailable.ResourceExist] Table exist. Please check your request, but if the problem cannot be solved, contact us.\n    at Object.exports.E (/var/user/node_modules/@cloudbase/node-sdk/lib/utils/utils.js:24:12)\n    at processReturn (/var/user/node_modules/@cloudbase/node-sdk/lib/utils/utils.js:43:19)\n    at Object.exports.default (/var/user/node_modules/@cloudbase/node-sdk/lib/utils/httpRequest.js:378:20)\n    at process._tickCallback (internal/process/next_tick.js:68:7)","statusCode":430} 

END RequestId:xxx

Report RequestId:xxx Duration:248ms Memory:128MB MemUsage:109.820312MB

[Bug] 无法评论和获取评论

腾讯云后台云函数日志如下:

  • comment-submit
{"errorCode":-1,"errorMessage":"Error: EACCES: permission denied, open '/var/user/index.js'\n    at Object.openSync (fs.js:438:3)\n    at Object.readFileSync (fs.js:343:35)\n    at Object.Module._extensions..js (internal/modules/cjs/loader.js:711:20)\n    at Module.load (internal/modules/cjs/loader.js:600:32)\n    at tryModuleLoad (internal/modules/cjs/loader.js:539:12)\n    at Function.Module._load (internal/modules/cjs/loader.js:531:3)\n    at Module.require (internal/modules/cjs/loader.js:637:17)\n    at require (internal/modules/cjs/helpers.js:22:18)\n    at Object.module.exports.load (/var/runtime/node10/UserFunction.js:27:19)\n    at Runtime.handleOnce (/var/runtime/node10/Runtime.engine.js:95:38)"}
  • comment-get
{"errorCode":-1,"errorMessage":"Error: EACCES: permission denied, open '/var/user/index.js'\n    at Object.openSync (fs.js:438:3)\n    at Object.readFileSync (fs.js:343:35)\n    at Object.Module._extensions..js (internal/modules/cjs/loader.js:711:20)\n    at Module.load (internal/modules/cjs/loader.js:600:32)\n    at tryModuleLoad (internal/modules/cjs/loader.js:539:12)\n    at Function.Module._load (internal/modules/cjs/loader.js:531:3)\n    at Module.require (internal/modules/cjs/loader.js:637:17)\n    at require (internal/modules/cjs/helpers.js:22:18)\n    at Object.module.exports.load (/var/runtime/node10/UserFunction.js:27:19)\n    at Runtime.handleOnce (/var/runtime/node10/Runtime.engine.js:95:38)"}
  • counter-get
{"errorCode":-1,"errorMessage":"Error: EACCES: permission denied, open '/var/user/index.js'\n    at Object.openSync (fs.js:438:3)\n    at Object.readFileSync (fs.js:343:35)\n    at Object.Module._extensions..js (internal/modules/cjs/loader.js:711:20)\n    at Module.load (internal/modules/cjs/loader.js:600:32)\n    at tryModuleLoad (internal/modules/cjs/loader.js:539:12)\n    at Function.Module._load (internal/modules/cjs/loader.js:531:3)\n    at Module.require (internal/modules/cjs/loader.js:637:17)\n    at require (internal/modules/cjs/helpers.js:22:18)\n    at Object.module.exports.load (/var/runtime/node10/UserFunction.js:27:19)\n    at Runtime.handleOnce (/var/runtime/node10/Runtime.engine.js:95:38)"}

示例在线界面:
https://qingxu.live/about/

已让ayer主题作者适配twikoo 但仍未启动

相关链接:shen-yu/hexo-theme-ayer#98
主题更新操作:
1.按照shen-yu/hexo-theme-ayer@2dd7a54
进行添加,将其他评论改成false,开启twikoo,一通hexo clean hexo g hexo d以后,无效。
2.复制主题中的_config.yml,删除主题文件,重新下载主题文件,将_config.yml进行更新以后,无效。

现不确定是主题适配有问题,还是我这边腾讯云的调试有问题。
所以烦请作者看一下,是不是主题作者的适配写法有误。

谢谢

作者给项目设计个 icon 吧~

想给作者的项目做友链引流,找了半天却没找到该项目的 icon,这算不算是 这个项目的 ‘bug’ 呢,😄。

隐藏管理入口

直接暴露管理入口感觉怪怪的。

可以在昵称处匹配特殊字串显示管理入口

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.