📪️ · [email protected]
dahawong / castpod Goto Github PK
View Code? Open in Web Editor NEWTelegram 泛用型播客机器人。
Home Page: https://t.me/castpodbot
License: Mozilla Public License 2.0
Telegram 泛用型播客机器人。
Home Page: https://t.me/castpodbot
License: Mozilla Public License 2.0
📪️ · [email protected]
File "/home/daha/download/pypy3.7-v7.3.2-linux64/site-packages/telegram/ext/dispatcher.py", line 432, in process_update
handler.handle_update(update, self, check, context)
File "/home/daha/download/pypy3.7-v7.3.2-linux64/site-packages/telegram/ext/handler.py", line 156, in handle_update
return self.callback(update, context)
File "/home/daha/project/castpod/castpod/callbacks/inline_query.py", line 31, in handle_inline_query
run_async(query.answer, list(results), **kwargs)
File "/home/daha/download/pypy3.7-v7.3.2-linux64/site-packages/telegram/ext/dispatcher.py", line 432, in process_update
handler.handle_update(update, self, check, context)
File "/home/daha/download/pypy3.7-v7.3.2-linux64/site-packages/telegram/ext/handler.py", line 156, in handle_update
return self.callback(update, context)
File "/home/daha/project/castpod/castpod/utils.py", line 127, in wrapped
func(update, context, *args, **kwargs)
File "/home/daha/project/castpod/castpod/callbacks/command.py", line 19, in start
user.subscribe(podcast)
File "/home/daha/project/castpod/castpod/models.py", line 50, in subscribe
if self in podcast.subscribers:
功能描述
界面优化
实现方式
你希望怎么实现它?比如提供一些可能的操作步骤:
功能描述
界面重构:/manage 中提供「我的收藏」
跳转按钮,同样以 reply keyboard 的形式管理
实现方式
描述问题
取消订阅的播客重新订阅,收藏状态未清空
如何复现
我在进行如下操作的时候,机器人出错了:
结果说明
应该看到收藏状态为空,但是却显示已收藏
功能描述
新项目,不完全与开发相关。
实现方式
你希望怎么实现它?比如提供一些可能的操作步骤:
功能描述
输入文本,返回模糊检索得到的第一个结果。(以前是完全匹配才返回结果)
实现方式
你希望怎么实现它?比如提供一些可能的操作步骤:
如何复现
我在进行如下操作的时候,机器人出错了:
结果说明
应该看到正常顺序,但是出现乱序、多数的情况
功能描述
存储一些用户信息用于日后使用,如:
描述问题
can't find end of the entity starting at byte offset 120
错误截图
Traceback (most recent call last):
File "/home/daha/download/pypy3.7-v7.3.2-linux64/site-packages/telegram/ext/dispatcher.py", line 442, in process_update
handler.handle_update(update, self, check, context)
File "/home/daha/download/pypy3.7-v7.3.2-linux64/site-packages/telegram/ext/handler.py", line 160, in handle_update
return self.callback(update, context)
File "/home/daha/project/castpod/castpod/callbacks/message.py", line 233, in show_podcast
reply_markup=InlineKeyboardMarkup(page.keyboard())
File "/home/daha/download/pypy3.7-v7.3.2-linux64/site-packages/telegram/message.py", line 647, in reply_text
entities=entities,
File "/home/daha/download/pypy3.7-v7.3.2-linux64/site-packages/telegram/bot.py", line 126, in decorator
result = func(*args, **kwargs)
File "/home/daha/download/pypy3.7-v7.3.2-linux64/site-packages/telegram/bot.py", line 482, in send_message
api_kwargs=api_kwargs,
File "/home/daha/download/pypy3.7-v7.3.2-linux64/site-packages/telegram/bot.py", line 295, in _message
result = self._post(endpoint, data, timeout=timeout, api_kwargs=api_kwargs)
File "/home/daha/download/pypy3.7-v7.3.2-linux64/site-packages/telegram/bot.py", line 259, in _post
f'{self.base_url}/{endpoint}', data=data, timeout=effective_timeout
File "/home/daha/download/pypy3.7-v7.3.2-linux64/site-packages/telegram/utils/request.py", line 354, in post
**urlopen_kwargs,
File "/home/daha/download/pypy3.7-v7.3.2-linux64/site-packages/telegram/utils/request.py", line 272, in _request_wrapper
raise BadRequest(message)
telegram.error.BadRequest: Can't parse entities: can't find end of the entity starting at byte offset 120
Traceback (most recent call last):
File "/home/daha/project/castpod/castpod/callbacks/message.py", line 71, in save_subscription
podcast = Podcast.validate_feed(feed['url'])
File "/home/daha/project/castpod/castpod/models.py", line 170, in validate_feed
return podcast or cls(feed=feed).save()
File "/home/daha/download/pypy3.7-v7.3.2-linux64/site-packages/mongoengine/document.py", line 378, in save
self.validate(clean=clean)
File "/home/daha/download/pypy3.7-v7.3.2-linux64/site-packages/mongoengine/base/document.py", line 433, in validate
raise ValidationError(message, errors=errors)
mongoengine.errors.ValidationError: ValidationError (Podcast:None) (Invalid scheme http in URL: http://pan.icu/feed: ['feed'])
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/daha/download/pypy3.7-v7.3.2-linux64/site-packages/telegram/utils/promise.py", line 77, in run
self._result = self.pooled_function(*self.args, **self.kwargs)
File "/home/daha/project/castpod/castpod/callbacks/message.py", line 118, in save_subscription
raise e
File "/home/daha/project/castpod/castpod/callbacks/message.py", line 75, in save_subscription
podcast.delete()
AttributeError: 'NoneType' object has no attribute 'delete'
在 Podcast 模型中添加 logo file id 字段,存储 Telegram 中的 file_id。
在播客页即上传 logo 本身,以替代原来的 url 获取方式。上传后获取 logo 的 file id 并存储下来。
这样便可以直接调取 telegram 缓存的图片。
功能描述
有的播客时间轴内容较长,考虑对其进行缩减。
实现方式
功能描述
服务端优化
实现方式
你希望怎么实现它?比如提供一些可能的操作步骤:
如果您是开发者,可以提供相关的技术细节以供我们参考学习:
File.download(custom_path: str = None, out: IO = None, timeout: int = None) → Union[str, IO]
功能描述
bot api 更新至 5.3,带来一些新功能:
相关议题
技术细节:
"p" tag is not closed
这类错误可能难以自动消除,需要规避异常,提供一个默认的相关链接地址。
File "/home/daha/download/pypy3.7-v7.3.2-linux64/site-packages/telegram/ext/dispatcher.py", line 432, in process_update
handler.handle_update(update, self, check, context)
File "/home/daha/download/pypy3.7-v7.3.2-linux64/site-packages/telegram/ext/handler.py", line 156, in handle_update
return self.callback(update, context)
File "/home/daha/project/castpod/castpod/callbacks/message.py", line 24, in subscribe_feed
user.subscribe(podcast)
File "/home/daha/project/castpod/castpod/models.py", line 52, in subscribe
podcast.renew()
File "/home/daha/project/castpod/castpod/models.py", line 204, in renew
self.save()
File "/home/daha/download/pypy3.7-v7.3.2-linux64/site-packages/mongoengine/document.py", line 378, in save
self.validate(clean=clean)
File "/home/daha/download/pypy3.7-v7.3.2-linux64/site-packages/mongoengine/base/document.py", line 433, in validate
raise ValidationError(message, errors=errors)
用户链接可以直接用 User.link 生成,尤其在开发者链接处。
描述问题
作为心象风景的浅草
解决方案
手动在数据库中敲除
功能描述
新功能:只有机器人拥有者可以管理的操作台
实现方式
你希望怎么实现它?比如提供一些可能的操作步骤:
需要一个异常捕获,当 Telegram 超时的时候,告知使用者请等待至节目传送回来。
利用 context.bot_data 暂时存储 播客id、节目id、下载者 id。发送完毕时清空。
small tag is not allowed
描述问题
feedparser.parse 的结果没有 entries 字段
问题来源
李丁聊天室的某个播客源
File "/home/daha/download/pypy3.7-v7.3.2-linux64/site-packages/telegram/ext/dispatcher.py", line 432, in process_update
handler.handle_update(update, self, check, context)
File "/home/daha/download/pypy3.7-v7.3.2-linux64/site-packages/telegram/ext/handler.py", line 156, in handle_update
return self.callback(update, context)
File "/home/daha/project/castpod/castpod/callbacks/message.py", line 24, in subscribe_feed
user.subscribe(podcast)
File "/home/daha/project/castpod/castpod/models.py", line 52, in subscribe
podcast.renew()
File "/home/daha/project/castpod/castpod/models.py", line 199, in renew
self.host = unescape(feed.author_detail.name or '')
File "/home/daha/download/pypy3.7-v7.3.2-linux64/site-packages/feedparser/util.py", line 158, in getattr
raise AttributeError("object has no attribute '%s'" % key)
实现方式
你希望怎么实现它?比如提供一些可能的操作步骤:
功能描述
考虑到可能增加的时间轴处理行内按钮,将单集页面的评论区按钮换成链接形式可以缩减掉一行按钮。
除了原有的「相关链接」,新增链接「留言区」 「订阅」
File "/home/daha/download/pypy3.7-v7.3.2-linux64/site-packages/telegram/ext/dispatcher.py", line 432, in process_update
handler.handle_update(update, self, check, context)
File "/home/daha/download/pypy3.7-v7.3.2-linux64/site-packages/telegram/ext/handler.py", line 156, in handle_update
return self.callback(update, context)
File "/home/daha/project/castpod/castpod/callbacks/message.py", line 24, in subscribe_feed
user.subscribe(podcast)
File "/home/daha/project/castpod/castpod/models.py", line 52, in subscribe
podcast.renew()
** File "/home/daha/project/castpod/castpod/models.py", line 182, in renew
result = feedparser.parse(self.feed)**
File "/home/daha/download/pypy3.7-v7.3.2-linux64/site-packages/feedparser/api.py", line 214, in parse
data = _open_resource(url_file_stream_or_string, etag, modified, agent, referrer, handlers, request_headers, result)
File "/home/daha/download/pypy3.7-v7.3.2-linux64/site-packages/feedparser/api.py", line 114, in _open_resource
return http.get(url_file_stream_or_string, etag, modified, agent, referrer, handlers, request_headers, result)
File "/home/daha/download/pypy3.7-v7.3.2-linux64/site-packages/feedparser/http.py", line 158, in get
f = opener.open(request)
File "/home/daha/download/pypy3.7-v7.3.2-linux64/lib-python/3/urllib/request.py", line 525, in open
response = self._open(req, data)
File "/home/daha/download/pypy3.7-v7.3.2-linux64/lib-python/3/urllib/request.py", line 543, in _open
'_open', req)
File "/home/daha/download/pypy3.7-v7.3.2-linux64/lib-python/3/urllib/request.py", line 503, in _call_chain
result = func(*args)
File "/home/daha/download/pypy3.7-v7.3.2-linux64/lib-python/3/urllib/request.py", line 1393, in https_open
context=self._context, check_hostname=self._check_hostname)
File "/home/daha/download/pypy3.7-v7.3.2-linux64/lib-python/3/urllib/request.py", line 1353, in do_open
r = h.getresponse()
File "/home/daha/download/pypy3.7-v7.3.2-linux64/lib-python/3/http/client.py", line 1369, in getresponse
response.begin()
File "/home/daha/download/pypy3.7-v7.3.2-linux64/lib-python/3/http/client.py", line 310, in begin
version, status, reason = self._read_status()
File "/home/daha/download/pypy3.7-v7.3.2-linux64/lib-python/3/http/client.py", line 271, in _read_status
line = str(self.fp.readline(_MAXLINE + 1), "iso-8859-1")
File "/home/daha/download/pypy3.7-v7.3.2-linux64/lib-python/3/socket.py", line 589, in readinto
return self._sock.recv_into(b)
File "/home/daha/download/pypy3.7-v7.3.2-linux64/lib-python/3/ssl.py", line 1071, in recv_into
return self.read(nbytes, buffer)
File "/home/daha/download/pypy3.7-v7.3.2-linux64/lib-python/3/ssl.py", line 929, in read
return self._sslobj.read(len, buffer)
File "/home/daha/download/pypy3.7-v7.3.2-linux64/lib_pypy/_cffi_ssl/_stdssl/init.py", line 647, in read
raise socket.timeout("The read operation timed out")
File "/home/daha/download/pypy3.7-v7.3.2-linux64/site-packages/telegram/ext/dispatcher.py", line 432, in process_update
handler.handle_update(update, self, check, context)
File "/home/daha/download/pypy3.7-v7.3.2-linux64/site-packages/telegram/ext/handler.py", line 156, in handle_update
return self.callback(update, context)
File "/home/daha/project/castpod/castpod/callbacks/message.py", line 24, in subscribe_feed
user.subscribe(podcast)
File "/home/daha/project/castpod/castpod/models.py", line 52, in subscribe
podcast.renew()
File "/home/daha/project/castpod/castpod/models.py", line 197, in renew
self.update(push__episodes=episode)
File "/home/daha/download/pypy3.7-v7.3.2-linux64/site-packages/mongoengine/document.py", line 610, in update
return self._qs.filter(**self._object_key).update_one(**kwargs)
File "/home/daha/download/pypy3.7-v7.3.2-linux64/site-packages/mongoengine/queryset/base.py", line 636, in update_one
**update,
File "/home/daha/download/pypy3.7-v7.3.2-linux64/site-packages/mongoengine/queryset/base.py", line 555, in update
update = transform.update(queryset._document, **update)
File "/home/daha/download/pypy3.7-v7.3.2-linux64/site-packages/mongoengine/queryset/transform.py", line 317, in update
value = field.prepare_query_value(op, value)
File "/home/daha/download/pypy3.7-v7.3.2-linux64/site-packages/mongoengine/fields.py", line 973, in prepare_query_value
return self.field.prepare_query_value(op, value)
File "/home/daha/download/pypy3.7-v7.3.2-linux64/site-packages/mongoengine/fields.py", line 795, in prepare_query_value
super().prepare_query_value(op, value)
File "/home/daha/download/pypy3.7-v7.3.2-linux64/site-packages/mongoengine/base/fields.py", line 192, in prepare_query_value
self.validate(value)
File "/home/daha/download/pypy3.7-v7.3.2-linux64/site-packages/mongoengine/fields.py", line 774, in validate
self.document_type.validate(value, clean)
File "/home/daha/download/pypy3.7-v7.3.2-linux64/site-packages/mongoengine/base/document.py", line 433, in validate
raise ValidationError(message, errors=errors)
问题出现在 @castpodbot 之后,没有关键字的时候触发。
File "/home/daha/download/pypy3.7-v7.3.2-linux64/site-packages/telegram/ext/dispatcher.py", line 432, in process_update
handler.handle_update(update, self, check, context)
File "/home/daha/download/pypy3.7-v7.3.2-linux64/site-packages/telegram/ext/handler.py", line 156, in handle_update
return self.callback(update, context)
File "/home/daha/project/castpod/castpod/callbacks/inline_query.py", line 31, in handle_inline_query
run_async(query.answer, list(results), **kwargs)
File "/home/daha/project/castpod/castpod/callbacks/inline_query.py", line 49, in show_subscription
podcast = subscription.podcast
File "/home/daha/download/pypy3.7-v7.3.2-linux64/site-packages/mongoengine/fields.py", line 1225, in get
raise DoesNotExist("Trying to dereference unknown document %s" % value)
功能描述
ptb 更新到了 13.6,为 bot 带来一些新变化。
实现方式
如果您是开发者,可以提供相关的技术细节以供我们参考学习:
描述问题
节目无法退订
功能描述
新功能:添加我的收藏指令(/favorite)、闲庭信步(/wander)指令。
实现方式
File "/home/daha/download/pypy3.7-v7.3.2-linux64/site-packages/telegram/ext/dispatcher.py", line 432, in process_update
handler.handle_update(update, self, check, context)
File "/home/daha/download/pypy3.7-v7.3.2-linux64/site-packages/telegram/ext/handler.py", line 156, in handle_update
return self.callback(update, context)
File "/home/daha/project/castpod/castpod/callbacks/message.py", line 24, in subscribe_feed
user.subscribe(podcast)
File "/home/daha/project/castpod/castpod/models.py", line 52, in subscribe
podcast.renew()
File "/home/daha/project/castpod/castpod/models.py", line 182, in renew
result = feedparser.parse(self.feed)
File "/home/daha/download/pypy3.7-v7.3.2-linux64/site-packages/feedparser/api.py", line 214, in parse
data = _open_resource(url_file_stream_or_string, etag, modified, agent, referrer, handlers, request_headers, result)
File "/home/daha/download/pypy3.7-v7.3.2-linux64/site-packages/feedparser/api.py", line 114, in _open_resource
return http.get(url_file_stream_or_string, etag, modified, agent, referrer, handlers, request_headers, result)
File "/home/daha/download/pypy3.7-v7.3.2-linux64/site-packages/feedparser/http.py", line 158, in get
f = opener.open(request)
File "/home/daha/download/pypy3.7-v7.3.2-linux64/lib-python/3/urllib/request.py", line 525, in open
response = self._open(req, data)
File "/home/daha/download/pypy3.7-v7.3.2-linux64/lib-python/3/urllib/request.py", line 543, in _open
'_open', req)
File "/home/daha/download/pypy3.7-v7.3.2-linux64/lib-python/3/urllib/request.py", line 503, in _call_chain
result = func(*args)
File "/home/daha/download/pypy3.7-v7.3.2-linux64/lib-python/3/urllib/request.py", line 1393, in https_open
context=self._context, check_hostname=self._check_hostname)
File "/home/daha/download/pypy3.7-v7.3.2-linux64/lib-python/3/urllib/request.py", line 1352, in do_open
raise URLError(err)
功能描述
国际化
实现方式
你希望怎么实现它?比如提供一些可能的操作步骤:
功能描述
新功能:群组管理员在 Bot 中添加订阅,该群便可以收到节目更新
实现方式
你希望怎么实现它?比如提供一些可能的操作步骤:
功能描述
服务端优化:由于 mongoengine 自带的 URL 认证不支持 http 以及会带来一系列其他问题,所以暂时将的 URL 认证模式改成了 StringField。但这并不是好的做法。
实现方式
你希望怎么实现它?比如提供一些可能的操作步骤:
100*100
功能描述
新功能:每当播客单集更新,将其置顶,并将过去最旧的单集取消置顶,保持置顶列表中播客的个数(比如 5 个)。
实现方式
你希望怎么实现它?比如提供一些可能的操作步骤:
telegraph
功能描述
优化时间轴提取
功能描述
用 mongodb 实现对话数据、机器人数据的长效存储
实现方式
你希望怎么实现它?比如提供一些可能的操作步骤
如果您是开发者,可以提供相关的技术细节以供我们参考学习:
功能描述
重构:修改原来的 text url 为真实的 url button。
实现方式
你希望怎么实现它?比如提供一些可能的操作步骤:
File "/home/daha/download/pypy3.7-v7.3.2-linux64/site-packages/telegram/ext/dispatcher.py", line 432, in process_update
handler.handle_update(update, self, check, context)
File "/home/daha/download/pypy3.7-v7.3.2-linux64/site-packages/telegram/ext/handler.py", line 156, in handle_update
return self.callback(update, context)
File "/home/daha/project/castpod/castpod/callbacks/message.py", line 24, in subscribe_feed
user.subscribe(podcast)
File "/home/daha/project/castpod/castpod/models.py", line 52, in subscribe
podcast.renew()
File "/home/daha/project/castpod/castpod/models.py", line 197, in renew
self.update(push__episodes=episode)
File "/home/daha/download/pypy3.7-v7.3.2-linux64/site-packages/mongoengine/document.py", line 610, in update
return self._qs.filter(**self._object_key).update_one(**kwargs)
File "/home/daha/download/pypy3.7-v7.3.2-linux64/site-packages/mongoengine/queryset/base.py", line 636, in update_one
**update,
File "/home/daha/download/pypy3.7-v7.3.2-linux64/site-packages/mongoengine/queryset/base.py", line 555, in update
update = transform.update(queryset._document, **update)
File "/home/daha/download/pypy3.7-v7.3.2-linux64/site-packages/mongoengine/queryset/transform.py", line 317, in update
value = field.prepare_query_value(op, value)
File "/home/daha/download/pypy3.7-v7.3.2-linux64/site-packages/mongoengine/fields.py", line 973, in prepare_query_value
return self.field.prepare_query_value(op, value)
File "/home/daha/download/pypy3.7-v7.3.2-linux64/site-packages/mongoengine/fields.py", line 795, in prepare_query_value
super().prepare_query_value(op, value)
File "/home/daha/download/pypy3.7-v7.3.2-linux64/site-packages/mongoengine/base/fields.py", line 192, in prepare_query_value
self.validate(value)
File "/home/daha/download/pypy3.7-v7.3.2-linux64/site-packages/mongoengine/fields.py", line 774, in validate
self.document_type.validate(value, clean)
File "/home/daha/download/pypy3.7-v7.3.2-linux64/site-packages/mongoengine/base/document.py", line 433, in validate
raise ValidationError(message, errors=errors)
功能描述
优化:邮箱信息可能存在多个字段中,目前只检测了一种。
实现方式
以一天世界为例,参考以下数据:
{'author': '不鳥萬如一',
'author_detail': {'email': '[email protected]', 'name': '不鳥萬如一'},
'authors': [{'email': '[email protected]', 'name': '不鳥萬如一'}],
'generator': 'Typlog (https://typlog.com)',
'generator_detail': {'name': 'Typlog (https://typlog.com)'},
'image': {'href': 'https://i.typlog.com/yitianshijie/7W/tnVvKh-Z0xzWG-t4G7mA.png?x-oss-process=style/sl'},
'itunes_explicit': None,
'itunes_type': 'episodic',
'language': 'zh',
'link': 'https://castro.fm/podcast/7b953900-6471-4629-a1bc-1c7167a51352',
'links': [{'href': 'https://yitianshijie.net',
'rel': 'alternate',
'type': 'text/html'},
{'href': 'https://yitianshijie.net/episodes/feed.xml',
'rel': 'self',
'type': 'application/rss+xml'},
{'href': 'https://pubsubhubbub.appspot.com/',
'rel': 'hub',
'type': 'text/html'},
{'href': 'https://itunes.apple.com/podcast/id1099645400',
'icon': 'podcast',
'rel': 'alternate',
'title': 'iTunes',
'type': 'text/html'},
{'href': 'https://overcast.fm/itunes1099645400',
'icon': 'overcast',
'rel': 'alternate',
'title': 'Overcast',
'type': 'text/html'},
{'href': 'https://castro.fm/podcast/7b953900-6471-4629-a1bc-1c7167a51352',
'icon': 'castro',
'rel': 'alternate',
'title': 'Castro',
'type': 'text/html'}],
'published': 'Tue, 29 Jun 2021 10:43:39 +0000',
'published_parsed': time.struct_time(tm_year=2021, tm_mon=6, tm_mday=29, tm_hour=10, tm_min=43, tm_sec=39, tm_wday=1, tm_yday=180, tm_isdst=0),
'publisher_detail': {'email': '[email protected]', 'name': '不鳥萬如一'},
'rights': 'IPN',
'rights_detail': {'base': 'https://yitianshijie.net/episodes/feed.xml',
'language': None,
'type': 'text/plain',
'value': 'IPN'},
'subtitle': '浓烟烈焰,摄魄勾魂;翱翔万里,神采飞扬',
'subtitle_detail': {'base': 'https://yitianshijie.net/episodes/feed.xml',
'language': None,
'type': 'text/plain',
'value': '浓烟烈焰,摄魄勾魂;翱翔万里,神采飞扬'},
'summary': '一天世界,昆乱不挡。不鳥萬如一主理。IPN 出品。\n'
'\n'
'《一天世界》博客:http://blog.yitianshijie.net',
'summary_detail': {'base': 'https://yitianshijie.net/episodes/feed.xml',
'language': None,
'type': 'text/plain',
'value': '一天世界,昆乱不挡。不鳥萬如一主理。IPN 出品。\n'
'\n'
'《一天世界》博客:http://blog.yitianshijie.net'},
'tags': [{'label': None,
'scheme': 'http://www.itunes.com/',
'term': 'Technology'}],
'title': '一天世界',
'title_detail': {'base': 'https://yitianshijie.net/episodes/feed.xml',
'language': None,
'type': 'text/plain',
'value': '一天世界'}}
功能描述
新功能:限制单集下载的频率与数量
Traceback (most recent call last):
File "/home/daha/download/pypy3.7-v7.3.2-linux64/site-packages/telegram/ext/dispatcher.py", line 432, in process_update
handler.handle_update(update, self, check, context)
File "/home/daha/download/pypy3.7-v7.3.2-linux64/site-packages/telegram/ext/handler.py", line 156, in handle_update
return self.callback(update, context)
File "/home/daha/project/castpod/castpod/callbacks/callback_query.py", line 109, in confirm_unsubscribe
user.unsubscribe(podcast)
File "/home/daha/project/castpod/castpod/models.py", line 57, in unsubscribe
self.update(pull__subscriptions=self.subscriptions.get(podcast=podcast))
File "/home/daha/download/pypy3.7-v7.3.2-linux64/site-packages/mongoengine/base/datastructures.py", line 273, in get
raise DoesNotExist("%s matching query does not exist." % self._name)
mongoengine.errors.DoesNotExist: subscriptions matching query does not exist.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.