Skip to content

Instantly share code, notes, and snippets.

@nullkal
Last active August 27, 2018 17:34
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save nullkal/97683a95d937ca888b20c46a9ce29b98 to your computer and use it in GitHub Desktop.
Save nullkal/97683a95d937ca888b20c46a9ce29b98 to your computer and use it in GitHub Desktop.
/*
* mstdn2birdsite.ts - The filter code of "Mastodon → Twitter"
* Written in 2017 by nullkal <nullkal@nil.nu>
*
* To the extent possible under law, the author(s) have dedicated all copyright
* and related and neighboring rights to this software to the public domain
* worldwide. This software is distributed without any warranty.
* You should have received a copy of the CC0 Public Domain Dedication along
* with this software. If not, see
* <http://creativecommons.org/publicdomain/zero/1.0/>.
*/
type HandleFunc = (match: Array<string>) => string;
interface Handler {
pattern: RegExp;
func: HandleFunc;
};
class FeedFilter {
private handlers: Handler[];
constructor() {
this.handlers = [];
}
public addHandler(pattern: RegExp, func: HandleFunc) {
this.handlers.push({ pattern, func });
}
public exec() {
for (const i in this.handlers) {
const handler = this.handlers[i];
const match = handler.pattern.exec(Feed.newFeedItem.EntryTitle);
if (match !== null) {
Twitter.postNewTweet.setTweet(handler.func(match));
return;
}
}
Twitter.postNewTweet.skip();
}
};
function formatContent(content: string) {
return content
.replace(/<br\s*\/?>/g, "\n")
.replace(/<.*?>/g, '');
}
let f = new FeedFilter();
f.addHandler(/^New status by /, (match) => {
const content = formatContent(Feed.newFeedItem.EntryContent);
const url = Feed.newFeedItem.EntryUrl;
if (/((?:[^\w]|^)[@@])(\w+)/.test(content)) {
Twitter.postNewTweet.skip();
}
return `${content} ${url}`;
});
/*f.addHandler(
/^\w+ shared a status by (\w+(?:@[a-z0-9\.\-]+[a-z0-9]+))/,
(match) => {
const originalPoster = Feed.newFeedItem.EntryUrl;
const content = formatContent(Feed.newFeedItem.EntryContent);
return `BT ${originalPoster}\n${content}`;
}
);*/
f.exec();
@nullkal
Copy link
Author

nullkal commented Aug 27, 2018

👍 ご報告ありがとうございました。修正、取り入れました!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment