Skip to content

Commit

Permalink
Merge branch 'main' into urlModules
Browse files Browse the repository at this point in the history
  • Loading branch information
rojvv committed Aug 8, 2022
2 parents 86a9dbd + 8fdd796 commit 2bc3f7e
Show file tree
Hide file tree
Showing 26 changed files with 798 additions and 3 deletions.
37 changes: 34 additions & 3 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,17 +5,47 @@ on:
branches-ignore:
- gh-pages
paths-ignore:
- '**.md'
- "**.md"
tags:
- '*'
- "*"

jobs:
<<<<<<< HEAD
release:
runs-on: ubuntu-latest
=======
lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3

- uses: denoland/setup-deno@v1
with:
deno-version: vx.x.x

- run: deno lint

fmt:
runs-on: ubuntu-latest
needs: lint
steps:
- uses: actions/checkout@v3

- uses: denoland/setup-deno@v1
with:
deno-version: vx.x.x

- run: deno fmt --check

release:
runs-on: ubuntu-latest
needs: fmt
>>>>>>> main
if: startsWith(github.ref, 'refs/tags/')
steps:
- uses: actions/checkout@v3

<<<<<<< HEAD
- uses: actions/setup-node@v3
with:
cache: npm
Expand All @@ -25,7 +55,8 @@ jobs:
ARCHIVE=$(npm pack)
mv $ARCHIVE archive.tgz
=======
>>>>>>> main
- uses: softprops/action-gh-release@v1
with:
files: archive.tgz
generate_release_notes: true
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,3 +2,7 @@
externals/
downloads/
test*
<<<<<<< HEAD
=======
.log
>>>>>>> main
4 changes: 4 additions & 0 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
{
<<<<<<< HEAD
=======
"deno.enable": true,
>>>>>>> main
"deno.importMap": "./import_map.json"
}
4 changes: 4 additions & 0 deletions constants.ts
Original file line number Diff line number Diff line change
@@ -1 +1,5 @@
<<<<<<< HEAD
export const version = "0.0.8";
=======
export const version = "0.1.6";
>>>>>>> main
6 changes: 6 additions & 0 deletions deno.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{
"importMap": "./import_map.json",
"tasks": {
"run": "deno run -A main.ts"
}
}
11 changes: 11 additions & 0 deletions deps.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
<<<<<<< HEAD
export { config } from "https://deno.land/x/[email protected]/mod.ts";
export { cleanEnv, num, str } from "https://deno.land/x/[email protected]/mod.ts";
export { html } from "https://deno.land/x/[email protected]/mod.ts";
Expand All @@ -11,3 +12,13 @@ export * from "https://deno.land/x/[email protected]/mod.ts";
export * from "https://deno.land/x/[email protected]/src/client/uploads.ts";
export * from "https://deno.land/x/[email protected]/src/define.d.ts";
export { bigInt } from "https://deno.land/x/[email protected]/deps.ts";
=======
// Internal dependencies
export {
cleanEnv,
makeValidator,
num,
str,
} from "https://deno.land/x/[email protected]/mod.ts";
export * from "https://deno.land/x/[email protected]/mod.ts";
>>>>>>> main
37 changes: 37 additions & 0 deletions env.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,46 @@
<<<<<<< HEAD
import { cleanEnv, config, num, str } from "$deps";

config({ export: true });
=======
import * as log from "std/log/mod.ts";
import { config } from "std/dotenv/mod.ts";
import { cleanEnv, makeValidator, num, str } from "./deps.ts";

await config({ export: true });

// https://stackoverflow.com/a/54256858/12250600
const PREFIX_REGEX = /^[^\p{L}\d\s@#\$]$/u;

const cmdPrefix = makeValidator((input) => {
if (PREFIX_REGEX.test(input)) {
return input;
}
log.warning(
"falling back to '\\' for COMMAND_PREFIX: a single symbol excluding @, # and $ was expected",
);
Deno.exit();
return "\\";
});

const inputPrefix = makeValidator((input) => {
if (PREFIX_REGEX.test(input) && input !== Deno.env.get("COMMAND_PREFIX")) {
return input;
}
log.warning(
"falling back to '>' for INPUT_PREFIX: a single symbol excluding @, #, $ and COMMAND_PREFIX was expected",
);
return "\\";
});
>>>>>>> main

export default cleanEnv(Deno.env.toObject(), {
STRING_SESSION: str(),
APP_ID: num(),
APP_HASH: str(),
<<<<<<< HEAD
=======
COMMAND_PREFIX: cmdPrefix({ default: "\\" }),
INPUT_PREFIX: inputPrefix({ default: ">" }),
>>>>>>> main
});
26 changes: 26 additions & 0 deletions handlers/command_handler.ts
Original file line number Diff line number Diff line change
@@ -1,16 +1,30 @@
<<<<<<< HEAD
import { HandlerFuncParams } from "./handler.ts";
import { MessageHandler } from "./message_handler.ts";
=======
import { HandleFuncResult, HandlerFuncParams } from "./handler.ts";
import { MessageHandler } from "./message_handler.ts";
import env from "../env.ts";
>>>>>>> main

export interface CommandHandlerFuncParams {
args: string[];
input: string;
}

<<<<<<< HEAD
=======
// deno-lint-ignore ban-types
>>>>>>> main
export type CommandHandlerFunc<T extends object> = ({
client,
event,
...rest
<<<<<<< HEAD
}: HandlerFuncParams & T) => Promise<void>;
=======
}: HandlerFuncParams & T) => HandleFuncResult;
>>>>>>> main

export interface CommandHandlerOpts {
aliases?: string[];
Expand All @@ -36,7 +50,11 @@ export class CommandHandler extends MessageHandler<CommandHandlerFuncParams> {
return false;
}
const { text } = event.message;
<<<<<<< HEAD
if (!["\\", ">"].includes(text[0])) {
=======
if (![env.COMMAND_PREFIX, env.INPUT_PREFIX].includes(text[0])) {
>>>>>>> main
return false;
}
const command = text.split(/\s/)[0].slice(1);
Expand All @@ -53,14 +71,22 @@ export class CommandHandler extends MessageHandler<CommandHandlerFuncParams> {
const inputType = message[0];
const reply = await event.message.getReplyMessage();
switch (inputType) {
<<<<<<< HEAD
case "\\":
=======
case env.COMMAND_PREFIX:
>>>>>>> main
input = (this.opts?.rawInput ? message : text)
.split("\n")
.slice(1)
.join("\n")
.trim();
break;
<<<<<<< HEAD
case ">":
=======
case env.INPUT_PREFIX:
>>>>>>> main
if (reply && reply.text) {
input = this.opts?.rawInput ? reply.message : reply.text;
}
Expand Down
18 changes: 18 additions & 0 deletions handlers/handler.ts
Original file line number Diff line number Diff line change
@@ -1,14 +1,32 @@
<<<<<<< HEAD
import { events, TelegramClient } from "$grm";

export interface HandlerFuncParams {
client: TelegramClient;
event: events.NewMessageEvent;
=======
import { NewMessageEvent, TelegramClient } from "$grm";

export const End = Symbol();

export type HandleFuncResult = Promise<void | typeof End>;

export interface HandlerFuncParams {
client: TelegramClient;
event: NewMessageEvent;
>>>>>>> main
}

export abstract class Handler {
abstract check(
{ client, event }: HandlerFuncParams,
): Promise<boolean> | boolean;

<<<<<<< HEAD
abstract handle({ client, event }: HandlerFuncParams): Promise<void>;
=======
abstract handle(
{ client, event }: HandlerFuncParams,
): HandleFuncResult;
>>>>>>> main
}
12 changes: 12 additions & 0 deletions handlers/message_handler.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,23 @@
<<<<<<< HEAD
import { Handler, HandlerFuncParams } from "./handler.ts";

=======
import { HandleFuncResult, Handler, HandlerFuncParams } from "./handler.ts";

// deno-lint-ignore ban-types
>>>>>>> main
export type MessageHandlerFunc<T extends object> = ({
client,
event,
...rest
<<<<<<< HEAD
}: HandlerFuncParams & T) => Promise<void>;

=======
}: HandlerFuncParams & T) => HandleFuncResult;

// deno-lint-ignore ban-types
>>>>>>> main
export class MessageHandler<T extends object> extends Handler {
out?: boolean;
scope?: "all" | "group" | "private" | "channel";
Expand Down
31 changes: 31 additions & 0 deletions helpers.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
<<<<<<< HEAD
import { events } from "$grm";

export async function wrap(
Expand Down Expand Up @@ -27,4 +28,34 @@ export async function updateMessage(
text: event.message.text + "\n" + text,
parseMode: pm,
});
=======
// This file will include helpers for all modules (built-in and externals).
import { CustomFile, NewMessageEvent, SendMessageParams } from "$grm";
import { Buffer } from "$grm-deps";
import { fmt, pre, type Stringable } from "./deps.ts";

export function updateMessage(
event: NewMessageEvent,
text: Stringable,
) {
return event.message.edit(
fmt`${event.message.text}\n${text}`.edit,
);
}

export function longText(
text: string,
name?: string,
): SendMessageParams {
return text.length > 4096
? {
file: new CustomFile(
name ?? crypto.randomUUID(),
text.length,
"",
Buffer.from(text),
),
}
: pre(text.trim(), "").send;
>>>>>>> main
}
7 changes: 7 additions & 0 deletions import_map.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,14 @@
{
"imports": {
<<<<<<< HEAD
"$deps": "./deps.ts",
"$grm": "https://deno.land/x/[email protected]/mod.ts",
"$grm/": "https://deno.land/x/[email protected]/"
=======
"$grm": "https://deno.land/x/[email protected]/mod.ts",
"$grm-deps": "https://deno.land/x/[email protected]/deps.ts",
"$xor": "./xor.ts",
"std/": "https://deno.land/[email protected]/"
>>>>>>> main
}
}
22 changes: 22 additions & 0 deletions main.ts
Original file line number Diff line number Diff line change
@@ -1,22 +1,37 @@
<<<<<<< HEAD
import { dirname, fromFileUrl, join } from "$deps";
import { events, LogLevel, StringSession, TelegramClient } from "$grm";

import env from "./env.ts";
=======
import { NewMessage, StringSession, TelegramClient } from "$grm";
import "./setup_log.ts";
import env from "./env.ts";
import modules from "./modules/mod.ts";
>>>>>>> main
import { managerModule, ModuleManager } from "./module_manager.ts";

const client = new TelegramClient(
new StringSession(env.STRING_SESSION),
env.APP_ID,
env.APP_HASH,
<<<<<<< HEAD
{},
);
const manager = new ModuleManager(client);
client.setLogLevel(LogLevel.NONE);
=======
{ logLevel: "none" },
);
const manager = new ModuleManager(client);
client.setParseMode(undefined);
>>>>>>> main
try {
await Deno.mkdir("externals");
} catch (_err) {
//
}
<<<<<<< HEAD
manager.installMultiple(
await ModuleManager.directory(
join(dirname(fromFileUrl(import.meta.url)), "modules"),
Expand All @@ -32,3 +47,10 @@ manager.installMultiple(
);
client.addEventHandler(manager.handler, new events.NewMessage({}));
client.start({ botAuthToken: "" });
=======
manager.installMultiple(modules, false);
manager.install(managerModule(manager), false);
manager.installMultiple(await ModuleManager.directory("externals"), true);
client.addEventHandler(manager.handler, new NewMessage({}));
client.start();
>>>>>>> main
Loading

0 comments on commit 2bc3f7e

Please sign in to comment.