Giter Club home page Giter Club logo

artalk's People

Contributors

big-cake-jpg avatar dependabot[bot] avatar eryajf avatar fossabot avatar frostming avatar github-actions[bot] avatar inkss avatar kecrily avatar kevinzonda avatar kindle-deep avatar kkfive avatar leenhawk avatar mister-hope avatar monsterxcn avatar moraxyc avatar pluveto avatar qwqcode avatar renbaoshuo avatar renovate-bot avatar renovate[bot] avatar sao-coding avatar syfxlin avatar thun888 avatar wayjam avatar zarevskaya 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  avatar  avatar  avatar

artalk's Issues

文章页关闭评论时报错

msg: "Param id is required"

DEBUG POST /api/get ip=172.17.0.1 latency=2.7617ms referer=http://localhost:4000/ status=200 user_agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36

ERROR 响应: POST /api/admin/page-edit ==> "Param `id` is required" host=127.0.0.1:8080 id= ip=172.17.0.1 referer=http://localhost:4000/ status=200 user_agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36

DEBUG POST /api/admin/page-edit ip=172.17.0.1 latency=535.1µs referer=http://localhost:4000/ status=200 user_agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36

手机游览器,有个别不能正常显示或加载??

系统自带游览器 无法正常显示

夸克游览器 无法正常显示

QQ系列正常显示评论, X 浏览器也正常显示

是否是游览器内核问题导致的还是其他? 今天有人给我反馈了我才知道 我用的QQ游览器显示正常,我以为可能就自己博客出现这个问题 ,试了一下官网的文档 评论 也是一样 不能正常显示...

关于优化体积的一些建议

这是一个很棒的项目,虽然 gzip 后只有 30KB 左右的大小,但还是有些庞大,我认为可以进一步优化大小

  • 可以尝试使用 windicss 或者 tailwindcss 来减少 CSS 体积
  • markdown 和表情等功能可以作为扩展插件来使用,可能并不是所有人都需要这些功能,能缩小近一半的体积
  • 表情包的 json 可以在初始化时引入,目前无论是否设置自定义的表情,都会引入默认的表情文件,造成不必要的浪费
  • 控制台 js 和 css 可以按需加载,或者独立出来

如果能够在初始化时增加主题的配置就再好不过了

建议增加“人工审核”和“垃圾评论”功能

之前用Valine,Valine后台一键将评论标记为垃圾评论用的还是挺爽的,后来到Artalk发现没有这一功能很遗憾,希望能在管理员界面添加一个标记为垃圾评论按钮,标记后除管理员外其它人不可见。同时希望增加人工审核,即发出一条评论默认标记为垃圾评论,直到管理员手动审核标记后再显示,避免违规言论出现。

另:哪位好心人提供一个Valine转Artalk的脚本啊,py正则我要写疯了。。。

markdown处理问题

在折腾表情时发现它没法显示,品了一会发现是表情引用路径有特殊符号"-“导致的👀
image

邮件通知不生效

配置文件:

# 邮件通知
email:
  enabled: true # 总开关
  send_type: "smtp" # 发送方式 [smtp, ali_dm, sendmail]
  send_name: '{{reply_nick}}' # 发信人昵称
  send_addr: "[email protected]" # 发信人地址
  mail_subject: "[{{site_name}}] 您收到了来自 @{{reply_nick}} 的回复"
  mail_subject_to_admin: '[{{site_name}}] 您的文章 "{{page_title}}" 有新回复'
  mail_tpl: "default" # 邮件模板文件
  smtp:
    host: "smtpdm.aliyun.com"
    port: 465
    username: "[email protected]"
    password: "xxxxx"
  ali_dm: # https://help.aliyun.com/document_detail/29444.html
    access_key_id: "" # 阿里云颁发给用户的访问服务所用的密钥 ID
    access_key_secret: "" # 用于加密的密钥
    account_name: "[email protected]" # 管理控制台中配置的发信地址

回复评论,且回复评论被审核后未收到邮件通知,已开启评论审核和 akismet 反垃圾

直接运行报错

centos7.9
artalk-go_v2.0.5_linux_amd64

直接运行./artalk-go serve命令出现如下提示
./artalk-go: /lib64/libc.so.6: version GLIBC_2.28 not found (required by ./artalk-go)

解决评论请求超时 PHP 异步发送邮件

对于邮箱发信导致评论超时的问题可以使用多进程的方式,将发信过程 fork 到另一个进程中处理,主进程就不会阻塞导致评论超时,不过该方法只能用于 Linux 环境,比较好的方案还是要使用其他支持多线程/异步的语言或者使用 Swoole 等支持多进程/异步的 PHP 框架。具体可以进行以下修改:

修改 Utils::sendEmailToCommenter 方法,将发信的部分代码改为以下的代码:

// 邮件发送
$pid = pcntl_fork();
//父进程和子进程都会执行下面代码
if ($pid == -1) {
    //错误处理:创建子进程失败时返回-1.
    die('could not fork');
} else if ($pid) {
    //父进程会得到子进程号,所以这里是父进程执行的逻辑
    // pcntl_wait($status); //等待子进程中断,防止子进程成为僵尸进程。
} else {
    //子进程得到的$pid为0, 所以这里是子进程执行的逻辑。
    $adminAddr = _config()['email']['admin_addr'] ?? null;
    if (!empty($rid) && $comment['email'] !== $replyComment['email']) {
      $sendEmail($mailTitle, $mailContent, $comment['email']);
    }
    if (empty($rid) && !empty($adminAddr) && $replyComment['email'] !== $adminAddr) {
      $sendEmail($mailTitleToAdmin, $mailContent, $adminAddr);
    }
}

Originally posted by @syfxlin in #6 (comment)

验证码的字太小了看不清。

之前有人给我反馈过验证码的事情,我一直没碰到就没在意。

昨天登录管理账户 弹出一个验证码 把我搞不会了。

那个字实在是太小了,我还带眼镜 不然 估计都看不清。

在 4 次尝试后 我才正常...

前端报错,详情如下,求诸位大佬给个思路

博客程序:nuxt + vue

artalk后端已经部署完成

image
image
image

前端部署

<template>
  <div class="wrapper">
      <link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/Artalk.css" rel="stylesheet" />
      <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/Artalk.js"></script>
      <div id="Comments"></div>
    </div>
</template>

<script>
const el = '#Comments';
const pageKey = '';
const pageTitle = '';
const server = 'https://artalk.imhan.cn/api/';
const site = '博客';
export default {
  name: 'Comments',
  mounted () {
    this.comments()
  },
  methods: {
    comments () {
      try {
        new Artalk({
          el,
          pageKey,
          pageTitle,
          server,
          site,
        })
      } catch (e) { }
    },
  }
}
</script>

<style lang="scss" scoped>
// ...
</style>

控制台报错

image

Access to fetch at 'https://artalk.imhan.cn/api/get' from origin 'http://localhost:3000' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource. If an opaque response serves your needs, set the request's mode to 'no-cors' to fetch the resource with CORS disabled.
Artalk.js:1          POST https://artalk.imhan.cn/api/get net::ERR_FAILED 404

Artalk.js:1 Uncaught (in promise) Error: 网络错误
    at Artalk.js:1:51547
    at Generator.throw (<anonymous>)
    at a (Artalk.js:1:819)

总是需要验证码参数有BUG

验证码

captcha:
enabled: true # 总开关
always: true # 总是需要验证码

将总是需要验证码打开后,即使验证输入正确也不会跳回评论界面,还继续要求输入验证码。log文件提示ERROR 响应: POST /api/add ==> "需要验证码"

关于 GPLv3 链接库污染

使用 GPLv3 的模块会对程序本身造成污染1,这也包括了通过 <script> 进行引用,相较于其他不会因通过模块使用的评论程序而言,似乎降低了一定的竞争力。单从提供评论功能这一需求而言似乎没有必要使用 Artalk 并被 GPLv3 污染的必要性。

是否可以考虑切换到不因使用链接库而被污染的 LGPLv3 或其他许可?

Footnotes

  1. Free Software Foundation. GNU GENERAL PUBLIC LICENSE (3rd). June 29 2007. Sect. 5C. "You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it".

评论投票逻辑问题

现状

用户可以同时给某条评论点一个赞、点一个踩

预期

用户点赞应该消除曾经点过的踩,点踩应该消除曾经点过的赞

复现

进入 https://artalk.js.org ,任选一条评论,点赞并点踩,观察到赞和踩的数值最终同时 +1

宝塔安装过程大概记录

前言

我也是刚刚在自己香港服务器搭建成功的,分享一下我用宝塔安装的过程吧!

Docker安装

我们按照官网教程 "https://artalk.js.org/guide/backend/docker.html" 一步步往下走就行!

  • 我这里是在宝塔站点目录打开终端方便我后期管理编辑

打开终端后先执行镜像拉取

docker pull artalk/artalk-go

在执行 下面 我圈起来的步骤

这时候我们在看站点目录 会多一个ArtalkGo 文件夹 在点击进去 有个conf.yml 我们 双击 编辑它

我们就先简单配置这两个基本就能运行了 至于其他邮件通知 等等 等搭建好了 在慢慢设置

然后我们继续 在之前的终端 进行下面的步骤

在上面步骤 都完成后 执行 $ docker restart artalk-go 因为前面我们修改了conf.yml 需要重启生效

持久化运作

在上面执行完毕后 在终端执行 docker update --restart=always artalk-go 好像就是不让这个服务关闭? 小白不懂 执行就对了。

宝塔反向代理

在按照官网教程 https://artalk.js.org/guide/backend/reverse-proxy.html#%E5%AE%9D%E5%A1%94%E9%9D%A2%E6%9D%BF 往下走

新建一个站点 就绑定 域名 其他都不需要

在如下图

若需指定仅 /api/ 路径转发到后端程序端口,点击 “配置文件” 按钮,添加如图位置红色标记的 /api/

到这里就搞定了!

前端配置

<!-- CSS -->
<link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/Artalk.css" rel="stylesheet">

<!-- JS -->
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/Artalk.js"></script>

<!-- Artalk -->
<div id="Comments"></div>
<script>
  new Artalk({
    el:        '#Comments',
    pageKey:   '<页面链接>',
    pageTitle: '<页面标题>',
    server:    '<后端地址>',
    site:      '<站点名称>',
  })
</script>

我是在自己测试服务器搭建的,就简单引用了一下给你们 做个参考 哈~ site:conf.yml 网站标题相呼应~

Typecho 应该如下就能用了 我没装 还没测试 全部复制以下的代码替换掉 comments.php 原先的代码 ok !就能使

<!-- CSS -->
<link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/Artalk.css" rel="stylesheet">

<!-- JS -->
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/Artalk.js"></script>

<!-- Artalk -->
<div id="Comments"></div>
<script>
  new Artalk({
    el:        '#Comments',
    pageKey:   '<?php $this->permalink() ?>',
    pageTitle: '<?php $this->title() ?>',
    server:    '你绑定反向代理域名/api/',
    site:      '<?php $this->options->title() ?>',
  })
</script>

结尾

写的很乱希望你们能看懂,见谅我也是第一次搭建这个...

测试地址:https://pl.9i3.cn/ 准备搭建typecho 测试

关于『为什么很久没更新』

非常感谢 dalao 们对 Artalk 的关注与支持 😁

首先,我非常抱歉,目前很多问题还没来得及完善。由于高考临近,业务比较繁忙,看着各位 dalao 用着我这个半成品心中总觉得有些许不安,手痒恨不得拿起键盘干个通宵。哎,但是 🙃 我得克制住自己,刻意失踪,没有回复,希望能够谅解并且忍耐 Artalk 的许多槽点一段时间。

例如写 Golang 的后端 API,这样就能轻松解决跨平台异步发送邮件等问题,还打算做从各评论系统快速迁入、迁出的功能,另外包括规范化数据结构,审核和垃圾过滤等等。

相信 Artalk 在大家的陪伴下变得越来越好用,也请给 Artalk 留一段等待的时间,感谢正在使用 Artalk 的朋友们,有你们的陪伴与鼎力帮助是 Artalk 开发更新 无限前进 的动力,加油!😘

邮件模版自定义

当前的样式中只包含了页面标题、评论内容和用户名,较为简陋

image


建议修改为类似 WordPress 这样的,有更多详细内容(页面链接,IP地址,URL等等,一目了然)

image


评论收到回复时同理

image

PageKey 允许填写 ”相对路径“ 或 ”完整URL“

填写完整链接能够更准确的定位到页面

@inkss 可是站点本身有地址呀,如果需要访问,利用站点设置里的 url 和页面的 url 拼接呗,可以做个判断如果地址包含了站点 url 的内容就不处理,反之拼接下。(是不是现在就是这样处理的?

感谢来自 @inkss 的建议,#44 (comment)

多站点功能是后来加入的,怎么实现更易用目前还在探索中,感谢您提出的建议,并期待更为深入的探讨。

如果站点只有一个域名的情况下,PageKey 不用填写完整 URL,后端可以根据这一个域名拼接字符串。也就是说,PageKey 是可以填写 “相对路径” 的。

(因为用到 PageKey 的地方有点多,之前时间不太充裕,直接填写完整 URL 作为 PageKey 不用拼接就可以摸鱼了,省去了不少代码,哈哈。我觉得这个可以有,拼接字符串这种方式将在下一版中加入,已经安排上了)

【站点 (Site) “本身就有的地址”】目前作用是:
1. “Referer 合法性检测”:后端判断来自前端的请求 Header Referer 是否合法(阻止其他域名下进行非法提交)
2. 后端设计支持:一个站点(项目)能有多个域名(多个 Site URL)(判断多个 Referer)
3. 如果不设置 Site URL,则任何域名都可以请求,没有 “Referer 合法性检测”
3. 依赖 PageKey 来生成邮件中的“回复”链接。(如果仅仅依靠 Site URL 来拼接字符串,如果有多个 Site URL,根据第一个 Site URL 拼接的链接是不准确的,不知道具体是哪一个网站)
4. 依赖 PageKey 后端读取页面数据,爬取页面 <title> 后端显示页面标题
5. 主要是为了多站点支持多域名,如果 PageKey 填写完整 URL,能够更加准确。

后端可以对原来包含域名的 PageKey 进行批量替换,因此 PageKey 完整URL换域名是不太繁琐的。

总结:

后续更新后端程序:

PageKey 不再强制要求填写完整 URL,可“相对路径“也可”完整URL“

  1. 若一个站点有多个域名,PageKey 如果填 “相对路径”,会根据 第一个域名 拼接字符串。如果填 “完整链接”,会根据这个链接来,这样就能够更准确。(一个站点有多个域名,PageKey 推荐填写完整URL,但不强制要求)

  2. 若一个站点只有单个域名,PageKey 填写 “相对路径”,就能够根据这个域名 拼接生成 URL,这样拼接的很灵活,后端也能直接换域名。

  3. 站点不允许 没有域名

  4. 添加单独的配置项:控制开启关闭 “Referer 合法性检测”。

Originally posted by @qwqcode in #44 (comment)

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.