bio-guoda / preston

a biodiversity dataset tracker
MIT License
25 stars 1 forks source link

track and archive github issues #156

Closed jhpoelen closed 1 year ago

jhpoelen commented 2 years ago

Traditionally, academic discourse happened through journal publications, physical books, and lectures.

Today other forums are used to exchange and develop ideas. Slack is one of them.

Suggest to extend Preston to track slack discussions and make them citable.

Similar to https://github.com/bio-guoda/preston/issues/137 and desire to track github issues threads.

inspired by @n8upham and @Daniel-Mietchen

PietrH commented 2 years ago

I see potential in this, for example for discussions that occur in the context of hackathons. These often don't have a paid slack subscription, and thus the messages become unavailable once the workspace goes over 10.000 messages. This is one of Slacks incentives to go for the paid plan.

Slack has extensive API documentation: https://api.slack.com/

In their terms of service they mention you are not allowed to use their API's in order to compete with Slack:

(C) access our APIs or documentation in order to replicate or compete with the Services

Their developer policy explicitly mentions trying to circumvent any limitations they imbue on their users:

Circumventing Slack’s intended limitations (including pricing, features and access structures). You may not use the Slack API to replicate or compete with core products or services offered by Slack

However, I still think this is a very valuable avenue to pursue, even if it might end up limited to paid slack workspaces. Currently slack discussions are difficult to reference and long term archive.

What about Discord?

jhpoelen commented 2 years ago

@PietrH Good point about Discord. i imagine that github / bitbucket / gitlab / google docs are also frequently used for academic exchanges. How would you want to cite a slack discussion?

jhpoelen commented 2 years ago

About the limitations - we are not trying to replicate the service, just making a "screenshot" of the discussions for future generations.

PietrH commented 2 years ago

It is a workaround for the 10k searchable message limitation, at least if you archive messages in text format. That's what I'm referring to.

I haven't personally had the need, but have been part of brainstorming sessions or chats where intermediate results, draft figures and ideas are exchanged. If I were going to cite something like that I would currently call it "personal communication", but it would be cool to have a pointer or URI for a thread like you could do for a github issue.

In that aspect github is better than slack/discord, but a local, then long term archived and made citable copy would be even better.

PietrH commented 2 years ago

To add to my comment above, data sharing via personal communication does happen, for a number of reasons (see https://doi.org/10.1016/j.ipm.2017.03.003).

I've definitely seen (received and sent) emails with questions like "Do you/we have any specimen/data ... " where people form a sort of query engine and the output is a reply in an email thread. The usecase of the GBIF async download service, that can turn a query into a dataset with a citable DOI is a more modern and better version of what people used to do trough correspondence or scientific visits.

A lot of work gets done without proper credit or citation, now if answering a simple query or floating an idea needs a full academic reference, is another discussion I suppose. People might want to put that in acknowledgements.

In any case, I think preserving a permanent record of academic discussion so it can be incorporated in future publications could be valuable.

matdillen commented 2 years ago

Won't you need permission from all the participants in a slack discussion if you will archive it publicly? Similar when archiving github issues from private repositories.

Another interesting one could be zoom (et al.) chat histories - which may include shared files.

PietrH commented 2 years ago

Excellent point on the permissions, I certainly don't immediately expect things posted in a slack workspace to be visible publicly. But you could offer some warning like you get when a zoom recording is started.

Zoom chats are often saved to google docs currently to keep track of ongoing discussions. Or saved as txt files with the export function, but I've never seen those last ones actually disseminated after a conference.

jhpoelen commented 2 years ago

I can see how archiving private forums could be sensitive. There's some benefit to keeping private conversations private to help make it easier to share ideas and try new things.

Would it be an idea to start with open Gihub Issues first? These are public exchanges, and might provide a nice starting point before digging into the more delicate permissions / privacy / sharing issues.

jhpoelen commented 1 year ago

Preliminary (dev) support for tracking github issues:

preston track "https://github.com/globalbioticinteractions/elton/issues"

find most recent issue (open or closed), then tracks all the others ones, including linked assets (e.g., markdown links [label](https://example.org) as well as ![image](https://example.org/image.jpg) . This includes assets upload via the github issues webtool (e.g., "attach files").

PietrH commented 1 year ago

How do you handle the individual comment edit histories?

jhpoelen commented 1 year ago

@PietrH Good to hear from you and thanks for your question. Haven't looked at the individual comment histories yet. In an ideal world, how would you like to have the edit histories be treated?

Just edited this comment, and I'll have a look how that shows up.

jhpoelen commented 1 year ago

When tracking this issue and grabbing last comment using:

preston track "https://api.github.com/repos/bio-guoda/preston/issues/156/comments"\
 | grep hasVersion\
 | grep issues\
 | grep comments\
 | preston cat\
 | jq -c .[]\
 | tail -n1\
 | jq .

the following result is produced:

{
  "url": "https://api.github.com/repos/bio-guoda/preston/issues/comments/1649706424",
  "html_url": "https://github.com/bio-guoda/preston/issues/156#issuecomment-1649706424",
  "issue_url": "https://api.github.com/repos/bio-guoda/preston/issues/156",
  "id": 1649706424,
  "node_id": "IC_kwDOCMmefs5iVIW4",
  "user": {
    "login": "jhpoelen",
    "id": 1084872,
    "node_id": "MDQ6VXNlcjEwODQ4NzI=",
    "avatar_url": "https://avatars.githubusercontent.com/u/1084872?v=4",
    "gravatar_id": "",
    "url": "https://api.github.com/users/jhpoelen",
    "html_url": "https://github.com/jhpoelen",
    "followers_url": "https://api.github.com/users/jhpoelen/followers",
    "following_url": "https://api.github.com/users/jhpoelen/following{/other_user}",
    "gists_url": "https://api.github.com/users/jhpoelen/gists{/gist_id}",
    "starred_url": "https://api.github.com/users/jhpoelen/starred{/owner}{/repo}",
    "subscriptions_url": "https://api.github.com/users/jhpoelen/subscriptions",
    "organizations_url": "https://api.github.com/users/jhpoelen/orgs",
    "repos_url": "https://api.github.com/users/jhpoelen/repos",
    "events_url": "https://api.github.com/users/jhpoelen/events{/privacy}",
    "received_events_url": "https://api.github.com/users/jhpoelen/received_events",
    "type": "User",
    "site_admin": false
  },
  "created_at": "2023-07-25T12:05:06Z",
  "updated_at": "2023-07-25T12:12:59Z",
  "author_association": "MEMBER",
  "body": "@PietrH Good to hear from you and thanks for your question. Haven't looked at the individual comment histories yet. In an ideal world, how would you like to have the edit histories be treated? \r\n\r\nJust edited this comment, and I'll have a look how that shows up.",
  "reactions": {
    "url": "https://api.github.com/repos/bio-guoda/preston/issues/comments/1649706424/reactions",
    "total_count": 0,
    "+1": 0,
    "-1": 0,
    "laugh": 0,
    "hooray": 0,
    "confused": 0,
    "heart": 0,
    "rocket": 0,
    "eyes": 0
  },
  "performed_via_github_app": null
}

so, no sign of comment history as far as I can tell.

jhpoelen commented 1 year ago

@PietrH after digging around in the github api, I see no sign of ways to retrieve comment history. Do you?

matdillen commented 1 year ago

@PietrH after digging around in the github api, I see no sign of ways to retrieve comment history. Do you?

It might still be doable through graphql: https://github.com/orgs/community/discussions/33551

jhpoelen commented 1 year ago

Just added a github workflow to this repository to package all issues when created/edited/closed. https://github.com/bio-guoda/preston/commit/8fd3da8954fa92070319ca91368f67a9c396de7b

Included screenshot of packaging of issues -

Screenshot from 2023-07-25 15-26-09

jhpoelen commented 1 year ago

I just added the ability to stream github meta data from a preston archive to make it easier to transform and interpret github related issues.

preston track "https://github.com/mammaldiversity/mammaldiversity.github.io/issues"\
 | preston gh-stream\
 | jq --raw-output '.["body"]'\
 | pandoc -s > mdd-issues-single-page.html

For related data archive, see attached and html pages.

mdd-issues.zip mdd-issues-single-page.html.txt

Note that associated artifacts are also included in the archive, so, for instance, any image referenced in the issue is included and can be accessed offline.

For instance, looking up some image attachment linked in issue texts -

preston alias https://user-images.githubusercontent.com/906600/230624470-d9c4379e-5a60-4c32-92b6-f72d0e601321.png\
 | preston cat\
 > image.png

with attached image.png included below.

image

jhpoelen commented 1 year ago

Similar approach can be taken for discourse:

curl "https://discourse.gbif.org/site.json"\
 | jq .

produces:

{
  "default_archetype": "regular",
  "notification_types": {
    "mentioned": 1,
    "replied": 2,
    "quoted": 3,
    "edited": 4,
    "liked": 5,
    "private_message": 6,
    "invited_to_private_message": 7,
    "invitee_accepted": 8,
    "posted": 9,
    "moved_post": 10,
    "linked": 11,
    "granted_badge": 12,
    "invited_to_topic": 13,
    "custom": 14,
    "group_mentioned": 15,
    "group_message_summary": 16,
    "watching_first_post": 17,
    "topic_reminder": 18,
    "liked_consolidated": 19,
    "post_approved": 20,
    "code_review_commit_approved": 21,
    "membership_request_accepted": 22,
    "membership_request_consolidated": 23,
    "bookmark_reminder": 24,
    "reaction": 25,
    "votes_released": 26,
    "event_reminder": 27,
    "event_invitation": 28,
    "chat_mention": 29,
    "chat_message": 30,
    "chat_invitation": 31,
    "chat_group_mention": 32,
    "chat_quoted": 33,
    "assigned": 34,
    "question_answer_user_commented": 35,
    "watching_category_or_tag": 36,
    "new_features": 37,
    "admin_problems": 38,
    "following": 800,
    "following_created_topic": 801,
    "following_replied": 802,
    "circles_activity": 900
  },
  "post_types": {
    "regular": 1,
    "moderator_action": 2,
    "small_action": 3,
    "whisper": 4
  },
  "user_tips": {
    "first_notification": 1,
    "topic_timeline": 2,
    "post_menu": 3,
    "topic_notification_levels": 4,
    "suggested_topics": 5,
    "admin_guide": 6
  },
  "trust_levels": {
    "newuser": 0,
    "basic": 1,
    "member": 2,
    "regular": 3,
    "leader": 4
  },
  "groups": [
    {
      "id": 54,
      "name": "BID_DataUse",
      "flair_url": null,
      "flair_bg_color": "",
      "flair_color": ""
    },
    {
      "id": 48,
      "name": "Collections-catalog",
      "flair_url": null,
      "flair_bg_color": "",
      "flair_color": ""
    },
    {
      "id": 53,
      "name": "dm-participants",
      "flair_url": null,
      "flair_bg_color": "",
      "flair_color": ""
    },
    {
      "id": 55,
      "name": "du-participants",
      "flair_url": null,
      "flair_bg_color": "",
      "flair_color": ""
    },
    {
      "id": 47,
      "name": "Mentors",
      "flair_url": null,
      "flair_bg_color": "",
      "flair_color": ""
    },
    {
      "id": 43,
      "name": "nodes_ig",
      "flair_url": null,
      "flair_bg_color": "",
      "flair_color": ""
    },
    {
      "id": 50,
      "name": "translators",
      "flair_url": null,
      "flair_bg_color": "",
      "flair_color": ""
    }
  ],
  "filters": [
    "latest",
    "unread",
    "new",
    "unseen",
    "top",
    "read",
    "posted",
    "bookmarks"
  ],
  "periods": [
    "all",
    "yearly",
    "quarterly",
    "monthly",
    "weekly",
    "daily"
  ],
  "top_menu_items": [
    "latest",
    "unread",
    "new",
    "unseen",
    "top",
    "read",
    "posted",
    "bookmarks",
    "categories"
  ],
  "anonymous_top_menu_items": [
    "latest",
    "top",
    "categories",
    "categories",
    "top"
  ],
  "uncategorized_category_id": 1,
  "user_field_max_length": 2048,
  "post_action_types": [
    {
      "id": 2,
      "name_key": "like",
      "name": "Like",
      "description": "Like this post",
      "short_description": "Like this post",
      "is_flag": false,
      "is_custom_flag": false
    },
    {
      "id": 3,
      "name_key": "off_topic",
      "name": "Off-Topic",
      "description": "This post is not relevant to the current discussion as defined by the title and first post, and should probably be moved elsewhere.",
      "short_description": "Not relevant to the discussion",
      "is_flag": true,
      "is_custom_flag": false
    },
    {
      "id": 4,
      "name_key": "inappropriate",
      "name": "Inappropriate",
      "description": "This post contains content that a reasonable person would consider offensive, abusive, to be hateful conduct or a violation of <a href=\"/guidelines\">our community guidelines</a>.",
      "short_description": "A violation of <a href=\"/guidelines\">our community guidelines</a>",
      "is_flag": true,
      "is_custom_flag": false
    },
    {
      "id": 8,
      "name_key": "spam",
      "name": "Spam",
      "description": "This post is an advertisement, or vandalism. It is not useful or relevant to the current topic.",
      "short_description": "This is an advertisement or vandalism",
      "is_flag": true,
      "is_custom_flag": false
    },
    {
      "id": 6,
      "name_key": "notify_user",
      "name": "Send @%{username} a message",
      "description": "I want to talk to this person directly and personally about their post.",
      "short_description": "I want to talk to this person directly and personally about their post.",
      "is_flag": true,
      "is_custom_flag": true
    },
    {
      "id": null,
      "name_key": null,
      "name": "Translation missing: en.post_action_types..title",
      "description": "Translation missing: en.post_action_types.description",
      "short_description": "Translation missing: en.post_action_types.short_description",
      "is_flag": false,
      "is_custom_flag": false
    },
    {
      "id": 7,
      "name_key": "notify_moderators",
      "name": "Something Else",
      "description": "This post requires staff attention for another reason not listed above.",
      "short_description": "Requires staff attention for another reason",
      "is_flag": true,
      "is_custom_flag": true
    }
  ],
  "topic_flag_types": [
    {
      "id": 4,
      "name_key": "inappropriate",
      "name": "Inappropriate",
      "description": "This topic contains content that a reasonable person would consider offensive, abusive, to be hateful conduct or a violation of <a href=\"/guidelines\">our community guidelines</a>.",
      "short_description": "A violation of <a href=\"/guidelines\">our community guidelines</a>",
      "is_flag": true,
      "is_custom_flag": false
    },
    {
      "id": 8,
      "name_key": "spam",
      "name": "Spam",
      "description": "This topic is an advertisement. It is not useful or relevant to this site, but promotional in nature.",
      "short_description": "This is an advertisement",
      "is_flag": true,
      "is_custom_flag": false
    },
    {
      "id": null,
      "name_key": null,
      "name": "Translation missing: en.topic_flag_types..title",
      "description": "Translation missing: en.topic_flag_types.description",
      "short_description": "Translation missing: en.topic_flag_types.short_description",
      "is_flag": false,
      "is_custom_flag": false
    },
    {
      "id": 7,
      "name_key": "notify_moderators",
      "name": "Something Else",
      "description": "This topic requires general staff attention based on the <a href=\"/guidelines\">guidelines</a>, <a href=\"https://www.gbif.org/terms\">TOS</a>, or for another reason not listed above.",
      "short_description": "Requires staff attention for another reason",
      "is_flag": true,
      "is_custom_flag": true
    }
  ],
  "can_create_tag": false,
  "can_tag_topics": false,
  "can_tag_pms": false,
  "topic_featured_link_allowed_category_ids": [
    28,
    27,
    25,
    23,
    13,
    1,
    24,
    6,
    8,
    16,
    20,
    9,
    4,
    12,
    17,
    22,
    2,
    15,
    5,
    19,
    26,
    7,
    18,
    21,
    14
  ],
  "user_themes": [
    {
      "theme_id": 1,
      "name": "Dark",
      "default": false,
      "color_scheme_id": 1
    },
    {
      "theme_id": 2,
      "name": "Default",
      "default": false,
      "color_scheme_id": null
    },
    {
      "theme_id": 3,
      "name": "GBIF",
      "default": true,
      "color_scheme_id": 3
    }
  ],
  "user_color_schemes": [],
  "default_dark_color_scheme": null,
  "censored_regexp": [],
  "custom_emoji_translation": {},
  "watched_words_replace": null,
  "watched_words_link": null,
  "categories": [
    {
      "id": 21,
      "name": "Digital/Extended Specimen",
      "color": "0088CC",
      "text_color": "FFFFFF",
      "slug": "digital-extended-specimen",
      "topic_count": 31,
      "post_count": 534,
      "position": 1,
      "description": "<strong>Start Here</strong><br>\nThis is the home page for the virtual consultation: <strong>Converging Digital Specimens and Extended Specimens - Towards a global specification for data integration</strong>. GBIF, under the umbrella of the <a href=\"https://www.allianceforbio.org/\">alliance for biodiversity knowledge</a>, is leading the consultation as part of the European Commission-funded <a href=\"https://www.synthesys.info/\">SYNTHESYS+ </a> project.",
      "description_text": "Start Here\nThis is the home page for the virtual consultation: Converging Digital Specimens and Extended Specimens - Towards a global specification for data integration. GBIF, under the umbrella of the alliance for biodiversity knowledge, is leading the consultation as part of the European Commission-funded SYNTHESYS+  project.",
      "description_excerpt": "Start Here \nThis is the home page for the virtual consultation: Converging Digital Specimens and Extended Specimens - Towards a global specification for data integration. GBIF, under the umbrella of the <a href=\"https://www.allianceforbio.org/\">alliance for biodiversity knowledge</a>, is leading the consultation as part of the European Commissi&hellip;",
      "topic_url": "/t/converging-digital-specimens-and-extended-specimens-towards-a-global-specification-for-data-integration-phase-1/2394",
      "read_restricted": false,
      "permission": null,
      "notification_level": 1,
      "topic_template": "",
      "has_children": false,
      "sort_order": "",
      "sort_ascending": null,
      "show_subcategory_list": false,
      "num_featured_topics": 3,
      "default_view": "",
      "subcategory_list_style": "rows_with_featured_topics",
      "default_top_period": "all",
      "default_list_filter": "all",
      "minimum_required_tags": 0,
      "navigate_to_first_post_after_read": false,
      "custom_fields": {
        "has_chat_enabled": null,
        "enable_accepted_answers": null
      },
      "read_only_banner": "",
      "form_template_ids": [],
      "uploaded_logo": null,
      "uploaded_logo_dark": null,
      "uploaded_background": null,
      "required_tag_groups": [],
      "can_edit": false
    },
    {
      "id": 6,
      "name": "Data Publishing",
      "color": "509e2f",
      "text_color": "FFFFFF",
      "slug": "data-publishing",
      "topic_count": 65,
      "post_count": 349,
      "position": 2,
      "description": "For matters related to data publishing in GBIF.",
      "description_text": "For matters related to data publishing in GBIF.",
      "description_excerpt": "For matters related to data publishing in GBIF.",
      "topic_url": "/t/about-the-data-publishing-category/13",
      "read_restricted": false,
      "permission": null,
      "notification_level": 1,
      "topic_template": "",
      "has_children": true,
      "sort_order": "",
      "sort_ascending": null,
      "show_subcategory_list": false,
      "num_featured_topics": 3,
      "default_view": "",
      "subcategory_list_style": "rows_with_featured_topics",
      "default_top_period": "all",
      "default_list_filter": "all",
      "minimum_required_tags": 0,
      "navigate_to_first_post_after_read": false,
      "custom_fields": {
        "has_chat_enabled": null,
        "enable_accepted_answers": "true"
      },
      "read_only_banner": null,
      "form_template_ids": [],
      "uploaded_logo": null,
      "uploaded_logo_dark": null,
      "uploaded_background": null,
      "required_tag_groups": [],
      "can_edit": false
    },
    {
      "id": 7,
      "name": "Data Use",
      "color": "636fb4",
      "text_color": "FFFFFF",
      "slug": "data-use",
      "topic_count": 89,
      "post_count": 393,
      "position": 3,
      "description": "This category is for matters related to <strong>use</strong> of GBIF-mediated data.",
      "description_text": "This category is for matters related to use of GBIF-mediated data.",
      "description_excerpt": "This category is for matters related to use of GBIF-mediated data.",
      "topic_url": "/t/about-the-data-use-category/14",
      "read_restricted": false,
      "permission": null,
      "notification_level": 1,
      "topic_template": "",
      "has_children": false,
      "sort_order": "",
      "sort_ascending": null,
      "show_subcategory_list": false,
      "num_featured_topics": 3,
      "default_view": "",
      "subcategory_list_style": "rows_with_featured_topics",
      "default_top_period": "all",
      "default_list_filter": "all",
      "minimum_required_tags": 0,
      "navigate_to_first_post_after_read": false,
      "custom_fields": {
        "has_chat_enabled": null,
        "enable_accepted_answers": null
      },
      "read_only_banner": null,
      "form_template_ids": [],
      "uploaded_logo": null,
      "uploaded_logo_dark": null,
      "uploaded_background": null,
      "required_tag_groups": [],
      "can_edit": false
    },
    {
      "id": 16,
      "name": "data-blog",
      "color": "25AAE2",
      "text_color": "FFFFFF",
      "slug": "data-blog",
      "topic_count": 46,
      "post_count": 218,
      "position": 4,
      "description": "This category is for posts generated by <a href=\"http://data-blog.gbif.org\">data-blog.gbif.org</a>.",
      "description_text": "This category is for posts generated by data-blog.gbif.org.",
      "description_excerpt": "This category is for posts generated by <a href=\"http://data-blog.gbif.org\">data-blog.gbif.org</a>.",
      "topic_url": "/t/about-the-data-blog-category/409",
      "read_restricted": false,
      "permission": null,
      "notification_level": 1,
      "topic_template": null,
      "has_children": false,
      "sort_order": null,
      "sort_ascending": null,
      "show_subcategory_list": false,
      "num_featured_topics": 3,
      "default_view": null,
      "subcategory_list_style": "rows_with_featured_topics",
      "default_top_period": "all",
      "default_list_filter": "all",
      "minimum_required_tags": 0,
      "navigate_to_first_post_after_read": false,
      "custom_fields": {
        "has_chat_enabled": null,
        "enable_accepted_answers": null
      },
      "read_only_banner": null,
      "form_template_ids": [],
      "uploaded_logo": null,
      "uploaded_logo_dark": null,
      "uploaded_background": null,
      "required_tag_groups": [],
      "can_edit": false
    },
    {
      "id": 19,
      "name": "Translators",
      "color": "0088CC",
      "text_color": "FFFFFF",
      "slug": "translators",
      "topic_count": 21,
      "post_count": 63,
      "position": 7,
      "description": "This category enables Secretariat staff and <a href=\"https://www.gbif.org/translators\">GBIF volunteer translators</a> to discuss community-led translation activities.",
      "description_text": "This category enables Secretariat staff and GBIF volunteer translators to discuss community-led translation activities.",
      "description_excerpt": "This category enables Secretariat staff and <a href=\"https://www.gbif.org/translators\">GBIF volunteer translators</a> to discuss community-led translation activities.",
      "topic_url": "/t/about-the-translators-category/2189",
      "read_restricted": false,
      "permission": null,
      "notification_level": 1,
      "topic_template": "",
      "has_children": false,
      "sort_order": null,
      "sort_ascending": null,
      "show_subcategory_list": false,
      "num_featured_topics": 8,
      "default_view": "latest",
      "subcategory_list_style": "rows_with_featured_topics",
      "default_top_period": "all",
      "default_list_filter": "all",
      "minimum_required_tags": 0,
      "navigate_to_first_post_after_read": false,
      "custom_fields": {
        "has_chat_enabled": null,
        "enable_accepted_answers": "true"
      },
      "read_only_banner": "If you have interest in the translation work of GBIF community volunteers, please join the group before posting ",
      "form_template_ids": [],
      "uploaded_logo": null,
      "uploaded_logo_dark": null,
      "uploaded_background": null,
      "required_tag_groups": [],
      "can_edit": false
    },
    {
      "id": 5,
      "name": "Biodiversity Open Data Ambassadors",
      "color": "AB9364",
      "text_color": "FFFFFF",
      "slug": "biodiversity-open-data-ambassadors",
      "topic_count": 6,
      "post_count": 8,
      "position": 8,
      "description": null,
      "description_text": null,
      "description_excerpt": null,
      "topic_url": "/t/about-the-biodiversity-open-data-ambassadors-category/12",
      "read_restricted": false,
      "permission": null,
      "notification_level": 1,
      "topic_template": "",
      "has_children": false,
      "sort_order": "",
      "sort_ascending": null,
      "show_subcategory_list": false,
      "num_featured_topics": 3,
      "default_view": "",
      "subcategory_list_style": "rows_with_featured_topics",
      "default_top_period": "all",
      "default_list_filter": "all",
      "minimum_required_tags": 0,
      "navigate_to_first_post_after_read": false,
      "custom_fields": {
        "has_chat_enabled": null,
        "enable_accepted_answers": null
      },
      "read_only_banner": "",
      "form_template_ids": [],
      "uploaded_logo": null,
      "uploaded_logo_dark": null,
      "uploaded_background": null,
      "required_tag_groups": [],
      "can_edit": false
    },
    {
      "id": 14,
      "name": "Alliance for Biodiversity Knowledge",
      "color": "F1592A",
      "text_color": "FFFFFF",
      "slug": "alliance-for-biodiversity-knowledge",
      "topic_count": 7,
      "post_count": 30,
      "position": 10,
      "description": "In March 2017, the <a href=\"http://www.senckenberg.de\">Senckenberg Gesellschaft für Naturforschung</a> hosted a workshop on Exploring Synergies and Sustainability for Biodiversity Information Systems. Attendees representing global data infrastructures, national data centres and major research institutions agreed that the global community needed to develop a shared mechanism for planning, delivering and sustaining a linked and open global biodiversity data infrastructure.",
      "description_text": "In March 2017, the Senckenberg Gesellschaft für Naturforschung hosted a workshop on Exploring Synergies and Sustainability for Biodiversity Information Systems. Attendees representing global data infrastructures, national data centres and major research institutions agreed that the global community needed to develop a shared mechanism for planning, delivering and sustaining a linked and open global biodiversity data infrastructure.",
      "description_excerpt": "In March 2017, the <a href=\"http://www.senckenberg.de\">Senckenberg Gesellschaft für Naturforschung</a> hosted a workshop on Exploring Synergies and Sustainability for Biodiversity Information Systems. Attendees representing global data infrastructures, national data centres and major research institutions agreed that the global community &hellip;",
      "topic_url": "/t/about-the-alliance-for-biodiversity-knowledge/392",
      "read_restricted": false,
      "permission": null,
      "notification_level": 1,
      "topic_template": "",
      "has_children": true,
      "sort_order": "",
      "sort_ascending": null,
      "show_subcategory_list": false,
      "num_featured_topics": 3,
      "default_view": "",
      "subcategory_list_style": "rows_with_featured_topics",
      "default_top_period": "all",
      "default_list_filter": "all",
      "minimum_required_tags": 0,
      "navigate_to_first_post_after_read": false,
      "custom_fields": {
        "has_chat_enabled": null,
        "enable_accepted_answers": null
      },
      "read_only_banner": null,
      "form_template_ids": [],
      "uploaded_logo": null,
      "uploaded_logo_dark": null,
      "uploaded_background": null,
      "required_tag_groups": [],
      "can_edit": false
    },
    {
      "id": 1,
      "name": "General",
      "color": "EEEEEE",
      "text_color": "FFFFFF",
      "slug": "uncategorized",
      "topic_count": 134,
      "post_count": 709,
      "position": 11,
      "description": "Topics that don't need a category, or don't fit into any other existing category.",
      "description_text": "Topics that don't need a category, or don't fit into any other existing category.",
      "description_excerpt": "Topics that don't need a category, or don't fit into any other existing category.",
      "topic_url": "/t/",
      "read_restricted": false,
      "permission": null,
      "notification_level": 1,
      "topic_template": "",
      "has_children": false,
      "sort_order": "",
      "sort_ascending": null,
      "show_subcategory_list": false,
      "num_featured_topics": 3,
      "default_view": "",
      "subcategory_list_style": "rows_with_featured_topics",
      "default_top_period": "all",
      "default_list_filter": "all",
      "minimum_required_tags": 0,
      "navigate_to_first_post_after_read": false,
      "custom_fields": {
        "has_chat_enabled": null,
        "enable_accepted_answers": null
      },
      "read_only_banner": null,
      "form_template_ids": [],
      "uploaded_logo": null,
      "uploaded_logo_dark": null,
      "uploaded_background": null,
      "required_tag_groups": [],
      "can_edit": false
    },
    {
      "id": 18,
      "name": "Collections Catalogue",
      "color": "0088CC",
      "text_color": "FFFFFF",
      "slug": "collections-catalogue",
      "topic_count": 46,
      "post_count": 409,
      "position": 15,
      "description": "Español: <a href=\"https://discourse.gbif.org/t/adelantando-el-catalogo-de-colecciones-de-historia-natural-del-mundo/2037\">Adelantando el Catálogo de Colecciones de Historia Natural del Mundo</a><br>\nFrançais: <a href=\"https://discourse.gbif.org/t/progressant-le-catalogue-des-collections-dhistoire-naturelle-du-monde/2040\">Faire avancer le Catalogue des Collections d’Histoire Naturelle du Monde</a><br>\n简体中文: <a href=\"https://discourse.gbif.org/t/topic/2039\">建立《全球自然历史馆藏名录》</a>",
      "description_text": "Español: Adelantando el Catálogo de Colecciones de Historia Natural del Mundo\nFrançais: Faire avancer le Catalogue des Collections d’Histoire Naturelle du Monde\n简体中文: 建立《全球自然历史馆藏名录》",
      "description_excerpt": "Español: <a href=\"https://discourse.gbif.org/t/adelantando-el-catalogo-de-colecciones-de-historia-natural-del-mundo/2037\">Adelantando el Catálogo de Colecciones de Historia Natural del Mundo</a> \nFrançais: <a href=\"https://discourse.gbif.org/t/progressant-le-catalogue-des-collections-dhistoire-naturelle-du-monde/2040\">Faire avancer le Catalogue des Collections d’Histoire Naturelle du Monde</a> \n简体中文: <a href=\"https://discourse.gbif.org/t/topic/2039\">建立《全球自然历史馆藏名录》</a>",
      "topic_url": "/t/advancing-the-catalogue-of-the-worlds-natural-history-collections/1710",
      "read_restricted": false,
      "permission": null,
      "notification_level": 1,
      "topic_template": "",
      "has_children": false,
      "sort_order": "",
      "sort_ascending": null,
      "show_subcategory_list": false,
      "num_featured_topics": 3,
      "default_view": "",
      "subcategory_list_style": "rows_with_featured_topics",
      "default_top_period": "all",
      "default_list_filter": "all",
      "minimum_required_tags": 0,
      "navigate_to_first_post_after_read": false,
      "custom_fields": {
        "has_chat_enabled": null,
        "enable_accepted_answers": null
      },
      "read_only_banner": null,
      "form_template_ids": [],
      "uploaded_logo": null,
      "uploaded_logo_dark": null,
      "uploaded_background": null,
      "required_tag_groups": [],
      "can_edit": false
    },
    {
      "id": 20,
      "name": "GB27",
      "color": "0088CC",
      "text_color": "FFFFFF",
      "slug": "gb27",
      "topic_count": 8,
      "post_count": 51,
      "position": 16,
      "description": "This category contains threads for further discussions of the presentations given by the GBIF Secretariat staff and others on day 2 of the Governing Board meeting 27",
      "description_text": "This category contains threads for further discussions of the presentations given by the GBIF Secretariat staff and others on day 2 of the Governing Board meeting 27",
      "description_excerpt": "This category contains threads for further discussions of the presentations given by the GBIF Secretariat staff and others on day 2 of the Governing Board meeting 27",
      "topic_url": "/t/about-the-gb27-category/2343",
      "read_restricted": false,
      "permission": null,
      "notification_level": 1,
      "topic_template": null,
      "has_children": false,
      "sort_order": null,
      "sort_ascending": null,
      "show_subcategory_list": false,
      "num_featured_topics": 3,
      "default_view": null,
      "subcategory_list_style": "rows_with_featured_topics",
      "default_top_period": "all",
      "default_list_filter": "all",
      "minimum_required_tags": 0,
      "navigate_to_first_post_after_read": false,
      "custom_fields": {
        "has_chat_enabled": null,
        "enable_accepted_answers": null
      },
      "read_only_banner": null,
      "form_template_ids": [],
      "uploaded_logo": null,
      "uploaded_logo_dark": null,
      "uploaded_background": null,
      "required_tag_groups": [],
      "can_edit": false
    },
    {
      "id": 26,
      "name": "Diversifying the GBIF data model",
      "color": "3AB54A",
      "text_color": "FFFFFF",
      "slug": "gbif-data-model",
      "topic_count": 32,
      "post_count": 111,
      "position": 22,
      "description": "<a href=\"https://dwc.tdwg.org/\">Darwin Core</a>—the most commonly used data standard in the GBIF community—has provided a simple and effective framework for supporting the growth of species occurrence data available from the GBIF network. But the simplicity of this standard, established and maintained by <a href=\"https://www.tdwg.org/\">Biodiversity Information Standards</a> (TDWG), has significant limitations when it comes to shaping data from diverse sources.",
      "description_text": "Darwin Core—the most commonly used data standard in the GBIF community—has provided a simple and effective framework for supporting the growth of species occurrence data available from the GBIF network. But the simplicity of this standard, established and maintained by Biodiversity Information Standards (TDWG), has significant limitations when it comes to shaping data from diverse sources.",
      "description_excerpt": "<a href=\"https://dwc.tdwg.org/\">Darwin Core</a>—the most commonly used data standard in the GBIF community—has provided a simple and effective framework for supporting the growth of species occurrence data available from the GBIF network. But the simplicity of this standard, established and maintained by <a href=\"https://www.tdwg.org/\">Biodiversity Information Stand&hellip;</a>",
      "topic_url": "/t/diversifying-the-gbif-data-model-intro/3299",
      "read_restricted": false,
      "permission": null,
      "parent_category_id": 6,
      "notification_level": 1,
      "topic_template": "",
      "has_children": false,
      "sort_order": "category",
      "sort_ascending": null,
      "show_subcategory_list": false,
      "num_featured_topics": 3,
      "default_view": "",
      "subcategory_list_style": "rows_with_featured_topics",
      "default_top_period": "all",
      "default_list_filter": "all",
      "minimum_required_tags": 0,
      "navigate_to_first_post_after_read": false,
      "custom_fields": {
        "has_chat_enabled": null,
        "enable_accepted_answers": null
      },
      "read_only_banner": "",
      "form_template_ids": [],
      "uploaded_logo": null,
      "uploaded_logo_dark": null,
      "uploaded_background": null,
      "required_tag_groups": [],
      "can_edit": false
    },
    {
      "id": 27,
      "name": "Post-2020 Global Biodiversity Framework",
      "color": "0088CC",
      "text_color": "FFFFFF",
      "slug": "post2020gbf",
      "topic_count": 3,
      "post_count": 9,
      "position": 23,
      "description": "Join the online consultation on data needs for the Post-2020 Global Biodiversity Framework starting 13 September 2022 and ending 28 September at 09:00 CEST UTC+2.",
      "description_text": "Join the online consultation on data needs for the Post-2020 Global Biodiversity Framework starting 13 September 2022 and ending 28 September at 09:00 CEST UTC+2.",
      "description_excerpt": "Join the online consultation on data needs for the Post-2020 Global Biodiversity Framework starting 13 September 2022 and ending 28 September at 09:00 CEST UTC+2.",
      "topic_url": "/t/about-the-post-2020-global-biodiversity-framework-category/3484",
      "read_restricted": false,
      "permission": null,
      "parent_category_id": 14,
      "notification_level": 1,
      "topic_template": null,
      "has_children": false,
      "sort_order": null,
      "sort_ascending": null,
      "show_subcategory_list": false,
      "num_featured_topics": 3,
      "default_view": null,
      "subcategory_list_style": "rows_with_featured_topics",
      "default_top_period": "all",
      "default_list_filter": "all",
      "minimum_required_tags": 0,
      "navigate_to_first_post_after_read": false,
      "custom_fields": {
        "has_chat_enabled": null,
        "enable_accepted_answers": null
      },
      "read_only_banner": null,
      "form_template_ids": [],
      "uploaded_logo": null,
      "uploaded_logo_dark": null,
      "uploaded_background": null,
      "required_tag_groups": [],
      "can_edit": false
    }
  ],
  "markdown_additional_options": {
    "chat": {
      "limited_pretty_text_features": [
        "anchor",
        "bbcode-block",
        "bbcode-inline",
        "code",
        "category-hashtag",
        "censored",
        "chat-transcript",
        "discourse-local-dates",
        "emoji",
        "emojiShortcuts",
        "inlineEmoji",
        "html-img",
        "hashtag-autocomplete",
        "mentions",
        "unicodeUsernames",
        "onebox",
        "quotes",
        "spoiler-alert",
        "table",
        "text-post-process",
        "upload-protocol",
        "watched-words"
      ],
      "limited_pretty_text_markdown_rules": [
        "autolink",
        "list",
        "backticks",
        "newline",
        "code",
        "fence",
        "image",
        "table",
        "linkify",
        "link",
        "strikethrough",
        "blockquote",
        "emphasis"
      ],
      "hashtag_configurations": {
        "topic-composer": [
          "category"
        ]
      }
    }
  },
  "hashtag_configurations": {
    "topic-composer": [
      "category"
    ]
  },
  "hashtag_icons": {
    "category": "folder"
  },
  "displayed_about_plugin_stat_groups": [],
  "anonymous_sidebar_sections": [
    {
      "id": 1,
      "title": "Community",
      "links": [
        {
          "id": 1,
          "name": "Topics",
          "value": "/latest",
          "icon": "layer-group",
          "external": false,
          "full_reload": false,
          "segment": "primary"
        },
        {
          "id": 2,
          "name": "My Posts",
          "value": "/my/activity",
          "icon": "user",
          "external": false,
          "full_reload": true,
          "segment": "primary"
        },
        {
          "id": 3,
          "name": "Review",
          "value": "/review",
          "icon": "flag",
          "external": false,
          "full_reload": false,
          "segment": "primary"
        },
        {
          "id": 4,
          "name": "Admin",
          "value": "/admin",
          "icon": "wrench",
          "external": false,
          "full_reload": false,
          "segment": "primary"
        },
        {
          "id": 5,
          "name": "Users",
          "value": "/u",
          "icon": "users",
          "external": false,
          "full_reload": false,
          "segment": "secondary"
        },
        {
          "id": 6,
          "name": "About",
          "value": "/about",
          "icon": "info-circle",
          "external": false,
          "full_reload": false,
          "segment": "secondary"
        },
        {
          "id": 7,
          "name": "FAQ",
          "value": "/faq",
          "icon": "question-circle",
          "external": false,
          "full_reload": false,
          "segment": "secondary"
        },
        {
          "id": 8,
          "name": "Groups",
          "value": "/g",
          "icon": "user-friends",
          "external": false,
          "full_reload": false,
          "segment": "secondary"
        },
        {
          "id": 9,
          "name": "Badges",
          "value": "/badges",
          "icon": "certificate",
          "external": false,
          "full_reload": false,
          "segment": "secondary"
        }
      ],
      "slug": "community",
      "public": true,
      "section_type": "community"
    }
  ],
  "tos_url": "https://www.gbif.org/terms",
  "privacy_policy_url": "https://www.gbif.org/terms/privacy-policy",
  "hosting_tier": "standard",
  "archetypes": [
    {
      "id": "regular",
      "name": "Regular Topic",
      "options": []
    },
    {
      "id": "banner",
      "name": "Banner Topic",
      "options": []
    }
  ],
  "user_fields": [],
  "auth_providers": []
}
jhpoelen commented 1 year ago

I renamed this issue to tracking github issues. If there's a desire to do similar stuff with slack / discourse, I'll rely that the universe will make this known somehow. Thanks for all your input!

PS the github issue streaming was included in v0.7.3 , shortly after the introduction of github issue tracking in v0.7.2