net/mail: Empty quoted display name should be allowed in email address

What version of Go are you using (go version)?

1.5.3.

What operating system and processor architecture are you using (go env)?

Linux, amd64

What did you do?

Pass an email address with an empty quoted name, like:
""<EMAIL_ADDRESS>
to mail.Parse()

What did you expect to see?

The email address should parse without error

What did you see instead?

Error returned: mail: missing word in phrase: mail: empty quoted-string

Further info

We don't experience this problem on Go 1.4. I found that the offending change was in commit bd1efd50991. The first release containing this change was 1.5, which corroborates the difference I've seen between the behavior in 1.4 and 1.5.
The change in consumeQuotedString, given the tests that were added along with the change, intends to disallow an empty quoted string in the username part of the email address. However, it unintentionally also disallows an empty quoted string as the display name part of the email address -- but as far as I can tell, an empty quoted string there is perfectly valid. Since the tests did not address the case of an empty quoted name, I assume that it was an oversight. consumeQuotedString is used in these different contexts, and should not always disallow an empty quoted string. It should allow an empty quoted string when it's a part of the display name portion of an email address.
RFC5322 section 3.2.4 defines quoted string as:
quoted-string   =       [CFWS]
                        DQUOTE *([FWS] qcontent) [FWS] DQUOTE
                        [CFWS]

Given that qcontent is attached to a *, which allows for zero or more occurrences, then the zero occurrences case results in an empty quoted string, which is allowed by this definition. Thus, Go should allow empty quoted strings in email addresses, at least in the case of the display name.
For what it's worth, we're using the github.com/go-gomail package to create the message. If you pass it an empty name, it always puts ""  before the <address> part (see responsible function here), and while this is annoyingly triggering this bug in Go, it does seem to be perfectly valid as far as the RFCs are concerned.
Even if my interpretation of the RFC were wrong and current Go behavior is right, the tests are clearly not thinking about this specific case, and they should be expanded to do so.
Here is a play.golang.org reproduction of the bug: http://play.golang.org/p/iSjSINU-Dm

CC @denbeke

I can look into it if I find some time...

I think this is fixed easily by removing https://github.com/golang/go/blob/master/src/net/mail/message.go#L444.
Then adjusting some tests e.g https://github.com/golang/go/blob/master/src/net/mail/message_test.go#L612 should be valid I think because local-part can also be a quoted-string.
addr-spec       =   local-part "@" domain
local-part      =   dot-atom / quoted-string / obs-local-part

If the 'if statement' on line 444 is removed then ParseAddress(""John Doe"<EMAIL_ADDRESS>returns
Name: John Doe
Address: @example.com

instead of
Name: John Doeof
<EMAIL_ADDRESS>
So that should be fixed too.

Quoted-string can indeed be empty (so I'm indeed "guilty") :)

The changes in my branch seem to work, but I am not sure if what I did is correct.
"Rob" <@> becomes "Rob" <""@>
And I don't know whether
<"\t0"@0>

Should be valid or not.


fixed env inheritance issue, re-ordered OPTS

modified the su CMD so that root's environment, which includes passed container variables, is passed to the elasticsearch user.
modified the ordering of OPTS a bit so that --path.plugins is always last

Thanks for your help @jaychris . If you hadn't already noticed, the update was pushed at sha256:99f265f5a774e3120d1a311e1bb42983137a180b283ce0a90a6b379eb04caa8f

no problem.  I did notice.  Have pulled the latest and verified that both issues are resolved.  Thanks for the quick merge!


Update to version 1.11.0-beta1

This PR has been created automatically by the CI

Codecov Report

Merging #39 (d5c994f) into main (5cfc81c) will increase coverage by 0.47%.
The diff coverage is n/a.

@@             Coverage Diff              @@
##               main      #39      +/-   ##
============================================
+ Coverage     80.84%   81.31%   +0.47%
- Complexity       87       88       +1
============================================
  Files             9        9
  Lines           214      214
  Branches         21       21
============================================
+ Hits            173      174       +1
+ Misses           32       31       -1
  Partials          9        9

Impacted Files
Coverage Δ

...n/com/datadog/android/bridge/internal/BridgeRum.kt
75.32% <0.00%> (+1.30%)
:arrow_up:


Add text at bottom attributing image source (icon from Creative Commons)

Note to self: once icons are finalized, write attribution text, then assign to @kielni

@silasmeredith we can add this whenever you write the text/find the link; the icon source won't change
you can leave it unassigned with help wanted tag for anyone to claim

Let's use this:
“Taco truck icon build by Jane Ruby out of some awesome icons:  ICONNAME(LINK) by Focus Lab and ICONNAME(LINK) by John Caserta, from the Noun Project"
@JaneRuby , can you send the Icon Name, as well as the link, to each of the 2 icons? Many thanks!

Whoops, we forgot ", from the Noun Project." Whole text: "Taco truck icon build by Jane Ruby using
Truck by John Caserta and Taco by Focus Lab, from the Noun Project."
Also: is there a reason we put the open source link at the bottom? I thought we didn't want people outside of DevProgress involved in building this.
Thanks!

if they're not in the DevProgress github org, it works like this:

click Fork on top right (this gets them their own copy of the code)
do stuff with local copy
push changes to user's version
open PR against this repo
someone in DevProgress reviews change and accepts/rejects/requests changes

I think we do want to invite anyone to take a look and contribute; we can choose what to accept/revise/reject as needed.

fixed by https://github.com/DevProgress/more-tacos/commit/7b49a16ab3664d

@kielni , that makes sense. Thanks for explaining!


Handling RHost disconnected state

#2030: Handle RHost disconnected state in UI
#2043: Provide indication for the connection to R
#2093: Handle project loading when R is disconnected
Separated RHost from local process creation
Added IAsyncCommandRange interface for the range of commands that can be dynamically provided to the menus
Fixed unit-test concurrency issues for TestVsAppShell

:+1:

👍


Hello, may I ask how to visualize the spatial attention diagram in the paper? Where is the corresponding code?

I have successfully visualized, thank you for your great work。

could you send the visualized file to me ,thanks!

I have successfully visualized, thank you for your great work。

https://github.com/wulele2/Detr-heat-map-visualization

https://github.com/wulele2/Detr-heat-map-visualization
Hi, I ran the code you posted and got the following error, how do I fix it? Thanks a lot!
Traceback (most recent call last):
File "test.py", line 117, in
model.transformer.decoder.layers[-1].multihead_attn.register_forward_hook(
File "/usr/local/lib/python3.7/dist-packages/torch/nn/modules/module.py", line 948, in getattr
type(self).name, name))
AttributeError: 'TransformerDecoderLayer' object has no attribute 'multihead_attn'

我运行没问题，可能是pytorch版本问题，我的是1.7.1


Update shared_preferences CODEOWNER

Transfers the code ownership of shared_preferences's app-facing package to
@tarrinneal.

Per offline discussion. @gaaclarke FYI.


plutus-use-cases: make game and vesting multi-currency aware

Fixes #1036

Nothing controversial here.


[IDE/SyntaxModel] Make sure to properly annotate comment markers in single-line comment blocks

rdar://51893731

@swift-ci smoke test and merge


Chapter 1 - Layout HOC: invalid JSX

Hi,
In Chapter 1 - Layout HOC there's invalid JSX syntax.
The return statement of the custom _app.js is the following:
    return (
      <Header {...pageProps} />
      <Component {...pageProps} />
    );

However, it's not possible to return 2 components in React. I'm aware that by end of the next section this is not relevant, but till then Next won't compile at all complaining that "Adjacent JSX elements must be wrapped in an enclosing tag".
Suggestion:
    return (
      <>
        <Header {...pageProps} />
        <Component {...pageProps} />
      </>
    );

Click to see Hill for issue #245

Click to see Hill for all issues

created by Async

I had the same problem. Code wouldnt compile, it was saying the components in my return statement needed a parent element so i wrapped them in a  but once i made the material ui theme HOC and imported it in _app.js and wrapped it inside the return statement I didn't need the div anymore and code compiled and loaded successfully.

@exah-io @ywiley94 Thanks for reporting
@klyburke Please try wrapping with React.Fragment: https://reactjs.org/docs/fragments.html
If works, please edit text and code. Thanks.

@exah-io Thank you for the suggestion! Your solution worked for me. I will update the book content.
@tima101 The empty tag format suggested by @exah-io is a short syntax to declare React Fragments: https://reactjs.org/docs/fragments.html#short-syntax

Updated the book text. No need to edit the code, since we soon replace the empty tag with ThemeProvider.


Set Up Your Kanban Board

Hi ✌🏽  reviewer for this activity my colleagues and I, we made the configuration of the Kanban Board, all suggestions are welcome, have a great day
We are three in the Team
@cilfonegabriel
@luigirazum
@PierreBarba
link to the repository

https://github.com/luigirazum/mv-pokeapp

workflow

create the repository
We follow the steps to copy the project table
We follow the steps to download the cards with the project activities
we assign the activities to each participant
we review details.

Hi Team, 👋🏻👋🏻
Your project is complete!  There is nothing else to say other than... it's time to merge it :shipit:
Congratulations! 🎉🔥🔥💯💯🚀🚀

Highlights

Great working on set up the kanban board💯🚀
Great job working on the assigning the tasks 💯🚀

Optional suggestions
Every comment with the [OPTIONAL] prefix won't stop the approval of this PR. However, I strongly recommend you to take them into account as they can make your code better. Some of them were simply missed by the previous reviewer and addressing them will really improve your application.
Cheers and Happy coding!👏👏👏
Feel free to leave any questions or comments in the PR thread if something is not 100% clear.
Please, remember to tag me in your question so I can receive the notification.

As described in the Code reviews limits policy  you have a limited number of reviews per project (check the exact number in your Dashboard). If you think that the code review was not fair, you can request a second opinion using this form.

Thanks @Reem-lab for your feedback.
We are moving forward the next activities then.
Cheers,
PokeApp Team 👋


Proposal: Introduce file:// prefix for explicit file loading in multipart data

Hi, I noticed that the current implementation of multipart/form-data attempts to read a file if the specified form value is a string.
https://github.com/k1LoW/runn/blob/10bfec2fc03d0bd49d9c0bda14f08fffcdbca39e/http.go#L256:L271
This implementation caused some errors for me, and I believe the behavior can be improved by introducing a file:// prefix.

runn does not raise an error if the specified file does not exist or if the provided path string is incorrect.
absolute file paths are not accepted.

Introducing a file:// prefix could help address these issues and make the behavior more explicit and reliable.

@h6ah4i Thank you for your proposal!
Indeed, it is better to introduce file:// prefix to check files strictly.
However, I would like to keep the current behavior without prefix at the side.
This is partly for backward compatibility, but also because I want to match the behavior of other path resolution.
So, how about making it so that files are only checked strictly when a file:// prefix is added?
Then we can introduce file:// prefix in other path resolution implementations in the future.

@k1LoW  Preserving backward compatibility is an important concern as well. I agree with the direction you're taking! 👍

Released as v0.122.0 👍


java.lang.IllegalStateException

On a production app, a single device (HWDRA-MG on Android 8.1) is crashing with java.lang.IllegalStateException: (I can't reproduce this, and Play Console says it happens only on a single device)
java.lang.RuntimeException:
  at android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2969)
  at android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:3047)
  at android.app.ActivityThread.-wrap11 (Unknown Source)
  at android.app.ActivityThread$H.handleMessage (ActivityThread.java:1777)
  at android.os.Handler.dispatchMessage (Handler.java:106)
  at android.os.Looper.loop (Looper.java:166)
  at android.app.ActivityThread.main (ActivityThread.java:6857)
  at java.lang.reflect.Method.invoke (Native Method)
  at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:450)
  at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:936)
Caused by: java.lang.IllegalStateException:
  at io.flutter.view.FlutterMain.ensureInitializationComplete (FlutterMain.java:178)
  at io.flutter.app.FlutterActivityDelegate.onCreate (FlutterActivityDelegate.java:152)
  at io.flutter.app.FlutterActivity.onCreate (FlutterActivity.java:85)
  at [App's package name].MainActivity.onCreate (MainActivity.java:11)
  at android.app.Activity.performCreate (Activity.java:7110)
  at android.app.Activity.performCreate (Activity.java:7101)
  at android.app.Instrumentation.callActivityOnCreate (Instrumentation.java:1214)
  at android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2922)

Are Dart exceptions caught on the Java side? Does this mean there's a bug in Flutter or in my app? I don't think there's any documentation on this.

Possible duplicate of #24287

Closing as duplicate


ftrace: opts and colorScheme are not defined

On this line [1], both opts and colorScheme are not defined. This results in nothing happening when the function is called, e.g. from vscode-solidity-auditor.

Thank you @hacker-DOM! Merged and closed


Session Cookie Expiration

Hi, I'm currently trying to figure out how to use SessionStorage correctly (Using hummingbird 2.0 and hummingbird-auth 2.0.0-RC3).
My assumption was that if I passed in an expiresIn value when saving the session, I'd be able to extend the session lifetimes. But it looks like that the expiration date is only saved in the database, and doesn't actually affect the lifetime of the session cookie. Without setting an explicit expiration date on the cookie, it just expires whenever the browser decides that the session is over (I haven't quite figured out when that is). So, if I set an expiresIn value of 30 days, the cookie still expires way earlier.
So here's my question: Is this intentional? I can work around it taking the cookie returned by sessionStorage.save and creating a new cookie based on that with a proper expiration date. But I thought, I'd check if I'm overseeing something here.

With the current setup you'd have to return a response with a new set-cookie header.
The session code is being reworked to make it easier to work with so I would wait for that to be merged first. See #61

Sounds good. Then I'll wait for these changes 👍


Can't connect to web server?

Stopping webserver
/Users/.../git/veewee/lib/veewee/provider/core/helper/web.rb:16:in `wait_for_http_request': File "/Users/.../git/veewee/definitions/devnet-dev-base/preseed.cfg" was not requested as "/preseed.cfg" in 300 seconds, are you using firewall blocking connections to port: 7122? (RuntimeError)
Hi
For all of the below, the OSX firewall is turned off.
I see the error above when running:
veewee vbox build 'devnet-dev-base' --force
Where:
veewee vbox define 'devnet-dev-base' 'ubuntu-14.04-server-amd64'
And where:
:iso_file => "ubuntu-14.04.2-desktop-amd64.iso",
:iso_src => "http://releases.ubuntu.com/14.04/ubuntu-14.04.2-desktop-amd64.iso",
$ pwd
/Users/.../git/veewee
$ ls iso
VBoxGuestAdditions_4.3.26.iso		ubuntu-14.04.2-desktop-amd64.iso
When running the command, and waiting for the 300 sec timeout, I get (using the IP address shown in the full log below):
$ ping <IP_ADDRESS>
PING <IP_ADDRESS> (<IP_ADDRESS>): 56 data bytes
Request timeout for icmp_seq 0
Request timeout for icmp_seq 1
Request timeout for icmp_seq 2
^C
--- <IP_ADDRESS> ping statistics ---
4 packets transmitted, 0 packets received, 100.0% packet loss
Any ideas please?
Many thanks
Nathan
Full log:
veewee vbox build 'devnet-dev-base' --force
Downloading vbox guest additions iso v 4.3.26 - http://download.virtualbox.org/virtualbox/4.3.26/VBoxGuestAdditions_4.3.26.iso
Checking if isofile VBoxGuestAdditions_4.3.26.iso already exists.
Full path: /Users/.../git/veewee/iso/VBoxGuestAdditions_4.3.26.iso
The isofile VBoxGuestAdditions_4.3.26.iso already exists.
Building Box devnet-dev-base with Definition devnet-dev-base:

debug : false
cwd : /Users/.../git/veewee
force : true
nogui : false
auto : false
checksum : false
redirectconsole : false
postinstall_include : []
postinstall_exclude : []
skip_to_postinstall : false

The isofile ubuntu-14.04.2-desktop-amd64.iso already exists.
VBoxManage unregistervm  "devnet-dev-base" --delete
Deleting vm devnet-dev-base
Creating vm devnet-dev-base : 2048M - 1 CPU - Ubuntu_64
Creating new harddrive of size 30720, format VDI, variant Standard
Attaching disk: /Users/.../VirtualBox VMs/devnet-dev-base/devnet-dev-base1.vdi
Mounting cdrom: /Users/.../git/veewee/iso/ubuntu-14.04.2-desktop-amd64.iso
Mounting guest additions: /Users/.../git/veewee/iso/VBoxGuestAdditions_4.3.26.iso
Finding unused TCP port in range: 7222 - 7262
Selected TCP port 7222
Finding unused TCP port in range: 7222 - 7262
Selected TCP port 7222
Waiting 4 seconds for the machine to boot
Finding unused TCP port in range: 7122 - 7199
Selected TCP port 7122
Typing:[1]:
Starting a webserver <IP_ADDRESS>:7122, check your firewall if nothing happens
Typing:[2]: /install/vmlinuz noapic preseed/url=http://<IP_ADDRESS>:7122/preseed.cfg
Typing:[3]: debian-installer=en_US auto locale=en_US kbd-chooser/method=us
Typing:[4]: hostname=devnet-dev-base
Typing:[5]: fb=false debconf/frontend=noninteractive
Typing:[6]: keyboard-configuration/modelcode=SKIP keyboard-configuration/layout=us keyboard-configuration/variant=us console-setup/ask_detect=false
Typing:[7]: initrd=/install/initrd.gz --
Done typing.
Stopping webserver
/Users/.../git/veewee/lib/veewee/provider/core/helper/web.rb:16:in wait_for_http_request': File "/Users/.../git/veewee/definitions/devnet-dev-base/preseed.cfg" was not requested as "/preseed.cfg" in 300 seconds, are you using firewall blocking connections to port: 7122? (RuntimeError) 	from /Users/.../git/veewee/lib/veewee/provider/core/box/build.rb:242:in block in handle_kickstart'
from /Users/.../git/veewee/lib/veewee/provider/core/box/build.rb:241:in each' 	from /Users/.../git/veewee/lib/veewee/provider/core/box/build.rb:241:in each_with_index'
from /Users/.../git/veewee/lib/veewee/provider/core/box/build.rb:241:in handle_kickstart' 	from /Users/.../git/veewee/lib/veewee/provider/core/box/build.rb:82:in kickstart'
from /Users/.../git/veewee/lib/veewee/provider/core/box/build.rb:113:in build' 	from /Users/.../git/veewee/lib/veewee/provider/virtualbox/box/build.rb:10:in build'
from /Users/.../git/veewee/lib/veewee/command/vbox.rb:22:in build' 	from /Users/.../.rvm/gems/ruby-2.2.1@veewee/gems/thor-0.19.1/lib/thor/command.rb:27:in run'
from /Users/.../.rvm/gems/ruby-2.2.1@veewee/gems/thor-0.19.1/lib/thor/invocation.rb:126:in invoke_command' 	from /Users/.../.rvm/gems/ruby-2.2.1@veewee/gems/thor-0.19.1/lib/thor.rb:359:in dispatch'
from /Users/.../.rvm/gems/ruby-2.2.1@veewee/gems/thor-0.19.1/lib/thor/invocation.rb:115:in invoke' 	from /Users/.../.rvm/gems/ruby-2.2.1@veewee/gems/thor-0.19.1/lib/thor.rb:235:in block in subcommand'
from /Users/.../.rvm/gems/ruby-2.2.1@veewee/gems/thor-0.19.1/lib/thor/command.rb:27:in run' 	from /Users/.../.rvm/gems/ruby-2.2.1@veewee/gems/thor-0.19.1/lib/thor/invocation.rb:126:in invoke_command'
from /Users/.../.rvm/gems/ruby-2.2.1@veewee/gems/thor-0.19.1/lib/thor.rb:359:in dispatch' 	from /Users/.../.rvm/gems/ruby-2.2.1@veewee/gems/thor-0.19.1/lib/thor/base.rb:440:in start'
from /Users/.../git/veewee/bin/veewee:24:in <top (required)>' 	from /Users/.../.rvm/gems/ruby-2.2.1@veewee/bin/veewee:23:in load'
from /Users/.../.rvm/gems/ruby-2.2.1@veewee/bin/veewee:23:in <main>' 	from /Users/.../.rvm/gems/ruby-2.2.1@veewee/bin/ruby_executable_hooks:15:in eval'
from /Users/.../.rvm/gems/ruby-2.2.1@veewee/bin/ruby_executable_hooks:15:in `'

I also tried with Fusion, but got the same error, and I also tested whether the port was open during the 300 second window. The first test below is Fusion (veewee fusion build 'devnet-dev-base' --force)
Port Scan has started…
Port Scanning host: <IP_ADDRESS>
 Open TCP Port: 	7122

Port Scan has completed…
Then I tested again with VBox (veewee vbox build 'devnet-dev-base' --force). In this case I got:
Port Scan has started…
Port Scanning host: <IP_ADDRESS>
Port Scan has completed…
Which is to say that the port 7122 was not open on VBox.


Invalid JSON

Hi,
I've been trying to get my discord-irc version updated to use yours since the previous one is no longer maintained. Unfortunately... I'm having trouble with getting the bot to use the config.json.
I get errors similar to the following:
bot@irc:~$ ./discord-irc-linux-x64
error: Uncaught SyntaxError: Expected property name or '}' in JSON at position 11 (line 4 column 5)
    at JSON.parse (<anonymous>)
    at run (file:///home/runner/work/discord-irc/discord-irc/lib/cli.ts:39:26)
    at async file:///home/runner/work/discord-irc/discord-irc/discord-irc.ts:3:1

Sample config.json:
[

  {
    nickname: 'Example',
    server: 'irc.example.com',
    discordToken: 'redacted',
    channelMapping: {
      '#redacted': '#redacted',
      'redacted': '#redacted',
      'redacted': '#redacted'
    },
  },
];

I've also been using a JSON validator to verify that it's working as it should and even that is complaining. For reference, this's the one I was using: https://jsonlint.com
As an aside, will this bot run on its own without any requirement for using something like screen? I've been using pm2 for the previous iteration and I imagine it'd be the same but right now I've been focused on getting the bot online minimally.

JSON requires one to quote all property names with double quotes { "like_so": { ... } }
Trailing commas and semi-colons are not typically valid. It's a bit different from typescript/javascript code.
Try something like this:
[
  {
    "nickname": "Example",
    "server": "irc.example.com",
    "discordToken": "redacted",
    "channelMapping": {
      "#redacted": "#redacted",
      "redacted": "#redacted",
      "redacted": "#redacted"
    }
  }
]

Note you can't have duplicate keys, but since you redacted real channel names I figure you've got that covered.

Hello!
Thanks for responding quickly and I can confirm that the suggested update you provided does work.
However, I'd like to note that you might want to also consider updating the long-form one also, as I also used this one as well and it's not quite valid according to jsonlint.com either.

Ah, I see the issue, the previous version of the fork allowed a more loose format of JSON and we never updated the README to reflect the change!
I've gone ahead and updated the README examples to be valid. Thank you for catching this.
#31
Feel free to post your errors, happy to help you in this existing issue thread until we've got your instance working 😄

Heh... yep, that would do it. No worries, happy to help!
As for the errors --
bot@irc:~$ ./discord-irc-linux-x64
error: Uncaught TypeError: Cannot use 'in' operator to search for 'userName' in undefined
  if ('userName' in obj) {
                 ^
    at testIrcOptions (file:///home/runner/work/discord-irc/discord-irc/lib/cli.ts:6:18)
    at file:///home/runner/work/discord-irc/discord-irc/lib/cli.ts:50:36
    at Array.reduce (<anonymous>)
    at run (file:///home/runner/work/discord-irc/discord-irc/lib/cli.ts:49:31)
    at async file:///home/runner/work/discord-irc/discord-irc/discord-irc.ts:3:1

This is using the valid config that we worked out here. This is also on Ubuntu 22.04 -- and I still have the old discord-irc set up but otherwise that version is... it works, but obviously not as well as this one does.
Anyway, let me know if you need any further info to continue troubleshooting this.

I see now, that was a logical error on my part! We've always tested with ircOptions present, and I wrote validation code that assumes one has them in the first place. Seeing as they are optional I've made the fix.
Fixed in #37
Made a release for you, you'll need the new binary

Success!
... Sort of? I can see it show up Discord-side but only thing I've got is
bot@irc:~$ ./discord-irc-linux-x64
[2023/10/09 3:44:08 AM] [AGNPH] [  INFO ]: Joining channel #stuff
[2023/10/09 3:44:08 AM] [AGNPH] [  INFO ]: Joining channel #stuff
[2023/10/09 3:44:08 AM] [AGNPH] [  INFO ]: Joining channel #stuff
[2023/10/09 3:44:08 AM] [AGNPH] [  INFO ]: Joining channel #stuff
[2023/10/09 3:44:08 AM] [AGNPH] [  INFO ]: Connected to Discord
[2023/10/09 3:44:38 AM] [AGNPH] [ ✗ ERROR ]: Received error event from IRC
{
  "type": "read"
}

When monitoring the join, the bot seems to just connect and not do anything until forcibly joined to channels it's configured to be in by way of oper actions. Once that's done though, it does seem to be relaying just fine. Just not sure why.

Not sure what to tell you on this one, sounds like an issue with the IRC server.
My minimal config logs in to Libera and passes messages automatically within 30 seconds.
Can you try running with DEBUG=true ./discord-irc-linux-x64 and posting that? Could be more info. Make sure to redact any info you don't want leaked, like usernames if applicable.
My minimal config.json:
[
  {
    "nickname": "TestDiscordIRC",
    "server": "irc.libera.chat",
    "discordToken": "[REDACTED]",
    "channelMapping": {
      "#irc-test": "#irc-test"
    }
  }
]

Example working debug log output:
[2023/10/09 5:32:38 AM] [TestDiscordIRC] [  DEBUG ]: Connecting to IRC and Discord
[2023/10/09 5:32:38 AM] [TestDiscordIRC] [  DEBUG ]: Received debug event from Discord: "[Shards] Fetch /api/v9/gateway/bot..."
[2023/10/09 5:32:38 AM] [TestDiscordIRC] [  INFO ]: Joining channel #irc-test
[2023/10/09 5:32:38 AM] [TestDiscordIRC] [  DEBUG ]: Received notice:
"*** Checking Ident"
[2023/10/09 5:32:38 AM] [TestDiscordIRC] [  DEBUG ]: Received notice:
"*** Looking up your hostname..."
[2023/10/09 5:32:38 AM] [TestDiscordIRC] [  DEBUG ]: Received debug event from Discord: "[Shards] Recommended Shards: 1"
[2023/10/09 5:32:38 AM] [TestDiscordIRC] [  DEBUG ]: Received debug event from Discord: "[Shards] === Session Limit Info ==="
[2023/10/09 5:32:38 AM] [TestDiscordIRC] [  DEBUG ]: Received debug event from Discord: "[Shards] Remaining: 998/1000"
[2023/10/09 5:32:38 AM] [TestDiscordIRC] [  DEBUG ]: Received debug event from Discord: "[Shards] Reset After: 86120196ms"
[2023/10/09 5:32:38 AM] [TestDiscordIRC] [  DEBUG ]: Received debug event from Discord: "[Shards] Launching 1 shard..."
[2023/10/09 5:32:38 AM] [TestDiscordIRC] [  DEBUG ]: Received debug event from Discord: "[Shards] Launching Shard: 0"
[2023/10/09 5:32:38 AM] [TestDiscordIRC] [  DEBUG ]: Received debug event from Discord: "[Shard 0] Initializing WebSocket..."
[2023/10/09 5:32:38 AM] [TestDiscordIRC] [  DEBUG ]: Received debug event from Discord: "[Shard 0] Connected to Gateway!"
[2023/10/09 5:32:38 AM] [TestDiscordIRC] [  DEBUG ]: Received debug event from Discord: "[Shard 0] Received HELLO. Heartbeat Interval: 41250"
[2023/10/09 5:32:38 AM] [TestDiscordIRC] [  DEBUG ]: Received debug event from Discord: "[Shard 0] Sending Identify payload..."
[2023/10/09 5:32:39 AM] [TestDiscordIRC] [  DEBUG ]: Received debug event from Discord: "[Shard 0] Received Heartbeat Ack. Ping Recognized: 32ms"
[2023/10/09 5:32:39 AM] [TestDiscordIRC] [  DEBUG ]: Received debug event from Discord: "[Shard 0] Received READY. Session: 87f22d6947cbc1ba5137befa0ec6db1e"
[2023/10/09 5:32:39 AM] [TestDiscordIRC] [  DEBUG ]: Received debug event from Discord: "[Shard 0] Resolving READY"
[2023/10/09 5:32:39 AM] [TestDiscordIRC] [  DEBUG ]: Received debug event from Discord: "[Shard 0] Guilds arrived!"
[2023/10/09 5:32:39 AM] [TestDiscordIRC] [  INFO ]: Connected to Discord
[2023/10/09 5:32:39 AM] [TestDiscordIRC] [  DEBUG ]: Received debug event from Discord: "[Shards] Launched 1 shards! Time taken: 0s"
[2023/10/09 5:32:39 AM] [TestDiscordIRC] [  DEBUG ]: Received notice:
"*** Found your hostname: <IP_ADDRESS>.in-addr.arpa"
[2023/10/09 5:32:44 AM] [TestDiscordIRC] [  DEBUG ]: Received notice:
"*** No Ident response"
[2023/10/09 5:32:44 AM] [TestDiscordIRC] [  INFO ]: Connected to IRC
[2023/10/09 5:32:44 AM] [TestDiscordIRC] [  DEBUG ]: Registered event:
{
  "source": {
    "name": "molybdenum.libera.chat"
  },
  "params": {
    "nick": "TestDiscordIRC",
    "text": "Welcome to the Libera.Chat Internet Relay Chat Network TestDiscordIRC"
  }
}
[2023/10/09 5:32:50 AM] [TestDiscordIRC] [  DEBUG ]: Received names: #irc-test
[
  {
    "prefix": "",
    "nick": "TestDiscordIRC"
  }
]
[2023/10/09 5:32:50 AM] [TestDiscordIRC] [  DEBUG ]: Received join: #irc-test -- TestDiscordIRC
[2023/10/09 5:32:50 AM] [TestDiscordIRC] [  DEBUG ]: Received names: #irc-test
[
  {
    "prefix": "@",
    "nick": "Luigi"
  },
  {
    "prefix": "",
    "nick": "TestDiscordIRC"
  }
]

Since you mentioned this configuration is working for you with multiple channels, presumably the same IRC channel mapped to several different Discord channels, I'm going to add official support for this. As the code is now, the app will error out if you attempt to do this, but it works in theory as you've demonstrated.
Expect an update that fixes this soon. I also modified and enhanced logging since the last binary you downloaded, hopefully that helps.

Err... I didn't, not quite. I thought I commented on this earlier but got distracted. Whoops. ADHD at its finest.
These are actually just redacted channels but in theory it should work just fine for relaying to multiple channels but I haven't actually tested that.
Sorry about that. I also was going to mention that I wouldn't be able to test with that until tomorrow, but I'd definitely be happy to test the multi-channel setup as it should work.

Ah! No worries. From your redacted logs and the mention that using commands to join the bot manually to channels I assumed that was the case. That's lower priority, then, if you aren't actively using such a setup. I'll still implement it as it should be a supported use-case.
No rush 🙂

Right, so testing this with the privmsg command seems to be failing because I forgot to include it. Here's the sample config which results in the error:
[
  {
    "nickname": "Example",
    "server": "irc.example.com",
    "discordToken": "redacted",
    "autoSendCommands": [
       ["PRIVMSG", "NickServ", "IDENTIFY redacted"],
    ],
    "channelMapping": {
      "#redacted-id": "redacted-id",
      "redacted-id1": "#redacted-id1",
      "redacted-id2": "#redacted-id2",
      "redacted-id3": "#redacted-id3"
    }
  }
]

Results in following error:
Error parsing configuration:
ZodError: [
  {
    "code": "too_big",
    "maximum": 2,
    "inclusive": true,
    "type": "array",
    "path": [
      0,
      "autoSendCommands",
      0
    ],
    "message": "Array must contain at most 2 element(s)"
  }
]
    at handleResult (https://deno.land/x/zod@v3.16.1/types.ts:30:19)
    at ZodArray.safeParse (https://deno.land/x/zod@v3.16.1/types.ts:134:12)
    at parseConfigObject (file:///home/runner/work/discord-irc/discord-irc/lib/config.ts:55:38)
    at run (file:///home/runner/work/discord-irc/discord-irc/lib/cli.ts:40:18)
    at async file:///home/runner/work/discord-irc/discord-irc/discord-irc.ts:3:1 {
  issues: [
    {
      code: "too_big",
      maximum: 2,
      inclusive: true,
      type: "array",
      path: [ 0, "autoSendCommands", 0 ],
      message: "Array must contain at most 2 element(s)"
    }
  ],
  addIssue: [Function: addIssue],
  addIssues: [Function: addIssues],
  name: "ZodError"
}

If I take out the autocommands bit, here's what I see:
root@irc:/home/Redactedbot# tail -f debug.log
"please choose a different nick."
[2023/10/11 4:04:40 AM] [Redacted] [  DEBUG ]: Received debug event from Discord: "[Shard 0] Connected to Gateway!"
[2023/10/11 4:04:40 AM] [Redacted] [  DEBUG ]: Received debug event from Discord: "[Shard 0] Received HELLO. Heartbeat Interval: 41250"
[2023/10/11 4:04:40 AM] [Redacted] [  DEBUG ]: Received debug event from Discord: "[Shard 0] Sending Identify payload..."
[2023/10/11 4:04:40 AM] [Redacted] [  DEBUG ]: Received debug event from Discord: "[Shard 0] Received Heartbeat Ack. Ping Recognized: 104ms"
[2023/10/11 4:04:40 AM] [Redacted] [  DEBUG ]: Received debug event from Discord: "[Shard 0] Received READY. Session: 2e4da13530290a1ecc7c8ac521349f73"
[2023/10/11 4:04:40 AM] [Redacted] [  DEBUG ]: Received debug event from Discord: "[Shard 0] Resolving READY"
[2023/10/11 4:04:40 AM] [Redacted] [  DEBUG ]: Received debug event from Discord: "[Shard 0] Guilds arrived!"
[2023/10/11 4:04:40 AM] [Redacted] [  INFO ]: Connected to Discord
[2023/10/11 4:04:40 AM] [Redacted] [  DEBUG ]: Received debug event from Discord: "[Shards] Launched 1 shards! Time taken: 0s"
[2023/10/11 4:04:50 AM] [Redacted] [  WARN ]: Received Ctrl+C! Disconnecting...
[2023/10/11 4:04:50 AM] [Redacted] [  DEBUG ]: Received debug event from Discord: "[Shard 0] Destroying Shard"
[2023/10/11 4:04:50 AM] [Redacted] [  DEBUG ]: Received debug event from Discord: "[Shard 0] Closing with code 1000 and reason harmony-destroy"
^C
root@irc:/home/Redactedbot# >debug.log
root@irc:/home/Redactedbot# tail -f debug.log
[2023/10/11 4:04:58 AM] [Redacted] [  DEBUG ]: Connecting to IRC and Discord
[2023/10/11 4:04:58 AM] [Redacted] [  DEBUG ]: Received debug event from Discord: "[Shards] Fetch /api/v9/gateway/bot..."
[2023/10/11 4:04:58 AM] [Redacted] [  INFO ]: Joining channel #Redacted
[2023/10/11 4:04:58 AM] [Redacted] [  INFO ]: Joining channel #kitsunet
[2023/10/11 4:04:58 AM] [Redacted] [  INFO ]: Joining channel #pokeyiff
[2023/10/11 4:04:58 AM] [Redacted] [  INFO ]: Joining channel #Redacted-mc
[2023/10/11 4:04:58 AM] [Redacted] [  DEBUG ]: Received notice:
"*** Looking up your hostname..."
[2023/10/11 4:04:58 AM] [Redacted] [  DEBUG ]: Received notice:
"*** Couldn't resolve your hostname; using your IP address instead"
[2023/10/11 4:04:58 AM] [Redacted] [  INFO ]: Connected to IRC
[2023/10/11 4:04:58 AM] [Redacted] [  DEBUG ]: Registered event:
{
  "source": {
    "name": "irc.example.com"
  },
  "params": {
    "nick": "Redacted",
    "text": "Welcome to the IRC Network Redacted!Redacted@localhost"
  }
}
[2023/10/11 4:04:58 AM] [Redacted] [  DEBUG ]: Received notice:
"This nickname is registered and protected.  If it is your"
[2023/10/11 4:04:58 AM] [Redacted] [  DEBUG ]: Received debug event from Discord: "[Shards] Recommended Shards: 1"
[2023/10/11 4:04:58 AM] [Redacted] [  DEBUG ]: Received debug event from Discord: "[Shards] === Session Limit Info ==="
[2023/10/11 4:04:58 AM] [Redacted] [  DEBUG ]: Received debug event from Discord: "[Shards] Remaining: 995/1000"
[2023/10/11 4:04:58 AM] [Redacted] [  DEBUG ]: Received debug event from Discord: "[Shards] Reset After: 85330444ms"
[2023/10/11 4:04:58 AM] [Redacted] [  DEBUG ]: Received debug event from Discord: "[Shards] Launching 1 shard..."
[2023/10/11 4:04:58 AM] [Redacted] [  DEBUG ]: Received debug event from Discord: "[Shards] Launching Shard: 0"
[2023/10/11 4:04:58 AM] [Redacted] [  DEBUG ]: Received debug event from Discord: "[Shard 0] Initializing WebSocket..."
[2023/10/11 4:04:58 AM] [Redacted] [  DEBUG ]: Received notice:
"nick, type \u0002/msg NickServ IDENTIFY \u001fpassword\u001f\u0002.  Otherwise,"
[2023/10/11 4:04:58 AM] [Redacted] [  DEBUG ]: Received notice:
"please choose a different nick."
[2023/10/11 4:04:58 AM] [Redacted] [  DEBUG ]: Received debug event from Discord: "[Shard 0] Connected to Gateway!"
[2023/10/11 4:04:58 AM] [Redacted] [  DEBUG ]: Received debug event from Discord: "[Shard 0] Received HELLO. Heartbeat Interval: 41250"
[2023/10/11 4:04:58 AM] [Redacted] [  DEBUG ]: Received debug event from Discord: "[Shard 0] Sending Identify payload..."
[2023/10/11 4:04:59 AM] [Redacted] [  DEBUG ]: Received debug event from Discord: "[Shard 0] Received Heartbeat Ack. Ping Recognized: 102ms"
[2023/10/11 4:04:59 AM] [Redacted] [  DEBUG ]: Received debug event from Discord: "[Shard 0] Received READY. Session: c20718e51027c03938abffaa02d82d78"
[2023/10/11 4:04:59 AM] [Redacted] [  DEBUG ]: Received debug event from Discord: "[Shard 0] Resolving READY"
[2023/10/11 4:04:59 AM] [Redacted] [  DEBUG ]: Received debug event from Discord: "[Shard 0] Guilds arrived!"
[2023/10/11 4:04:59 AM] [Redacted] [  INFO ]: Connected to Discord
[2023/10/11 4:04:59 AM] [Redacted] [  DEBUG ]: Received debug event from Discord: "[Shards] Launched 1 shards! Time taken: 0s"

Seems like maybe the requirement to identify to the services is what's preventing it from actually joining the IRC channels? We can see that it says it joined the channels on IRC, but that's not actually happening here.

Here's a release that fixes it
This is a mix of two issues:

The auto-send commands were broken in code when there's more than one argument, so I fixed this. Was a TypeScript porting issue from the original JavaScript.
You probably want to authenticate to the server with the official server username/password through ircOptions. What you tried is a valid alternative that just happened to be broken, but isn't best practice.

Note that it hasn't said it joined the channels yet, you'd want to look for output like this:

You want to add a block like this:
{
  // ...
  "ircOptions": {
    "password": "[REDACTED]" // this is your NickServ password
  }
}

However, I pushed an update that will support the auto-send commands you're running, and that should work as well, just tested it.

Hi,
Will be testing this momentarily. It looks like the bot is also crashing because of pluralkit/tupper bots proxying members that technically don't exist in Discord:
error: Uncaught (in promise) DiscordAPIError:
GET https://discord.com/api/v9/guilds/example-guild-id/members/exampleid returned 404
(10013) Unknown User
      throw new DiscordAPIError({
            ^
    at BucketHandler.execute (https://raw.githubusercontent.com/harmonyland/harmony/main/src/rest/bucket.ts:170:13)
    at eventLoopTick (ext:core/01_core.js:183:11)
    at async BucketHandler.push (https://raw.githubusercontent.com/harmonyland/harmony/main/src/rest/bucket.ts:46:13)
    at async RESTManager.make (https://raw.githubusercontent.com/harmonyland/harmony/main/src/rest/manager.ts:128:12)
    at async RESTManager.get (https://raw.githubusercontent.com/harmonyland/harmony/main/src/rest/manager.ts:135:12)

Regarding the password thing -- now that you've pointed out how this is supposed to work, I'm realizing that this part of the config wasn't the most obvious with regards to the autoSendCommands setting... it's using the ircOptions function for the password.
It might be for the best to update the README.md to explain this particular bit as I originally thought it was for the autoSendCommands function and not the ircOptions function to pass along the password correctly.

Looks like json is throwing a fit again. Here's the full redacted config:
[
  {
    "nickname": "Redacted",
    "server": "irc.example",
    "discordToken": "Redacted",
    autoSendCommands: [
      // Commands that will be sent on connect
      ['PRIVMSG', 'NickServ', 'IDENTIFY password'],
      ["MODE", "test", "+x"],
      ["AUTH", "test", "password"]
    ],
    "channelMapping": {
      "#redacted": "#redacted",
      "redacted-discord": "#redacted",
      "redacted-discord1": "#redacted1",
      "redacted-discord2": "#redacted"
     },
     "ircOptions": {
      "username": "test",
      "password": "password"
     },
    format: {
      // Optional custom formatting options
      // Patterns, represented by {$patternName}, are replaced when sending messages
      commandPrelude: 'Command sent by {$nickname}', // Message sent before a command
      ircText: '<{$displayUsername} [@{$discordUsername}]> {$text}', // When sending a message to IRC
      urlAttachment: '<{$displayUsername}> {$attachmentURL}', // When sending a Discord attachment to IRC
      discord: '**<{$author}>** {$withMentions}', // When sending a message to Discord
      // Other patterns that can be used:
      // {$discordChannel} (e.g. #general)
      // {$ircChannel} (e.g. #irc)
      webhookAvatarURL: 'https://robohash.org/{$nickname}', // Default avatar to use for webhook messages
    },
    ircNickColor: false, // Gives usernames a color in IRC for better readability (on by default)
    ircNickColors: [
      'light_blue',
      'dark_blue',
      'light_red',
      'dark_red',
      'light_green',
      'dark_green',
      'magenta',
      'light_magenta',
      'orange',
      'yellow',
      'cyan',
      'light_cyan',
    ], // Which irc-upd colors to use
    parallelPingFix: true, // Prevents users of both IRC and Discord from being mentioned in IRC when they speak in Discord (off by default)
    // Makes the bot hide the username prefix for messages that start
    // with one of these characters (commands):
    commandCharacters: ['!', '.'],
    ircStatusNotices: true, // Enables notifications in Discord when people join/part in the relevant IRC channel
    ignoreUsers: {
      irc: ['DCB', 'discord-irc'], // Ignore specified IRC nicks and do not send their messages to Discord.
      //discord: ['discord_nick1', 'discord_nick2'], // Ignore specified Discord nicks and do not send their messages to IRC.
      discordIds: ['redacted-id', 'redacted-id1'], // Ignore specified Discord ids and do not send their messages to IRC.
    },
    // List of webhooks per channel
    webhooks: {
      '#discord': 'https://discord.com/api/webhooks/id/token',
    },
  },
];

Also appears that pings and display IRC users leaving/joining channels aren't working either. Sample config:
[
  {
    "nickname": "Example",
    "server": "irc.example.com",
    "autoSendCommands": [
      ["PRIVMSG", "NickServ", "IDENTIFY password"]
    ],
    "discordToken": "bloop",
    "channelMapping": {
      "#redacted": "#redacted",
      "redacted-discord-id": "#redacted1",
      "redacted-discord-id1": "#redacted2",
      "redacted-discord-id2": "#redacted3"
    },
  "ircOptions": {
    "password": "redacted",
  "parallelPingFix": true,
  "ircStatusNotices": true,
    }
 }
]

This bot is also bridging to Telegram and have received reports the pings are distracting on Telegram but as far as I can tell, while this config is valid, and the bot joins channels successfully and the like the pings and part/joins aren't actually functional.

Addressing PluralKit/webhook support now. I'll send another comment when the release is out. I'll have to set up PluralKit in my test server, but I've seen it used before.
As for readme updating I agree. I plan to revise the documentation overall this weekend with better examples and will include that in the go. I don't want it to be confusing or misleading.
As for your JSON, you're missing the double quotes around property names and strings starting at format, which should be "format". This is why various sections are throwing errors. If you resolve that, it looks good to me.
You don't need to specify the default nick colors, deleting that section will use the defaults. You also don't need to specify them if you disable the nick colors as you have, which I don't recommend unless it causes problems with other bridge applications.

I'm not sure what you mean by "pings don't work". In which direction, irc->discord or vice versa? Are these pings in the format @username or are they in @displayName or @nickName?
We use this config in prod, nearly the same as the readme, which pings users and informs IRC users how to ping (which is by username, not displayName or nickName as those caused unwanted pings consistently for our 15k user server). Supporting spaces within pingable names is a problem for both performance and parsing reasons and leads to a large volume of unwanted pings and strange formatting issues. We tried it and scrapped it because it performed terribly, and was one of the motivating factors for the rewrite.
You'd want to ping me as @luigi___ from IRC, not @Luigi, despite me showing up as Luigi with my displayName in discord chat.
  "format": {
    "commandPrelude": "{$nickname} said:",
    "ircText": "<{$displayUsername} [@{$discordUsername}]> {$text}",
    "urlAttachment": "<{$displayUsername}> {$attachmentURL}",
    "discord": "<@**{$author}**> {$withMentions}"
  },

Join/part events are working on my end, which is odd...

Yep, you got me on the "format".
I think the ping issue might still be present, hard to tell for sure but currently I've got a minimal valid json config with the ircText option that has the discord/telegram username @ mentions removed, so that's technically one way of fixing the issue:
[
  {
    "nickname": "Example",
    "server": "irc.example.com",
    "autoSendCommands": [
      ["PRIVMSG", "NickServ", "IDENTIFY password"]
    ],
    "discordToken": "redacted",
    "channelMapping": {
      "#redacted": "#redacted",
      "discord-id": "#redacted1",
      "discord-id1": "#redacted2",
      "discord-id2": "#redacted3"
    },
    "format": {
      // Optional custom formatting options
      // Patterns, represented by {$patternName}, are replaced when sending messages
      "commandPrelude": "Command sent by {$nickname}", // Message sent before a command
      "ircText": "<{$displayUsername}> {$text}", // When sending a message to IRC
      "urlAttachment": "<{$displayUsername}> {$attachmentURL}", // When sending a Discord attachment to IRC
      "discord": "**<{$author}>** {$withMentions}", // When sending a message to Discord
      // Other patterns that can be used:
      // {$discordChannel} (e.g. #general)
      // {$ircChannel} (e.g. #irc)
      "webhookAvatarURL": "https://robohash.org/{$nickname}" // Default avatar to use for webhook messages
    },
  "ircOptions": {
    "password": "redacted",
  "parallelPingFix": false,
  "ircStatusNotices": true,
    }
 }
]

However... this particular config with the irc nick colors removed (I'd left that in, was planning on enabling that once this was all sorted.)... seems to throw a fit with JSONLint around "format" after fixing it and join/parts do not seem to be working now:
[
  {
    "nickname": "Example",
    "server": "irc.example.com",
    "discordToken": "redacted",
    "autoSendCommands": [
      ["PRIVMSG", "NickServ", "IDENTIFY password"]
      ],
    "channelMapping": {
      "#redacted": "#redacted",
      "discord-id": "#redacted1",
      "discord-id1": "#redacted2",
      "discord-id2": "#redacted3"
     },
     "ircOptions": {
      "username": "Example",
      "password": "redacted"
     },
    "format": {
      // Optional custom formatting options
      // Patterns, represented by {$patternName}, are replaced when sending messages
      "commandPrelude": "Command sent by {$nickname}", // Message sent before a command
      "ircText": "<{$displayUsername}> {$text}", // When sending a message to IRC
      "urlAttachment": "<{$displayUsername}> {$attachmentURL}", // When sending a Discord attachment to IRC
      "discord": "**<{$author}>** {$withMentions}", // When sending a message to Discord
      // Other patterns that can be used:
      // {$discordChannel} (e.g. #general)
      // {$ircChannel} (e.g. #irc)
      "webhookAvatarURL": "https://robohash.org/{$nickname}", // Default avatar to use for webhook messages
    },
    "parallelPingFix": true, // Prevents users of both IRC and Discord from being mentioned in IRC when they speak in Discord (off by default)
    // Makes the bot hide the username prefix for messages that start
    // with one of these characters (commands):
    "commandCharacters": ["!", "."],
    "ircStatusNotices": true, // Enables notifications in Discord when people join/part in the relevant IRC channel
    "ignoreUsers": {
      "irc": ["DCB", "discord-irc"], // Ignore specified IRC nicks and do not send their messages to Discord.
      //discord: ['discord_nick1', 'discord_nick2'], // Ignore specified Discord nicks and do not send their messages to IRC.
      "discordIds": ["211682893293027330", "1040073034373005324"], // Ignore specified Discord ids and do not send their messages to IRC.
    },
    // List of webhooks per channel
    "webhooks": {
      "#discord": "https://discord.com/api/webhooks/id/token",
    },
  },
]

I'd also realized everything else needed to be updated to use double-quotes.. and that seems to work? But JSONLint really hates comments. I also might be missing something in here even with the helpful pointer to where the error was happening. SPEAKING OF ERRORS... lol
bot@irc:~$ tail -f debug.log
      expected: "array",
      received: "undefined",
      path: [ 0, "ignoreUsers", "discord" ],
      message: "Required"
    }
  ],
  addIssue: [Function: addIssue],
  addIssues: [Function: addIssues],
  name: "ZodError"
}
^C
bot@irc:~$ tail -f debug.log -n 120
Error parsing configuration:
ZodError: [
  {
    "code": "invalid_type",
    "expected": "array",
    "received": "undefined",
    "path": [
      0,
      "ignoreUsers",
      "discord"
    ],
    "message": "Required"
  }
]
    at handleResult (https://deno.land/x/zod@v3.16.1/types.ts:30:19)
    at ZodArray.safeParse (https://deno.land/x/zod@v3.16.1/types.ts:134:12)
    at parseConfigObject (file:///home/runner/work/discord-irc/discord-irc/lib/config.ts:55:38)
    at run (file:///home/runner/work/discord-irc/discord-irc/lib/cli.ts:40:18)
    at async file:///home/runner/work/discord-irc/discord-irc/discord-irc.ts:3:1 {
  issues: [
    {
      code: "invalid_type",
      expected: "array",
      received: "undefined",
      path: [ 0, "ignoreUsers", "discord" ],
      message: "Required"
    }
  ],
  addIssue: [Function: addIssue],
  addIssues: [Function: addIssues],
  name: "ZodError"
}
^C

I couldn't find a single JSONC linter online. If you have comments in your JSON, no online linter will validate it AFAIK. You'd have to use the command line, so I suggest removing the comments.
New release fixing the ignore config bug you found.
I looked into the code and the parallel ping fix appears to actually do nothing at this point! I'll remove it. Its use is irrelevant with the other changes to pinging I mentioned.

Nice find on the linter that checks for comments! I've removed the comments from mine and have a copy of the config with comments so I know what option does what.
As for the join/part stuff... that seems to not be working still for me. I'm not sure why. Otherwise, things are working with this config aside from the join/part:
[
  {
    "nickname": "Example",
    "server": "irc.example.com",
    "autoSendCommands": [
      ["PRIVMSG", "NickServ", "IDENTIFY password"]
    ],
    "discordToken": "redacted",
    "channelMapping": {
      "#redacted": "#redacted",
      "discord-id": "#redacted1",
      "discord-id2": "#redacted2",
      "discord-id3": "#redacted3"
    },
    "format": {
      "commandPrelude": "Command sent by {$nickname}",
      "ircText": "<{$displayUsername}> {$text}",
      "urlAttachment": "<{$displayUsername}> {$attachmentURL}",
      "discord": "**<{$author}>** {$withMentions}",
      "webhookAvatarURL": "https://robohash.org/{$nickname}"
    },
  "ircOptions": {
    "password": "redacted",
  "ircStatusNotices": true,
    "ignoreUsers": {
      "irc": ["DCB", "discord-irc"],
      "discordIds": ["211682893293027330", "1040073034373005324"],
    },
    }
 }
]

Anyway, so pings should work as intended when pinging users only as desired by removing the [@{$discordUsername}]> bit instead of bot pinging with every message.

Ah! I see the issue, your ircStatusNotices as well as ignoreUsers properties are in the wrong place. They're under ircOptions when they should be under the main-level scope. Just a misplaced }.
Try changing the final section to this:
[
  {
    // include the rest of the config above without comments
    "ircOptions": {
      "password": "redacted",
    },
    "ignoreUsers": {
      "irc": ["DCB", "discord-irc"],
      "discordIds": ["211682893293027330", "1040073034373005324"],
    },
    "ircStatusNotices": true,
    }
  }
]

Got it. Valid config is now:
[
  {
    "nickname": "Example",
    "server": "irc.example.com",
    "autoSendCommands": [
      ["PRIVMSG", "NickServ", "IDENTIFY password"]
    ],
    "discordToken": "redacted",
    "channelMapping": {
      "#agnph": "#redacted",
      "discord-id1": "#redacted1",
      "discord-id2": "#redacted2",
      "discord-id3": "#redacted3"
    },
    "format": {
      "commandPrelude": "Command sent by {$nickname}",
      "ircText": "<{$displayUsername}> {$text}",
      "urlAttachment": "<{$displayUsername}> {$attachmentURL}",
      "discord": "**<{$author}>** {$withMentions}",
      "webhookAvatarURL": "https://robohash.org/{$nickname}"
    },
    "ircStatusNotices": true,
    "ignoreUsers": {
      "irc": ["DCB", "discord-irc"],
      "discordIds": ["211682893293027330", "1040073034373005324"],
    },
  "ircOptions": {
    "password": "redacted"
    },
  }
}
]

That was a bit headache-inducing. Join/parts are now correctly displaying.

You could set the ignore IDs to yourself temporarily to test, that's what I do.
Allowing end-users to customize those messages is a bit difficult with how the code is written right now. When I re-write the formatting internals I'll be able to include configuration for it.
For now, here's a release that makes it obvious these messages are about the server.
I have PluralKit set up and am testing now. Not sure how to avoid duplicate messages from it on the IRC side though...

Both tupper and PluralKit are working fine in my tests. I don't get any crashes and messages are passed and presented as expected.

Hmm. I must've just assumed it was Pluralkit/tupper crashing the bot when it was something else. Doesn't seem to crash now.
Regarding the customization of messages -- that's fair. I think your solution works just fine.

Doesn't seem to crash now

I think that webhook user lookup issue was addressed a little while ago, so you may have had an old build at the time with the bug. We ran into a similar issue in the other discord using the bot and I fixed it in code then.
How to yeet into the background? A few options, but it depends, what Linux distro are you running, and what version of that distro (e.g. Ubuntu 20.04, Fedora 38, etc.)? I think the best way is Docker as it's easy to update, but if you don't want to use Docker there are other options that depend on your distro we can explore. If you're open to Docker I can give you instructions on how to install it for your distro and set it up with this bot, as well as keep it up to date.

fixed it in code then.

That's probably it, yup.
I run Ubuntu 22.04 and while I'd be ok with running it in docker on this server, I'm not entirely sure how that'll go. I've also used pm2 for the previous iteration of discord-irc prior to your forking of this project.
I suppose I could also use tmux? In any case, I'll give docker a shot. Keeping it updated would be very nice indeed.

Options I'd use myself if I wanted something lightweight and to manually update the binaries, in no particular order:

immortal
tmux, screen
pm2
systemd unit file

Here's a preview of one of the updated wiki articles I'll be adding, which should cover all you need to know about using the app with Docker:
Installing Docker on Ubuntu
To install docker, follow steps 1 and 2 of the linked section of this guide
Running the Docker Image
To run the Docker image, you can use the docker run command. This command creates a new container from the Docker image and starts it. If the image is not available locally, Docker will pull it from the Docker registry. Here's how you can run your app:
docker run -v /path/to/config.json:/app/config.json ghcr.io/aronson/discord-irc

In this command, -v /path/to/config.json:/app/config.json is used to mount the config.json file from your host system to the Docker container. This is known as a bind mount. The file on the host system is linked to the file in the Docker container, and any changes made to the file will be reflected in both the host system and the Docker container.
The left side of /path/to/config.json:/app/config.json (separated by :) can be any path and/or file name, but the right side must be identical to what is shown here.
Running the Docker Image with --restart=always
To ensure that your Docker container restarts automatically if it crashes, you can use the --restart=always option when running the Docker container:
docker run --restart=always -v /path/to/config.json:/app/config.json ghcr.io/aronson/discord-irc

The --restart=always option ensures that the Docker container restarts automatically whenever it stops. If it's manually stopped, it's restarted only when Docker daemon restarts or the container itself is manually restarted.
Stopping the Running Instance
To stop an instance, you will need to know its container-id. Use the docker ps command to get a list of running and/or stopped containers.
To stop a running Docker container, you can use the docker stop command followed by the container ID or name:
docker stop <container-id>

The docker stop command sends a SIGTERM signal to the main process inside the Docker container. After a grace period, if the container is still running, Docker sends a SIGKILL signal to stop the container.
With discord-irc the docker stop command should take only a few seconds.
Pulling Down an Updated Image and Replacing a Running Instance with the New Image
To pull down an updated image, you can use the docker pull command followed by the name of the image:
docker pull ghcr.io/aronson/discord-irc

This command pulls the latest version of the image from the Docker registry.
To replace a running instance with the new image, you first need to stop the running container, remove it, and then start a new container with the updated image:
docker stop <container-id>
docker rm <container-id>
docker run --restart=always -v /path/to/config.json:/app/config.json ghcr.io/aronson/discord-irc

In these commands, docker rm is used to remove the Docker container. After the old container is removed, a new container is started with the updated image.

Hi,
Just wanted to say thanks for the guide! So far, no further issues, I think. I'd be happy to continue testing the bot for every release moving forward to let you know of any new issues if you like?
Will switch to Docker and come back if I've any further issues but I think tentatively we're good but I'll let users continue trying to find new stuff, and close this by Saturday after I do the switch to Docker later today.
Again, thank you so much for working with me. I really appreciate it.

Glad it's working. Always happy to address issues as they arise.
I believe you can subscribe to notifications on this repository through GitHub to be notified of new releases as they're out. Sometimes we have a few rapid releases back-to-back. Feel free to report back if upgrades bring issues. I'll have to add a section to the guide on how to roll back to old versions.

We pushed a new release with a number of significant updates. The biggest one is we added long message splits and flood protection. Before these changes two things could happen

sending a message longer than ~480 characters on Discord would cut off the rest of the message on the IRC side
users in Discord could "use enter as punctuation" and send a bunch of messages back to back and get the IRC bot kicked on servers with flood protection

If your server has flood protection and/or you see the IRC bot getting disconnected in the log after sending a long Discord message, I suggest enabling it with this config snippet on the latest release by adding floodDelay to your ircOptions:
{
  // include other properties from before

  "ircOptions": {
    "password": "[REDACTED]",
    "floodDelay": 1000 // 1000-2000 milliseconds is a generally safe delay
  }
}

Let me know if you have any questions. The long message split is definitely a nice to have. Flood protection is disabled by default in discord-irc and on a casual or self-hosted IRC server you may not need it. The easiest way to test is to send a very long message two or three times in Discord and see if the bot gets kicked, at least on Libera.

Hi!
Got busy over the weekend, but did deploy on docker. Should be good! So far, so good! The IRC flood also works.
I think at this time I'm going to go ahead and close this issue, as everything appears to be working well at this point and I've not encountered any teething issues with config validations and the like. :D
Thanks again! I also have been following this repository ever since I came across this one.

looks like irc-channel names need to be lowercase. joins the channel on uppercase names, works from discord->irc but not irc->discord 🤦♂
probably unrelated to any of this but eh

I know the source of the issue. I'll have a fix out before the weekend is over and update you in this thread.
Thanks for bringing that to my attention, uppercase names should work

OK that was actually way easier to fix than I expected.
If you're using binaries, you can find a download for the latest build here. If you're using docker, the image tag is sha-ed56525.
Tested with uppercase IRC channels and working on my end.

The problem with "cannot use 'in'..." has not been resolved. What should I do?
PS C:\Users\willi\OneDrive\Рабочий стол\discord-irc-sync-master> & '.\discord-irc-windows-x64 (2).exe'
error: Uncaught (in promise) TypeError: Cannot use 'in' operator to search for 'userName' in undefined
if ('userName' in obj) {
^
at testIrcOptions (file:///D:/a/discord-irc/discord-irc/lib/cli.ts:6:18)
at run (file:///D:/a/discord-irc/discord-irc/lib/cli.ts:65:34)
at eventLoopTick (ext:core/01_core.js:183:11)
at async file:///D:/a/discord-irc/discord-irc/discord-irc.ts:3:1

The fix was in another branch and not released yet. Try using this release I just made, @ssemkaz, or pulling main now.
https://github.com/aronson/discord-irc/releases/tag/6.0.0


[Blocked] Add document question answering examples using Langchain

This PR adds two examples for document question answering using Langchain.

The first example, retrieval_qa_sotu_example, loads in the State of the Union speech and answers 5 questions from it. It uses retrieval QA, which works by chunking the document, getting the embeddings for each chunk, and performing a similarity search to find the chunks most similar to the prompt.
The second example, retrieval_qa_mlc_docs_example, uses the MLC documentation to answer some questions about the MLC project and functionalities. Similar to the above demo, we load in the rst files into a vector store, and perform an embedding search to find similar chunks of the documentation. In this demo, the question answering is done interactively, so the user can ask any question they would like.

I will be adding some screen recordings shortly to showcase the above demos.
Note: This is still a draft PR because there is a dependency on a Langchain change: https://github.com/hwchase17/langchain/pull/7815.

https://github.com/langchain-ai/langchain/pull/7815  is pending over a month already.   Do you think it might be some sort of political resistance since we're modifying openai.py to make it compatible with mlc-ai?     Might forking a copy into mlcai.py and taking on keeping up sync/maintenance be easier for them to merge?    🤔

langchain-ai/langchain#7815 is pending over a month already. Do you think it might be some sort of political resistance since we're modifying openai.py to make it compatible with mlc-ai? Might forking a copy into mlcai.py and taking on keeping up sync/maintenance be easier for them to merge? 🤔

@Sing-Li I'm not quite sure, I offered to explore alternative solutions in my latest comment here – https://github.com/langchain-ai/langchain/pull/7815#issuecomment-1695915524. It was stalled on a failing test that was unrelated to the PR, but I've since removed the test from the PR. Maybe we can continue to bump the PR so there is more visibility.
cc @tqchen, this would be a blocker to any QA use case in the future – let me know if you have any guidance on how else we can proceed.

Closing in favor of https://github.com/mlc-ai/mlc-llm/pull/825.


fix(marvion): speedup speedrunning start

@MarvionKirito

Why remove the search better biome task? And there's a get porkchop task there just to let the bot get close to the better biome. And you should make a setting for get twisting vines task.


Add config option generated_file_header_size

Fixes https://github.com/rust-lang/rustfmt/issues/5658 ...and a follow on of the work in https://github.com/rust-lang/rustfmt/pull/5659 by @captbaritone which has not been updated in a while.
FYI @ytmimi - I noticed your comments on the previous PR and address them in this PR. Mainly around the docs changes and adding more tests.
p.s. - learning Rust so apologies for any basic errors here.

@IVIURRAY thanks for taking the time to work on this and make those updates. As Caleb mentioned in https://github.com/rust-lang/rustfmt/pull/5659#issuecomment-1421628967, he'd like to use a more descriptive name for this option. Do you have any ideas for a succinct and clear name that better convey the intent of this option?
One idea I had was calling it generated_file_marker_search_lines. It's a little wordy, so let me know if you can come up with something better.

I'm not a fan of generated_file_marker_search_lines as it indicates you're seaching for them when really is it just taking the first N lines. So really a header or prefix would be a better descriptor, in my opinion.
I used chatGPT (and a few in myself) to generate us some ideas...my favourites being:

file_prefix_lines

file_auto_generated_lines

file_header_lines
header_line_count
file_auto_generated_prefix_lines
file_prefix_lines
generated_line_count
auto_generated_line_count
header_lines
file_header_lines
header_prefix_lines
copyright_header_lines
generated_header_lines
license_header_lines
meta_header_lines
source_tree_header_lines
signed_source_header_lines
file_metadata_lines
start_of_file_header_lines
file_start_header_lines
initial_header_lines
top_comment_lines
header_intro_lines
file_intro_lines
code_header_lines
declaration_header_lines
file_heading_lines

Thanks for picking this up!

I'm not a fan of generated_file_marker_search_lines as it indicates you're searching for them when really is it just taking the first N lines. So really a header or prefix would be a better descriptor, in my opinion.

@IVIURRAY Just want to make sure we're on the same page. Yes this option will literally configure N so that we can consider the first N lines, but we're doing so in order to search for the @generated marker.

Oh I see, yes, you're right. It is less of a prefix and more a range. Find the @generated marker within the first N lines.
I'll wait to hear from you on what you decide 😄

Caleb echoed my thought process when we had our team meeting earlier this week. Here's a link to his comment. Ultimately the name needs to reflect that we're searching for the @generated marker within the first n lines of the file.

Thanks for the links to the conversation. This has help me understand the context and change in more depth.
Here are a few more suggestions given the context:

generated_marker_line_search_limit (This would be my choice as it is the most obvious; I would get a good undersatnding about what it is doing without needing to look at the dcos)
generated_tag_line_search_limit
generated_marker_search_limit
generated_marker_check_limit
generated_line_check_limit
generated_tag_limit

generated_marker_line_search_limit seems like a reasonable name to me.

generated_marker_line_search_limit seems good to me as well.

i like the new generated_marker_line_search_limit name :+1:

@ytmimi let me know if you want more changes as I'm considering this MR as done now 🙂


Add local-completions support using OpenAI interface

Since ChatCompletions doesn't allow for loglikelihood support, adding a locally hosted OAI-like server interface for Completions will allow for an easier interface to get loglikelihood for open-source models

Thanks for the fast review @haileyschoelkopf ! I also added a tokenizer input to specify the transformers model_id to use for the tokenizer if the model name doesn't match a transformers model_id exactly. Maybe we could remove tokenizer_backend and just use transformers if a tokenizer is defined? I'll share an example of how I tested this with deepsparse
Server:
deepsparse.server --integration openai --task text-generation --model_path hf:mgoin/llama-2-7b-gsm8k-pruned60-quant-ds

Client lm-eval:
lm_eval --model local-completions --model_args base_url=http://localhost:5543/v1,model=hf:mgoin/llama-2-7b-gsm8k-pruned60-quant-ds,tokenizer_backend=huggingface,tokenizer=mgoin/llama-2-7b-gsm8k-pruned60-quant-ds --tasks gsm8k --num_fewshot 0

Maybe we could remove tokenizer_backend and just use transformers if a tokenizer is defined?

Sounds good to me! We may want to add a check or log message warning people in the event they pass base_url but not tokenizer to initialization though, or a log message saying what tokenizer name + backend type are being used.
You may need to copy this handling in for the HF tokenizer case though:
https://github.com/EleutherAI/lm-evaluation-harness/blob/89618bf8421d27c8cf28004d616b33fc5b305ceb/lm_eval/models/huggingface.py#L228C9-L239C76

Also cc @veekaybee @gmottajr this PR updates local-completions
@mgoin does Deepsparse's OpenAI server support echo=True for completions logits? If so, will it continue to do so?

Hey @haileyschoelkopf I'll add in the tokenizer messaging today. I don't think we've implemented echo yet but I think we can do it easily, let me give it a shot

Thanks again for the contribution @mgoin !
Let me know if you get a chance to check out echo=True soon.

Hey @haileyschoelkopf sorry for this falling off my radar, I had the changes but forgot to push 😅
I think for the server, rather than using the openai-style interface we'll actually just submit native local model backends for deepsparse and sparseml. Trying to stabilize the interface for sparseml to submit my fork next week

No problem!

I think for the server, rather than using the openai-style interface we'll actually just submit native local model backends for deepsparse and sparseml. Trying to stabilize the interface for sparseml to submit my fork next week

fantastic! Hopefully these can be used as templates for other local server LMs, in the event that using the OpenAI style interface blocks echo=True.


Isometric (3D) grid option

Add an option to change the grid type to isometric (3D). This is the proper grid for creating 3d diagrams (like the AWS 3D shape set) and will allow for creating proper diagrams and connections between 3D shapes. An example of this from another product is http://cloudcraft.co (free trial).
A member edmoura wrote "I have been able make the grid below by leveraging the functionality in PR #340:
https://user-images.githubusercontent.com/16357187/60742904-76831880-9f6f-11e9-8296-52be20a0836e.png

We really miss feature, as draw.io is the most interesting software to do isometric diagrams, especially with diagram as code.

If you still want a feature, indicate support for the feature by "thumbs up" on the original post.


Connect Jot Messenger abilities with membership levels

The most important to have membership action for creation new talk.

Connect Video Recording with membership levels.

Connect Video Recording with membership levels.


Fix code format

Summary
Fix code format and fix the API usage.

Hi @lindexi - thank you for fixing this. There is a build error, could you please also add a new .csproj for this?

Check failure on line 1 in samples/snippets/csharp/VS_Snippets_CLR/Asynchronous_File_IO_async/cs/example.cs
GitHub Actions
/ snippets-build
samples/snippets/csharp/VS_Snippets_CLR/Asynchronous_File_IO_async/cs/example.cs#L1
😵 Project missing. A project (and optionally a solution file) must be in this directory or one of the parent directories to validate and build this code

@IEvangelist  Sorry, I can not compile the project after I added the csproj file. Because we define the same MainWindow class in example.cs and example3.cs and example4.cs
Should I rename the MainWindow to MainWindow3 or MainWindow4 in  example3.cs and example4.cs ?


Add Debian build support.

Building on Debian "testing/buster" is pretty straight forward. A few dependencies are not available, and needs to be complemented with some from "unstable/sid"

Any ideas when this PR can be accepted?

Any reason why blocked? Why is it that cool idea to run EOS (nodeos) on the latest & greatest desktop linux distro - ubuntu 18.04? Debian is known to be solid, robust - and that's why we added support for it. How can we help?

Please resubmit your pull request against EOSIO:release/1.1.

@jgiszczak rebased.


Store the OAUTH2 id_token in the id_token extra data.

We needed to implement the logout flow for OKTA. Docs here https://developer.okta.com/docs/reference/api/oidc/#logout. It is not super clear but the  id_token_hint param is expected to be the id_token provided by OKTA in response the /token request.
It turns out that the id_token and id_info field in extra where being populated from the access_token instead of the id token. The attached change fixes that to return the id_token.
I kept the nil check but the token should always be present in the response of https://developer.okta.com/docs/reference/api/oidc/#token as long we request the openid scope.

For those who get here because of the logout API reference:
When you have a valid id_token and id_info you can do this to build the OIDC logout API URL something like this. "auth" in this case is the payload you get in Devise::OmniauthCallbacksController request.env['omniauth.auth']. Presumably you stashed what you need from it.
def idp_logout_url(auth, post_logout_redirect_uri: nil, state: nil)
    issuer = auth.dig('extra', 'id_info', 'iss')
    id_token = auth.dig('credentials', 'id_token')

    return unless issuer.present? && id_token.present?

    "#{issuer}/v1/logout?" + {
      id_token_hint: id_token,
      post_logout_redirect_uri: post_logout_redirect_uri,
      state: state,
    }.compact.to_param
 end

Out of curiosity, when will this get merged?

@dandrews @jduff @BobbyMcWho ^^

We have the same situation where we need to implement logout url. Could this PR be merged?

I'll try and find some time this week to review this and merge if appropriate. I don't look at this codebase super frequently, so it takes a little bit to regather context

I ran into this issue today. Is there something I can do to help get this merged?

@ryanswood were you able to test it out in your app using the branch? I don't run any okta-authed apps at the moment, but I'm happy to cut a release if someone confirms expected behavior

@BobbyMcWho Apologies for not getting back to you sooner. I was pulled away to handle a work emergency. Next on my list is to validate the change using the PR. My first validation effort consisted of copying the change to my app using a custom inherited strategy.

@BobbyMcWho I was able to test the solution in this PR using an Okta instance. I decided to slightly improve the solution by checking presence for the proper Oauth2 token and adding a spec. My PR

I appreciate your patience on this folks, this has been released in v2.0.0. Released on rubygems.


Add starter file for feature grouping effort

This seeds a directory for bringing the work of work of ddbeck/common-web-platform-feature over here.
This week, Chris (I don't know his GitHub username, unfortunately) posed an interesting question to the WebDX CG call, which was, badly paraphrased: what is a web feature? Coincidentally, I was also wondering about this question myself a few weeks previous and had written myself an answer. I didn't think anyone would be interested in it, but since Chris asked, I've tidied it up and used it to start the README for the feature grouping work.
cc: @atopal

IMO, we could think of features as trees where the root is a big chunk of things (e.g. SVG) and the leafs are the most specific subfeatures that we don't need to further divide into subfeatures (e.g. SVG vector-effect: non-scaling-stroke).
This means we can organize features and if necessary split or add child features in the taxonomy.
Given that feature lists such as caniuse or https://chromestatus.com/features range from broad to specific, it seems reasonable that we should be able to address "features" at different levels of granularity.

IMO, we could think of features as trees where the root is a big chunk of things (e.g. SVG) and the leafs are the most specific subfeatures that we don't need to further divide into subfeatures (e.g. SVG vector-effect: non-scaling-stroke).

@zcorpan This is a good remark. I agree that we'll be treating these things as a tree, though I didn't want commit to a specific structure just yet (e.g., maybe there's multiple trees that aren't necessarily connected—right now the mockup doesn't put everything under a single tree, at least). I think François's suggested text covers the granularity question nicely, until we've got a stricter sense of things.


Docs: Nullability in GuildMessageReactionAddEvent

Pull Request Etiquette

[x] I have checked the PRs for upcoming features/bug fixes.
[x] I have read the contributing guidelines.

Changes

[ ] Internal code
[ ] Library interface (affecting end-user code)
[x] Documentation
[ ] Other: _____

Closes Issue: #1385
Description
As of now, the docs for GuildMessageReactionAddEvent are copied from GenericGuildMessageReactionEvent, which states that getMember and getUser can be null. However, GuildMessageReactionAddEvent is guaranteed to have a user and member, and there are annotations in place to indicate this.
This PR adds 2 javadoc sections to GuildMessageReactionAddEvent, so it doesn't wrongly use those of its superclass.
The topic was already brought up in #1385, and deemed not a bug. I'd argue that more documentation and thus less confusion is always good, but if you disagree, it's your call to close this.

This needs to be rebased on docs/development.


autocompletion does not work on RobotFrameWork keywords with PyCharm 2019.2 and Eclipse  version 2019-03(4.11.0)

My configuration:
OS : ubuntu 18.04
Pycharm : community 2019.02  used plugings: intellibot,, intellibot@seleniumLibrary Patched
configuration robotframework:
robotframework (3.1.2)
robotframework-appiumlibrary (<IP_ADDRESS>)
robotframework-databaselibrary (1.2.4)
robotframework-jenkins (1.0.2)
robotframework-requests (0.5.0)
robotframework-selenium2library (3.0.0)
robotframework-seleniumlibrary (3.3.1)
the autocompletion does not work on robotFrameWork keywords on Pycharm.
I have the same issue  with Eclipse Eclipse :  version 2019-03(4.11.0)
Please could you help me to fix this issue?
thanks in advance

This is most likely due to the plugin not recognizing the dynamic API that SeleniumLibrary nowadays uses. I've heard there is a plugin that has this issue fixed by hard-coding SeleniumLibrary keywords. That's not a very good solution, but ought to provide a workaround until someone creates a plugin that can actually use the dynamic API. Anyway, this issue tracker is for issues related to Robot Framework itself. Issues related to plugins should be reported to their own trackers. Mailing lists, Slack, etc. can also be used to ask others how they've resolved this issue.

@pekkaklarck  @remicharleslageixarena  Were any of you able to resolve this issue? I am still facing with the similar issue while using on Appium library.

The Language Server Protocol based plugin supports all Robot's library APIs by using Robot's APIs directly. I recommend giving it a try.


Task: Define outbound message event structure

Figure out how much information is required alongside the packed message for the outbound message delivery to deliver the message correctly. This structure will be included in the outbound message event payload.

I propose we make a QueuedOutboundMessage class that extends Event from eventBus and implements QueuedOutboundMessage class.  Currently The event class has a payload and topic. The QueuedOutboundMessages have a few more attributes used for routing. With events of this kind, we can easily drop in the notify and subscribe interface where needed. This also gives us room to change if we learn something needs to be different.

https://github.com/hyperledger/aries-cloudagent-python/pull/1286


Fix caddy config messing up routing

Previous settings was routing every page into index.html, which was causing hydration errros. This should fix it.

This should fix #8.


⚠ Samsung has degraded performance

In 314cc6d, Samsung (https://samsung.com) experienced degraded performance:

HTTP code: 200
Response time: 5889 ms

Resolved: Samsung performance has improved in 00e98f9.


is this still in development

hi .. I wanted to port your project to crystal lang but I saw this is using an old uws version , I'm not c++ guy can you please help me ?

Yeah but will be in a pause until socketify.py gets its first release, I also plan to do a socketify.lua


Regenerate package-lock with dev flags

https://github.com/terkelg/tiny-glob/commit/1ea4098b65583adfc591c91be34789c666fb8576 should have updated the package-lock.json as well. When you run npm install it will set "dev": true on the dev dependencies in package-lock.json

This is going to be released as v0.2.8

I don't think it needs a new release. Shouldn't have any impact on users

Oh well, I already pushed a new version before I saw your comment

doesn't hurt :smile:


Init/frontend

Add simple form and validation
1st validation will be triggered after the submit button is clicked. After that, the validation will happen every time the field is changed.
If the form validates success, the alert will show. Otherwise, an error message will display

Example Screenshot
All field pass validation

Some field failed

LGTM CI is fixed in main branch


Bilibili.Bilibili-uwp version <IP_ADDRESS>

[ ] Have you signed the Contributor License Agreement?
[ ] Have you checked that there aren't other open pull requests for the same manifest update/change?
[ ] Have you validated your manifest locally with winget validate --manifest <path>?
[ ] Have you tested your manifest locally with winget install --manifest <path>?
[ ] Does your manifest conform to the 1.0 schema?

Note: <path> is the name of the directory containing the manifest you're submitting.

Microsoft Reviewers: Open in CodeFlow

/azp run

The application failed to install on an x86 system due to a missing dependency.


Upgrade Golangci-lint to v1.50.0

https://github.com/golangci/golangci-lint/releases/tag/v1.50.0
Related to: https://github.com/test-network-function/cnf-certification-test/pull/604

Coverage remained the same at 84.5% when pulling bdab1b89b24f718357e5afbbca10a0ca3cbc25dd on sebrandon1:golangci_lint_upgrade into b6ca54ff472da46e574cfe11900e071c85c9e127 on redhat-openshift-ecosystem:main.

/ok-to-test


Move config to runtime

Remove config/prod.secret.exs and instead use config.runtime.exs. This address https://github.com/beyond-all-reason/teiserver/issues/236
Now, most of the server can be configured through this file that is loaded at runtime. Changing it and restarting the server is enough.
Sensitive values like secrets are loaded through the environment. I provided an example for an EnvironmentFile.
I split up the changes in many small commits so hopefully it should be easy to review and make sure I haven't missed anything. I based my work on the provided example production secret file.
There are still some things like cipher config in config/prod.exs that are baked into the compiled bytecode since they are unlikely to change.
@p2004a This is difficult to test that locally since I have no idea what the actual production secret file looks like. Feel free to amend this new runtime file as needed.
In the original issue there was some mention of reloading the config without having to restart the server. That seems considerably more involved so I skipped this bit. Theses changes should already make the deploys easier.

I've added some commits so that the configuration now matches what you linked me.
You shouldn't need to template the configuration anymore and should be able to achieve the same result purely through environment variables that you can pass to the docker container now.

@geekingfrog Do you think it would be possible to make ports, on which the server listens (tcp, tls, tachyon), configurable as well? I am currently running into an issue where I have to change the values in config locally since I have some other services running on these ports. It would be nice to be able to change the ports via config/environment and not having to have to change code every time.

@AdamChlupacek Done in f7be2eec3a78d6fe506bdd458b7a6daa777f8958 (also rebased https://github.com/beyond-all-reason/teiserver/pull/281)

I've pushed a few more changes. Thanks for the pointer to the discord (and smtp) guide.
I managed to build the application and run it locally with the updated example env file and everything seems to work, I even got the email setup working.
MIX_ENV=prod mix release --overwrite
set -o allexport; source documents/prod_files/example-environment-file; set +o allexport
./_build/prod/rel/teiserver/bin/teiserver start


Errors building Cairo: libx11-dev dependency

Tracking the issues with the proteomics2 container, I identified the following issue when running
biocLite("Cairo")

gcc -std=gnu99 -I/usr/local/lib/R/include -DNDEBUG -I/usr/include/cairo -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/pixman-1 -I/usr/include/freetype2 -I/usr/include/libpng12   -I. -Iinclude  -I/usr/local/include  -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -g -fpic  -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -g  -c xlib-backend.c -o xlib-backend.o
xlib-backend.c:34:74: fatal error: X11/Intrinsic.h: No such file or directory
 #include <X11/Intrinsic.h>      /*->    Xlib.h  Xutil.h Xresource.h .. */
                                                                          ^
compilation terminated.
/usr/local/lib/R/etc/Makeconf:159: recipe for target 'xlib-backend.o' failed
make: *** [xlib-backend.o] Error 1
ERROR: compilation failed for package ‘Cairo’
* removing ‘/usr/local/lib/R/site-library/Cairo’

The downloaded source packages are in
	‘/tmp/Rtmp1hA2tS/downloaded_packages’
Warning message:
In install.packages(pkgs = doing, lib = lib, ...) :
  installation of package ‘Cairo’ had non-zero exit status

I think that adding libx11-dev to the list of apt-get install packages will fix this.
Any suggestions whether it would be best to add in a lower-level container such as base?

My initial feeling is that it should be added in your docker script.  The base packages don't need this dependency nor do any of the packages we have on our core container; so it feels more appropriate to add it where it is being used.
@mtmorgan thoughts?  Maybe it should be added to base?

Ok, I'll add it to the proteomics container. If there's interest, I'll make the change wherever is useful.

+1 lib*-dev should be as late as possible, but that might be in a parent container
(almost) all of its children require it, and if the task of that intermediate container
is to accumulate as much common stuff between its children. Just my 2c, Steffen

It appears that it's actually libxt-dev that is missing and stops Cairo to install. I hope to get that fixed soon and send a PR that fixes the proteomics2 containers.


DUE 13th - Collaborate with PO/SM on Gantt Roadmap workshop

Describe the issue
We need a similar style gantt chart to the Platform services team for our roadmap journey to present to ADM by Aug 13.
Which Sprint Goal is this issue related to?

Note: 'Milestone' is a ZenHub term that we use synonymously with 'Sprint'.

The 'Milestone' description (created in ZenHub) should clearly list Sprint Goals. This section should indicate which 'goal' this issue is related to.
Additional context
Add any other context, attachments or screenshots
Definition of done

Meeting with PO, SM and Martha on Tuesday
Transfer the results to the ppt format
Align with Martha on the deck
Bahaa to fine tune and review

Closing as complete.


TypeError when options is missing from rule

standard-loader 6.0.0 fails hard when options is missing from webpack rule:
rules: [
      {
        enforce: 'pre',
        test: /\.jsx?$/,
        loader: 'standard-loader',
        exclude: /(node_modules|bower_components)/,
      },
      // other loaders...
    ]

This results in following error:
Module build failed: TypeError: Cannot set property 'filename' of null
    at Object.standardLoader (node_modules\standard-loader\index.js:13:19)

When there are no options, loaderUtils.getOptions(this) returns null, and setting filename on null won't work.
Also, return value of getOptions should be considered immutable according webpack/loader-utils#56:

The returned options object is read-only, you should not modify it. This is because getOptions can not make assumptions on how to clone the object correctly.

Thanks, good catch. Released in 6.0.1

@timoxley Can you publish on npm? Thanks!

Done

Thanks for the quick fix!


Add consecutive_down and consecutive_up parameters to cloudflare_load_balancer_monitor

Current Terraform and Cloudflare provider version
terraform {
required_providers {
vault = {
source = "hashicorp/vault"
}
cloudflare = {
source  = "cloudflare/cloudflare"
version = "~> 3.16.0"
}
}
required_version = ">= 1.0"
backend "remote" {
organization = "bmgf"
workspaces {
  name = "tf_cloudflare"
}

}
}
Description
Via the Cloudflare API (https://api.cloudflare.com/#account-load-balancer-monitors-create-monitor) you can set the consecutive_down and consecutive_up parameter values for the Cloudflare Load Balancer Monitor resource but not with the Terraform Provider. Can we have these added?
Use cases
We are managing our LB Monitors via Terraform as with everything else. Having a consecutive_up and consecutive_down parameter will give us more flexibility in fine-tuning the monitors we use for our LB pools.
Potential Terraform configuration
resource "cloudflare_load_balancer_monitor" "lb_monitor" {
type           = "https"
expected_body  = "Healthy"
expected_codes = "2xx"
method         = "GET"
timeout        = 5
path           = "/healthcheck"
interval       = 10
port           = 443
retries        = 1
description    = "monitor for ${var.zone_name}"
header {
header = "Host"
values = [var.zone_name]
}
allow_insecure   = true
follow_redirects = false
consecutive_down = 2
}
References
No response

+1


ERROR: Unhandled Promise rejection: user canceled

Hi, I'm using the safari view controller lately, and it seems that when the user hits 'done' to exit the safari view and get back to the app, the following error is thrown:
unhandled promise rejection. [Error] Unhandled Promise rejection: – "user canceled" – "; Zone:" – "<root>" – "; Task:" – "Promise.then" – "; Value:" (2) Error: user canceled — index.js:105 "handleClose@http://<IP_ADDRESS>:8100/vendor.js:88221:38 http://<IP_ADDRESS>:8100/vendor.js:88227:22 http://<IP_ADDRESS>:8100/vendor.js:87968:13 callbackFromNative@http://<IP_ADDRESS>:8100/cordova.js:288:63 http://<IP_ADDRESS>:8100/plugins/cordova-plugin-ionic-webview/src/www/ios/ios-wkwebview-exec.js:129:35 run@http://<IP_ADDRESS>:8100/polyfills.js:3029:49 http://<IP_ADDRESS>:8100/polyfills.js:3789:37 runTask@http://<IP_ADDRESS>:8100/polyfills.js:3074:57 drainMicroTaskQueue@http://<IP_ADDRESS>:8100/polyfills.js:3480:42 promiseReactionJob@[native code]" (anonymous function) (consolelogs.js:50)  (anonymous function) (cordova.js:1509)  onUnhandledError (polyfills.js:3582)  handleUnhandledRejection (polyfills.js:3609)  _loop_1 (polyfills.js:3599)  microtaskDrainDone (polyfills.js:3603)  drainMicroTaskQueue (polyfills.js:3487)  promiseReactionJob
The problem does not arise when the safari view returns to the app on its own; without the user explicitly clicking 'done.'
Anyway, I did go to the 'ios-wkwebview-exec.js' file and it turns out there is no catch statement chained to the promise on line 129. However, i tried adding it myself, but i still get the error.
I have also tried removing and adding the ios platform but to no avail.
I Have not tried it on android.
Here's my info:
`Ionic:
Ionic CLI                     : 5.2.1 (/usr/local/lib/node_modules/ionic)
Ionic Framework               : @ionic/angular 4.5.0
@angular-devkit/build-angular : 0.800.4
@angular-devkit/schematics    : 8.0.4
@angular/cli                  : 8.0.4
@ionic/angular-toolkit        : 2.0.0
Cordova:
Cordova CLI       : 9.0.0<EMAIL_ADDRESS>Cordova Platforms : android 8.0.0, ios 5.0.1
Cordova Plugins   : cordova-plugin-ionic-keyboard 2.1.3, cordova-plugin-ionic-webview 4.0.1, (and 12 other plugins)
Utility:
cordova-res : 0.5.1
native-run  : 0.2.7
System:
ios-deploy : 1.9.4
ios-sim    : 8.0.1
NodeJS     : v10.15.3 (/usr/local/bin/node)
npm        : 6.9.0
OS         : macOS Mojave
Xcode      : Xcode 10.2.1 Build version 10E1001
`

that looks like the safari view controller plugin is sending the canceled error, so you should catch it in your code.

Any update ?


Limit GPU memory used by Tensorflow

Limit GPU memory used by Tensorflow to a configurable fraction, e.g. 0.5

Thanks @svola for the contribution, it's great to see you are trying out the repo. I would like to keep the script quite simple and general -- I think many people running the example will not be on a machine with GPUs and may even be following along on their laptop. For this reason I'm going to close the PR.

@jtibshirani I have been running the script on my laptop and without adding the memory limitations my whole screen freezed. I haven't worked with Tensorflow before so I don't know much about the internals. But only with this setting the code was actually executable on my machine.

Thanks for the clarification @svola, I'll re-open this PR and review it.


Update quickstart instructions for two tunnels

The free tier of ngrok disallows 2 simultaneous agents running. To solve, specify two tunnels in the config file for the one agent to run. Hat tip to: https://www.wesleyabbey.io/post/ngrok-multiple-tunnels

Thanks! For some reason two tunnels worked for me when I wrote the docs. But the clarification is good!


[11.x] Reduce the number of queries with Cache::many and Cache::putMany methods in  the database driver

Changelog

Implements the many and putMany methods in the DatabaseStore cache driver. The previous implementation was doing a database query for each key, but now it does only 1 query for all (2 if it finds expired keys)

I was exploring fragment caching on my views... then found out the many method of the database cache driver was doing a database query for each cache key. The new implementation does only one query for all keys and then builds the results from what it finds. Additionally, it deletes the expired keys it finds in a single query as well.
The putMany had a similar story: it was doing a database query for each key. Now, it only does one upsert.
I made the get and put methods use the many and put ones behind the scenes so we can rely on the same implementation. This step is optional and we can revert the commit, if y'all don't want that.

The tests seem to be broken in 11.x, so I don't think it's because of these changes here.

@tonysm This seems interesting. Is the idea to store multiple models with the putMany method?

@francoism90 no, it's about caching view partials, and being able to retrieve all fragments in a single query is essential there. See the Rails Guide on this, it's a similar idea, but using my own Blade components or directives to achieve the same result.


Create Delius account

#ask-probation-webops

As discussed here -  https://mojdt.slack.com/archives/C032BQQHJE5/p1659700192435099
This ticket probably isn't in a state to get started yet; it looks like it's in need of information.

Expect to get an update on Tuesday.


Title: Movie Recommendation System

Initiative (Required)
Hacktoberfest 2024 🎃
Is your feature request related to a problem? Please describe.
This will add a new intermediate level feature of movie recommender system in ML domain.
Describe the solution you'd like.
Introduce an enhanced recommendation feature using collaborative filtering and cosine similarity. This new functionality will analyze users' past ratings and preferences to deliver movie suggestions that are specifically tailored to each individual. This will allow users to discover movies more aligned with their viewing habits and interests. The search will be based on the past search titles of the movies that the user liked.
Add any other context or screenshots about the feature request here.
No response

I would like to work on this issue. Kindly assign me this task under GSSoC Ext 2024 and Hacktoberfest 2024. Thank you!

I am the mentor of this project
@mjgandhi2305  Hello Thank you for opening the pull issue and you can opening new issue by creating the new concept those are not exist in the project !!
@Kushal997-das kindly close the issue !!!